apicompatanamdw/compatanalysercmd/headeranalyser/src/Analyser.cpp
author noe\swadi
Mon, 26 Apr 2010 16:28:13 +0530
changeset 3 ebe3f8f03b59
parent 0 638b9c697799
child 12 a0eee409ff14
permissions -rw-r--r--
Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
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
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   886
			string forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   887
			char* base = new char[KMaxDirLength+1];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   888
			getcwd(base, KMaxDirLength);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   889
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   890
			vector< stringpair > tmpfiles;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   891
			vector< stringpair > invalid;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   892
			// Loop all the headers that are in the same component:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   893
			for( FileList::iterator bH = baseCmpHeaders.begin(); bH != baseCmpHeaders.end(); ++bH )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   894
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   895
				Header* baseHdr = dynamic_cast<Header*>(*bH);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   896
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   897
				PlatformHeaders::iterator pairIter = FindHeaderPair(baseHdr->ID(), pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   898
				if(pairIter != pfHeaders.end() && pairIter->second != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   899
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   900
					// 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
   901
					if( (pfHeaders.size() > 1) && baseHdr && (baseHdr->Status() == Header::HDR_STATUS_TO_BE_ANALYZED) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   902
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   903
						stringpair tmp(baseHdr->ID(), pairIter->second->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   904
						tmpfiles.push_back(tmp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   905
					}
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
			if(tmpfiles.size())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   910
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   911
				// If analysing in bundle, validate for include guard before addition to bundle.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   912
				validateHeaders(tmpfiles, invalid);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   913
				// Exclude "iInvalidFiles" from bundle analysis. Analyse them only singly. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   914
				if( invalid.size() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   915
				{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
   916
					for( int i=0 ; i < (int)invalid.size() ; i++ )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   917
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   918
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   919
						PlatformHeaders::iterator pairIter = FindHeaderPair(invalid[i].first, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   920
						//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
   921
						HeaderPair temp(pairIter->first, pairIter->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   922
						if(find(iInvalidFiles.begin(), iInvalidFiles.end(), temp) == iInvalidFiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   923
							iInvalidFiles.push_back(temp);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   924
						pairIter->first->SetStatus(Header::HDR_STATUS_INVALID);	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   925
					}
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
			for( FileList::iterator bH = baseCmpHeaders.begin(); bH != baseCmpHeaders.end(); ++bH )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   930
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   931
				Header* baseHdr = dynamic_cast<Header*>(*bH);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   932
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   933
				PlatformHeaders::iterator pairIter = FindHeaderPair(baseHdr->ID(), pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   934
				if(pairIter != pfHeaders.end() && pairIter->second != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   935
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   936
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   937
					// 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
   938
					if( baseHdr && 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   939
						(baseHdr->Status() == Header::HDR_STATUS_TO_BE_ANALYZED ))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   940
					{                       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   941
						// Find all additional includes that are needed in compilation of this header:   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   942
						const vector<string>& bIncs = iBasePlatformData->IncludesForHeader(baseHdr);                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   943
						forcedHeader.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   944
						forcedHeader = baseHdr->CachedForcedInclude();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   945
						// Find all include paths that are needed in compilation of this header:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   946
						const vector<string>& bPaths = iBasePlatformData->IncludePathsForHeader(baseHdr);                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   947
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   948
						// Add include paths for baseline platform headers:   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   949
						// START -- Support for multiple header directories                                     
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   950
						for( vector<string>::const_iterator i = bPaths.begin(); i != bPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   951
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   952
							list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs(iParams.getParameter(BASELINEDIR), *i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   953
							list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   954
							for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   955
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   956
								if( find(baseIncPaths.begin(), baseIncPaths.end(), fulliterbegin->first) == baseIncPaths.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   957
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   958
									baseIncPaths.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   959
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   960
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   961
						}                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   962
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   963
						// Add additional include directives to header list:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   964
						for( vector<string>::const_iterator i = bIncs.begin(); i != bIncs.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   965
						{                          
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   966
							// 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
   967
							bool exists = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   968
							// Test that header exists by merging the header name with include paths:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   969
							for( stringvector::iterator ip = baseIncPaths.begin(); ip != baseIncPaths.end(); ++ip )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   970
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   971
								list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs( *ip, *i );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   972
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   973
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   974
								{                           
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   975
									if( find(iBaseIncludes.begin(), iBaseIncludes.end(), fulliterbegin->first) == iBaseIncludes.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   976
									{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   977
										if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   978
										{                                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   979
											iBaseIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   980
											exists = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   981
											break; 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   982
										}                                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   983
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   984
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   985
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   986
							if( exists == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   987
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   988
								// 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
   989
								list<pair<string, bool> > fullIncPath = 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   990
									BBCFileUtils::MergeDirs(iParams.getParameter(BASELINEDIR), baseHdr->Path() + DIR_SEPARATOR + *i);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   991
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   992
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   993
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   994
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   995
									if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   996
									{                         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   997
										iBaseIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   998
									} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   999
								}                           
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1000
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1001
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1002
						// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1003
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1004
						// Add this header to the list of headers that are needed for compilation:                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1005
						if( find(iBaseIncludes.begin(), iBaseIncludes.end(), baseHdr->ID()) == iBaseIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1006
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1007
							iBaseIncludes.push_back(baseHdr->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1008
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1009
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1010
						// Add headers to the list of headers that are to be analyzed:										
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1011
						iBaseFilenames.push_back(baseHdr->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1012
						iCurrFilenames.push_back(pairIter->second->ID());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1013
						baseHdr->SetStatus(Header::HDR_STATUS_READY);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1014
       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1015
						forcedHeader = DIR_SEPARATOR + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1016
						forcedHeader = base + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1017
						if( BBCFileUtils::isValidFilename(forcedHeader) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1018
							if( find(iBaseIncludes.begin(), iBaseIncludes.end(), forcedHeader) == iBaseIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1019
								iBaseIncludes.insert(iBaseIncludes.begin(),forcedHeader);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1020
              
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1021
              
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1022
						// Then we need to find corresponding headers from the product (current) platform:                                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1023
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1024
						Header* currHeader = pairIter->second; //Current header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1025
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1026
						// Find additional includes and include paths for the current platform's header:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1027
						const vector<string>& cIncs = iProductPlatformData->IncludesForHeader(currHeader, baseHdr);                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1028
						forcedHeader.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1029
						forcedHeader =currHeader->CachedForcedInclude(); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1030
						const vector<string>& cPaths =iProductPlatformData->IncludePathsForHeader(currHeader);                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1031
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1032
						// Add include paths to the list, if it does not exist there yet:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1033
						for( vector<string>::const_iterator i = cPaths.begin(); i != cPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1034
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1035
							// SART -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1036
							list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs(iParams.getParameter(CURRENTDIR), *i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1037
							list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1038
							for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1039
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1040
								if( find(currIncPaths.begin(), currIncPaths.end(), fulliterbegin->first) == currIncPaths.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1041
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1042
									currIncPaths.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1043
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1044
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1045
							// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1046
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1047
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1048
						// Add additional include directives to header list:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1049
						for( vector<string>::const_iterator i = cIncs.begin(); i != cIncs.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1050
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1051
							bool exists = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1052
							// 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
  1053
							for( stringvector::iterator ip = currIncPaths.begin(); ip != currIncPaths.end(); ++ip )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1054
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1055
								// START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1056
								list<pair<string, bool> > fullIncPath = BBCFileUtils::MergeDirs( *ip, *i );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1057
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1058
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1059
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1060
									if( find(iCurrIncludes.begin(), iCurrIncludes.end(), fulliterbegin->first) == iCurrIncludes.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1061
									{                                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1062
										if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1063
										{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1064
											iCurrIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1065
											exists = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1066
											break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1067
										}                                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1068
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1069
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1070
								// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1071
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1072
							if( exists == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1073
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1074
								// 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
  1075
								// START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1076
								list<pair<string, bool> > fullIncPath = 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1077
									BBCFileUtils::MergeDirs(iParams.getParameter(CURRENTDIR), currHeader->Path() + DIR_SEPARATOR + *i);                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1078
								list<pair<string, bool> >::iterator fulliterbegin = fullIncPath.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1079
								for(; fulliterbegin != fullIncPath.end(); fulliterbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1080
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1081
									if( BBCFileUtils::FileExists(fulliterbegin->first) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1082
									{                                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1083
										iCurrIncludes.push_back(fulliterbegin->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1084
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1085
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1086
								// END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1087
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1088
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1089
							// Add this header to the list:                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1090
						if( find(iCurrIncludes.begin(), iCurrIncludes.end(), currHeader->ID()) == iCurrIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1091
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1092
							iCurrIncludes.push_back(currHeader->ID());                            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1093
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1094
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1095
						forcedHeader = DIR_SEPARATOR + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1096
						forcedHeader = base + forcedHeader;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1097
						if( BBCFileUtils::isValidFilename(forcedHeader) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1098
							if( find(iCurrIncludes.begin(), iCurrIncludes.end(), forcedHeader) == iCurrIncludes.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1099
								iCurrIncludes.insert(iCurrIncludes.begin(),forcedHeader);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1100
									
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
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1104
			// Build include paths for parser objects:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1105
			string bIP;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1106
			for( stringvector::iterator i = baseIncPaths.begin(); i != baseIncPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1107
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1108
				if( i != baseIncPaths.begin() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1109
					bIP += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1110
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1111
				bIP += *i;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1112
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1113
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1114
			string cIP;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1115
			for( stringvector::iterator i = currIncPaths.begin(); i != currIncPaths.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1116
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1117
				if( i != currIncPaths.begin() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1118
					cIP += ";";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1119
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1120
				cIP += *i;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1121
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1122
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1123
			// Construct parsers:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1124
			auto_ptr<CPPParser> parser(new CPPParser(bIP));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1125
			auto_ptr<CPPParser> parser2(new CPPParser(cIP));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1126
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1127
			// Set temp directories for parsers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1128
			parser->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1129
			parser2->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1130
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1131
			// Set forced headers 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1132
			parser->setForcedHeaders(iForcedBaselineHeaders);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1133
			parser2->setForcedHeaders(iForcedCurrentHeaders);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1134
			
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1135
			if (createThread)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1136
			{		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1137
				//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
  1138
				//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
  1139
				if(gHeaderThreads.size() >= MAX_THREAD_COUNT)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1140
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1141
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1142
					gHeaderThreads.join_all();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1143
					int size = gHeaderThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1144
					for(int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1145
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1146
						gHeaderThreads.remove_thread(gpComponentThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1147
						gpComponentThreads[i]->~thread();	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1148
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1149
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1150
						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1151
				//create a copy of the Analyser object for the new thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1152
				Analyser* obj = new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1153
				*obj = *this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1154
				int size = gHeaderThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1155
				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
  1156
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1157
			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
  1158
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1159
				Wrapper(report, issues, *(parser.get()), *(parser2.get()), pfHeaders, unsuccessfulHdrs);	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1160
			}		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1161
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1162
	}
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
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1167
// Analyser::InitializePlatforms
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1168
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1169
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1170
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1171
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1172
void Analyser::InitializePlatforms(PlatformHeaders& pfHeaders, vector<pair<string, string> >& headers, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1173
								   vector<pair<string, string> >& excludeheaders, vector<pair<string, string> >& resourcevector)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1174
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1175
	if( iBasePlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1176
		delete iBasePlatformData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1177
	if( iProductPlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1178
		delete iProductPlatformData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1179
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1180
	iBasePlatformData = new PlatformData(iParams.getParameter(BASELINEVERSION),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1181
		iParams.getParameter(BASELINEDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1182
	iProductPlatformData = new PlatformData(iParams.getParameter(CURRENTVERSION),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1183
		iParams.getParameter(CURRENTDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1184
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1185
	if( iUseBaselinePlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1186
		iBasePlatformData->Initialize(iParams.getParameter(BASEPLATFORMDATA));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1187
	if( iUseCurrentPlatformData )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1188
		iProductPlatformData->Initialize(iParams.getParameter(CURRENTPLATFORMDATA));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1189
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1190
	vector<pair<string, string> > updatedHdrs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1191
	updatedHdrs.reserve(headers.size());    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1192
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1193
	// Mark the platform header objects with status 'HDR_STATUS_TO_BE_ANALYZED':
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1194
	vector<pair<string, string> >::const_iterator hdr = headers.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1195
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1196
	for( ;hdr != headers.end(); ++hdr )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1197
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1198
		pair<string,stringpair> headerInfo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1199
		bool is_Resource = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1200
		int loc = -1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1201
		pair<string,string> resource;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1202
		Header* baseHdrObj = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1203
		Header* currHdrObj = 0;        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1204
		string hdrTest(hdr->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1205
		toLower(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1206
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1207
		// 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
  1208
		if( (loc = int(hdrTest.find_last_of("."))) != string::npos &&
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1209
			hdrTest.substr(loc,string::npos) == RH_EXTENSION )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1210
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1211
			is_Resource = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1212
			resource.first = hdrTest;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1213
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1214
		CFileMap::const_iterator bI = iBasePlatformData->HeadersById().find(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1215
		if( bI != iBasePlatformData->HeadersById().end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1216
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1217
			baseHdrObj = dynamic_cast<Header*>((*bI).second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1218
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1219
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1220
		hdrTest = hdr->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1221
		toLower(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1222
		if(is_Resource == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1223
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1224
			resource.second = hdrTest;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1225
			resourcevector.push_back(resource);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1226
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1227
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1228
		CFileMap::const_iterator cI = iProductPlatformData->HeadersById().find(hdrTest);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1229
		if( cI != iProductPlatformData->HeadersById().end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1230
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1231
			currHdrObj = dynamic_cast<Header*>((*cI).second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1232
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1233
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1234
		if(baseHdrObj && baseHdrObj->Status()== Header::HDR_STATUS_IGNORE )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1235
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1236
			excludeheaders.push_back(*hdr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1237
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1238
		else if( baseHdrObj && currHdrObj )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1239
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1240
			if( is_Resource == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1241
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1242
				pfHeaders.push_back(HeaderPair(baseHdrObj, currHdrObj));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1243
				baseHdrObj->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1244
				currHdrObj->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1245
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1246
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1247
			// get API info from current header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1248
			if(currHdrObj->APIinfo().first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1249
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1250
				headerInfo.first = currHdrObj->ID();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1251
				headerInfo.second.first = currHdrObj->APIinfo().first; // API NAME
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1252
				headerInfo.second.second = currHdrObj->APIinfo().second; // API REL. CATEGORY
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1253
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1254
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1255
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1256
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1257
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1258
			// get API info from base header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1259
			if(baseHdrObj && baseHdrObj->APIinfo().first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1260
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1261
				headerInfo.first = baseHdrObj->ID();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1262
				headerInfo.second.first = baseHdrObj->APIinfo().first; // API NAME
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1263
				headerInfo.second.second = baseHdrObj->APIinfo().second; // API REL. CATEGORY
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1264
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1265
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1266
			// get API info from current header
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1267
			else if(currHdrObj && currHdrObj->APIinfo().first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1268
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1269
				headerInfo.first = currHdrObj->ID();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1270
				headerInfo.second.first = currHdrObj->APIinfo().first; // API NAME
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1271
				headerInfo.second.second = currHdrObj->APIinfo().second; // API REL. CATEGORY
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1272
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1273
			// No info found from platform data, so use common include paths and 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1274
			// other common compile-time parameters for this header:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1275
			if( is_Resource == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1276
			updatedHdrs.push_back(*hdr);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1277
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1278
		// 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
  1279
		if(headerInfo.first.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1280
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1281
			HeaderInfoList.push_back(headerInfo);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1282
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1283
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1284
	headers = updatedHdrs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1285
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1286
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1287
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1288
// Analyser::analyse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1289
// Do the actual analyse of headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1290
// Create analysis report
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1291
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1292
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1293
int Analyser::analyse()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1294
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1295
	// Local variable instantiation
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1296
	int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1297
	iHeaderSetInUse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1298
	iUseThread = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1299
	string epocroot;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1300
	int bundlesize = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1301
	unsigned int amount, amount2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1302
	iOnlySystemIncludeRequired = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1303
	unsigned int excludedHeaderSize;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1304
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1305
	if (processParameters() == 2) return 2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1306
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1307
	// Get the bundle size (as string) and convert it to an integer
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1308
	bundlesize = handleBundlesizeParam();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1309
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1310
	// Get replace parameter for file renaming
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1311
	string replace = getReplaceParam();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1312
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1313
	// Update the amount of found files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1314
	amount = (unsigned int)iFiles.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1315
	// Update the amount of found files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1316
	amount2 = (unsigned int)iFiles2.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1317
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1318
	// Vector that holds the merge results and if it can't find baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1319
	// file from current file it will put empty string as current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1320
	vector<pair<string,string> > mergeVector;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1321
	mergeVector.reserve(amount);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1322
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1323
	// List holds files which were found in current but not in baseline.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1324
	// Full path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1325
	list<string> addedFiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1326
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1327
	// List holds files which were in baseline file list but
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1328
	// weren't in current file list, ie they were removed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1329
	// Contains full path with filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1330
	list<string> removedFiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1331
	try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1332
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1333
		// Merges baseline and current files into one vector
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1334
		MergeFiles(iFiles, iFiles2, replace, mergeVector);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1335
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1336
		// Finds removed files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1337
		fileDiffs(mergeVector, removedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1338
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1339
	catch (HAException e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1340
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1341
		cout << "Error in processing file lists:\n" << e.errorMessage() << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1342
		exit(4);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1343
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1344
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1345
	// Mergemap now contains pairs of following type:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1346
	// baseline complex filename (w/ absolute path) -> current version complex filename (w/ absolute path)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1347
	_total_files = (unsigned int)mergeVector.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1348
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1349
	cout << "\nTotal baseline files: " << amount << "\nTotal current files: " << amount2 << "\nFile pairs found: "
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1350
		<< _total_files << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1351
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1352
	cout << "\nComparing " << _total_files << " matching files between\n " << iParams.getParameter(BASELINEDIR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1353
		<< " (Version " << iParams.getParameter(BASELINEVERSION) << ")\nand\n " << iParams.getParameter(CURRENTDIR)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1354
		<< " (Version " << iParams.getParameter(CURRENTVERSION) << ")\n\n\n\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1355
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1356
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1357
	ReportGenerator report(iParams.getParameter(REPORTFILE));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1358
	report.setCmdLineParms(iParams.getGivenParameters());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1359
	report.setVersions(iParams.getParameter(BASELINEVERSION),iParams.getParameter(CURRENTVERSION));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1360
	report.setXSL("BBCResults.xsl",false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1361
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1362
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1363
	report.startReport();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1364
	// start the timer
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1365
	time_t starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1366
	time_t endtime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1367
	starttime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1368
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1369
	PlatformHeaders pfHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1370
	pfHeaders.reserve(mergeVector.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1371
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1372
	// Vector that holds the the headers those should be excluded from analysis.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1373
	// These header files are mentioned in platform headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1374
	vector<pair<string,string> > excludeHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1375
	excludeHeaders.reserve(mergeVector.size());
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
	// Headers that are found from platform data are inserted in pfHeaders.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1379
	// Others are left to mergeVector.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1380
	vector<pair<string, string> > resourceVector;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1381
	resourceVector.reserve(mergeVector.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1382
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1383
	if(mergeVector.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1384
		InitializePlatforms(pfHeaders, mergeVector,excludeHeaders,resourceVector);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1385
	excludedHeaderSize = int(excludeHeaders.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
	endtime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1388
	time_t pfInitTime = endtime - starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1389
	time_t originalStartTime = starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1390
	starttime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1391
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1392
	//Now analyse Resource Header RH files using text parser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1393
	if(resourceVector.size()>0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1394
		ParseAndCompareResourceFiles(resourceVector, report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1395
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1396
	// Process each removed filename from removedMap
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1397
	list<string>::iterator removedbegin = removedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1398
	list<string>::iterator removedend = removedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1399
	for(; removedbegin != removedend; removedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1400
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1401
		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
  1402
		report.addIssue(filename, "", EIssueIdentityFile, EIssueTypeRemoval, ESeverityBBCBreak, ESeveritySCBreak, "", 0,"", "","");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1403
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1404
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1405
	int issues = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1406
	PlatformHeaders unsuccessfulHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1407
	vector<pair<string, string> > unsuccessfulHeaderNames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1408
	vector<pair<string, string> > platformUnsuccessfulHeaderNames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1409
	int compErrors = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1410
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1411
	//validate if the headers have include guards,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1412
	//move ones without guards for individual compilation
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1413
	validateHeaders(mergeVector, unsuccessfulHeaderNames);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1414
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1415
	boost::thread_group mainThreads;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1416
	int mergeVectorCompErrs = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1417
	int unsuccessfulCompErrs = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1418
	int platformUnsuccessfulCompErrs = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1419
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1420
	// Analyse headers that were not found from platform data:	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1421
	if( mergeVector.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1422
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1423
		//create copy of Analyser object for the new thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1424
			Analyser* obj1=new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1425
			*obj1=*this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1426
			//analyse mergeVector in different thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1427
			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
  1428
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1429
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1430
	// Compile unsuccessful headers one by one, because it is unlikely that they
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1431
	// will be compiled successfully here either:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1432
	if( unsuccessfulHeaderNames.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1433
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1434
		//create copy of Analyser object for the new thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1435
			Analyser* obj2 = new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1436
			*obj2=*this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1437
			//analyse unsuccessfulHeaderNames in different thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1438
			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
  1439
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1440
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1441
	if(pfHeaders.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1442
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1443
		AnalyzePlatforms(pfHeaders, unsuccessfulHeaders, report, issues, iUseThread);    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1444
		if (iUseThread)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1445
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1446
			gHeaderThreads.join_all(); // wait for all threads in gHeaderThreads to complete
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1447
			gComponentThreads.join_all(); // wait for all threads in gComponentThreads to complete
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1448
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1449
			//destroy the thredas in gHeaderThreads
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1450
			int size = gHeaderThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1451
			for (int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1452
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1453
				gHeaderThreads.remove_thread(gpComponentThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1454
				gpComponentThreads[i]->~thread();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1455
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1456
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1457
			//destroy the thredas in gComponentThreads
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1458
			size=gComponentThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1459
			for (int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1460
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1461
				gComponentThreads.remove_thread(gpHeaderThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1462
				gpHeaderThreads[i]->~thread();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1463
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1464
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1465
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1466
		for( PlatformHeaders::iterator i = unsuccessfulHeaders.begin(); i != unsuccessfulHeaders.end(); ++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
			// Build list of headers that could not be compiled with platform data:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1469
			platformUnsuccessfulHeaderNames.push_back(pair<string, string>(i->first->ID(), i->second->ID()));
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
		if(platformUnsuccessfulHeaderNames.size() >0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1473
			AnalyseHeaders(platformUnsuccessfulHeaderNames, 1, report, issues, platformUnsuccessfulCompErrs); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1474
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1475
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1476
	mainThreads.join_all(); // wait for all threads in mainThreads to complete
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1477
	compErrors += mergeVectorCompErrs + unsuccessfulCompErrs + platformUnsuccessfulCompErrs;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1478
	report.finishReport();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1479
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1480
	// 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
  1481
	if ( _current_files + (int)excludedHeaderSize < _total_files )
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1482
		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
  1483
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1484
	// Wrap up the run and print statistics
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1485
	unsigned int count = _total_files * 2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1486
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1487
	endtime = time(NULL);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1488
	time_t runningtime = endtime - starttime;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1489
	double timedelta = 0.0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1490
	if (count > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1491
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1492
		timedelta = (double)runningtime/(double)count;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1493
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1494
	cout << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1495
	cout << "---------------------------------------------" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1496
	cout << "Finished!" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1497
	cout << "Files processed: " << count << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1498
	cout << "Total time: " << endtime - originalStartTime << " seconds." << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1499
	cout << "Platform data initialization time: " << pfInitTime << " seconds.\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1500
	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
  1501
	cout << "Compilation errors: " << compErrors << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1502
	if(excludedHeaderSize > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1503
	cout << "No of excluded headers: " << excludedHeaderSize << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1504
	cout << "---------------------------------------------" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1505
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1506
	if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1507
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1508
		cout << iNotRemovedFiles.size() << "\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1509
		list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1510
		list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1511
		list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1512
		for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1513
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1514
			CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1515
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1516
		if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1517
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1518
			iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1519
		} else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1520
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1521
			iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1522
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1523
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1524
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1525
	if (ret == 0 && issues != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1526
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1527
		ret = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1528
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1529
	return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1530
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1531
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1532
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
  1533
{    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1534
	unsigned int processedcount = 1;    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1535
	stringvector basefilenames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1536
	stringvector curfilenames;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1537
	vector<pair<string, string> > unsuccessfulHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1538
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1539
	vector<pair<string, string> >::const_iterator fnmapiter = headerList.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1540
	while (fnmapiter != headerList.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1541
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1542
		// Push the pair's members to their respective vectors
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1543
		// for bundle handling
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1544
		basefilenames.push_back(fnmapiter->first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1545
		curfilenames.push_back(fnmapiter->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1546
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1547
		// 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
  1548
		// we parse the current file lists to xml files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1549
		if ((processedcount > 0 && (processedcount % bundlesize == 0)) || 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1550
			processedcount == headerList.size())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1551
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1552
			if (!AnalyseBundle(basefilenames,curfilenames,report, issues))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1553
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1554
				//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
  1555
				// one by one
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1556
				stringvector::iterator basebegin = basefilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1557
				stringvector::iterator baseend = basefilenames.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1558
				stringvector::iterator currentbegin = curfilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1559
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1560
				if( basefilenames.size() == 1 ||
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1561
					bundlesize == 1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1562
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1563
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1564
					if( basebegin != baseend )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1565
					{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1566
						//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
  1567
						string compilationError = iCompErrTxt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1568
						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
  1569
							(*currentbegin),compilationError);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1570
						issues++;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1571
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1572
						compErrors++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1573
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1574
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1575
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1576
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1577
					while(basebegin != baseend )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1578
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1579
						stringvector basefilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1580
						stringvector curfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1581
						basefilename.push_back(*basebegin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1582
						curfilename.push_back(*currentbegin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1583
						if (!AnalyseBundle(basefilename,curfilename,report, issues))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1584
						{
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1585
							//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
  1586
							string compilationError = iCompErrTxt;
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1587
							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
  1588
								(*currentbegin),compilationError);
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1589
							issues++;								
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1590
							compErrors++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1591
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1592
						basebegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1593
						currentbegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1594
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1595
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1596
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1597
			basefilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1598
			curfilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1599
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1600
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1601
		fnmapiter++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1602
		processedcount++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1603
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1604
	
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  1605
    if (iNotRemovedFiles.size() != 0)
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1606
	{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1607
		list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1608
		list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1609
		list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1610
		for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1611
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1612
			CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1613
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1614
		if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1615
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1616
			iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1617
		} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1618
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1619
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1620
			iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1621
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1622
	} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1623
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1624
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1625
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1626
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1627
// Analyser::AnalyseBundle
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1628
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1629
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1630
//bool Analyser::AnalyseBundle(const stringvector& basefilenames, const stringvector& curfilenames, ReportGenerator& report, int& issues)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1631
bool Analyser::AnalyseBundle(const stringvector& basefilenames, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1632
                             const stringvector& curfilenames, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1633
                             ReportGenerator& report, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1634
                             int& issues,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1635
                             CPPParser* baseParser,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1636
                             CPPParser* currParser,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1637
                             stringvector* basecompileset,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1638
                             stringvector* currcompileset)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1639
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1640
	auto_ptr<CPPParser> baseAutoPtr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1641
	auto_ptr<CPPParser> currAutoPtr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1642
	CPPParser* parser  = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1643
	CPPParser* parser2 = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1644
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1645
	if( baseParser )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1646
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1647
		// This function does not own the pointer, so no auto_ptr used here.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1648
		parser = baseParser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1649
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1650
	else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1651
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1652
		parser = new CPPParser(iParams.getParameter(BASELINEPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1653
		// Set temp directory for parser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1654
		parser->setTemp(iParams.getParameter(TEMPDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1655
		// Set forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1656
		parser->setForcedHeaders(iForcedBaselineHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1657
		// Wrap allocated memory to an auto_ptr to get it deallocated properly.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1658
		baseAutoPtr.reset(parser);                                  
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( currParser )
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
		parser2 = currParser;        
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
		parser2 = new CPPParser(iParams.getParameter(CURRENTPLAT));
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
		parser2->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
		parser2->setForcedHeaders(iForcedCurrentHeaders);
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
		currAutoPtr.reset(parser2);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1674
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1675
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1676
	try 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1677
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1678
		// Parse the filename vectors into XML and eventually into a DOM format
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1679
		DOMNode* root = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1680
		DOMNode* root2 = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1681
		if(basecompileset && basecompileset->size() != 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1682
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1683
			root = parser->parse(*basecompileset, "base", iParams.getParameter(BASELINEDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1684
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1685
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1686
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1687
			root = parser->parse(basefilenames, "base", iParams.getParameter(BASELINEDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1688
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1689
		if(currcompileset && currcompileset->size() != 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1690
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1691
			root2 = parser2->parse(*currcompileset, "current", iParams.getParameter(CURRENTDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1692
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1693
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1694
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1695
			root2 = parser2->parse(curfilenames, "current", iParams.getParameter(CURRENTDIR), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1696
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1697
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1698
		MacroAnalyser macros(parser->getMacroFilename(), parser2->getMacroFilename(), basefilenames, curfilenames);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1699
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1700
		macros.Analyse(iMacroFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1701
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1702
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1703
		parser->RemoveFile(parser->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1704
		parser2->RemoveFile(parser2->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1705
		parser->RemoveFile(parser->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1706
		parser2->RemoveFile(parser2->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1707
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1708
		// Merged macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1709
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1710
		list<pair<string,string> > mergedfiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1711
		stringvector::const_iterator basebegin = basefilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1712
		stringvector::const_iterator baseend = basefilenames.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1713
		stringvector::const_iterator currentbegin = curfilenames.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1714
		while(basebegin != baseend)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1715
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1716
			mergedfiles.push_back(pair<string,string>(*basebegin,*currentbegin));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1717
			basebegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1718
			currentbegin++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1719
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1720
		if(mergedfiles.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1721
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1722
			issues += analyseTrees(root, root2,mergedfiles,report);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1723
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1724
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1725
		// Duplicated macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1726
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1727
		// Base duplicates
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1728
		map<string, vector<pair<string,string> > >& duplicatedMacros = macros.getBaseDuplicates();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1729
		map<string, vector<pair<string,string> > >::iterator duplicatedbegin = duplicatedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1730
		map<string, vector<pair<string,string> > >::iterator duplicatedend = duplicatedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1731
		for(; duplicatedbegin != duplicatedend; duplicatedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1732
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1733
			string filename = duplicatedbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1734
			// Process each duplicated macro from duplicatedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1735
			vector<pair<string,string> >::iterator duplicatedbegin2 = duplicatedbegin->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1736
			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1737
			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1738
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1739
				string macroname = duplicatedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1740
				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
  1741
				report.addIssue(filename, macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo, "","", "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1742
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1743
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1744
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1745
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1746
		// Current
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1747
		map<string, vector<pair<string,string> > >& currDuplicatedMacros = macros.getCurrentDuplicates();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1748
		duplicatedbegin = currDuplicatedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1749
		duplicatedend = currDuplicatedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1750
		for(; duplicatedbegin != duplicatedend; duplicatedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1751
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1752
			string filename = duplicatedbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1753
			// Process each duplicated macro from duplicatedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1754
			vector<pair<string,string> >::iterator duplicatedbegin2 = duplicatedbegin->second.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1755
			vector<pair<string,string> >::iterator duplicatedend2 = duplicatedbegin->second.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1756
			for(; duplicatedbegin2 != duplicatedend2; duplicatedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1757
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1758
				string macroname = duplicatedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1759
				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
  1760
				report.addIssue("", macroname, EIssueIdentityMacro, EIssueTypeNotAnalysed, ESeverityInformative, ESeveritySCInformative, "", lineNo,"", filename, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1761
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1762
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1763
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1764
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1765
		// Removed macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1766
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1767
		map<string, TChange<list<pair<string,string> > > >& removedMacros = macros.getRemoved();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1768
		map<string, TChange<list<pair<string,string> > > >::iterator removedbegin = removedMacros.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1769
		map<string, TChange<list<pair<string,string> > > >::iterator removedend = removedMacros.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1770
		for(; removedbegin != removedend; removedbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1771
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1772
			string basefilename = removedbegin->second.GetBase();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1773
			string currentfilename = removedbegin->second.GetCurrent();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1774
			// Process each removed macro from removedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1775
			list<pair<string,string> >::iterator removedbegin2 = removedbegin->second.GetValue().begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1776
			list<pair<string,string> >::iterator removedend2 = removedbegin->second.GetValue().end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1777
			for(; removedbegin2 != removedend2; removedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1778
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1779
				string macroname = removedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1780
				//int lineNo = atoi(removedbegin2->second.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1781
				// 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
  1782
				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeRemoval, ESeverityPossibleBBCBreak, ESeveritySCBreak, "", 0,"", currentfilename, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1783
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1784
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1785
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1786
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1787
		// Changed macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1788
		//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1789
		map<string, TChange<map<string, pair<pair<string,string>,string> > > >& changedMacros = macros.getChanged();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1790
		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
  1791
		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
  1792
		for(; changedbegin != changedend; changedbegin++)
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 basefilename = changedbegin->second.GetBase();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1795
			string currentfilename = changedbegin->second.GetCurrent();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1796
			// Process each changed macro from changedMacros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1797
			map<string, pair<pair<string,string>,string> >::iterator changedbegin2 = changedbegin->second.GetValue().begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1798
			map<string, pair<pair<string,string>,string> >::iterator changedend2 = changedbegin->second.GetValue().end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1799
			for(; changedbegin2 != changedend2; changedbegin2++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1800
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1801
				string macroname = changedbegin2->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1802
				string newcode = changedbegin2->second.first.second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1803
				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
  1804
				report.addIssue(basefilename, macroname, EIssueIdentityMacro, EIssueTypeChange, ESeverityPossibleBBCBreak, ESeveritySCNULL, newcode, lineNo, "",currentfilename, "");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1805
				issues++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1806
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1807
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1808
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1809
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1810
		//clear the last set of files with macros
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1811
		iMacroFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1812
	} catch (HAException e)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1813
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1814
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1815
		parser->RemoveFile(parser->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1816
		parser2->RemoveFile(parser2->getMacroFilename(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1817
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1818
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1819
		//header has failed compilation with gccxml. get the compilation error text.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1820
		if (parser2->getCompErrFile()!="")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1821
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1822
			iCompErrTxt = BBCFileUtils::getCompilationError(parser2->getCompErrFile());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1823
			if (iCompErrTxt == "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1824
				iCompErrTxt = BBCFileUtils::getCompilationError(parser->getCompErrFile());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1825
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1826
		else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1827
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1828
			if(parser->getCompErrFile()!="")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1829
				iCompErrTxt = BBCFileUtils::getCompilationError(parser->getCompErrFile());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1830
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1831
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1832
		parser->RemoveFile(parser->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1833
		parser2->RemoveFile(parser2->getCompErrFile(), iNotRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1834
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1835
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1836
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1837
		//delete parser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1838
		//delete parser2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1839
		return false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1840
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1841
	//delete parser;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1842
	//delete parser2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1843
	return true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1844
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1845
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1846
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1847
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1848
// Analyser::processFileReplaces
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1849
// Process the file replaces
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
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
  1853
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1854
    string searched(aFile.second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1855
    pair<string, string>  replacement(aFile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1856
    // If there are items on replace map, then apply the
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1857
    // replaces when necessary
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1858
    if (aReplaceMap.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1859
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1860
        StringMapIterC fileMapIter = aReplaceMap.find(searched);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1861
        if (fileMapIter != aReplaceMap.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1862
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1863
            string file = fileMapIter->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1864
            list<pair<string, string> >::const_iterator filereplace = FindFromList(toLowerCaseWin(file), aCurrentFiles, ERightValue, compareFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1865
            if (filereplace != aCurrentFiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1866
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1867
                replacement = *filereplace;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1868
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1869
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1870
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1871
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1872
    return replacement;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1873
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1874
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1875
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1876
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1877
// Analyser::createReplaceMap
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1878
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1879
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1880
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1881
void Analyser::createReplaceMap(const string& aReplaceList, stringmap& aReplaceMap)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1882
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1883
    string originalfilename("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1884
    string replacementfilename("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1885
    string* name = &originalfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1886
    bool original = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1887
    bool isstr = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1888
    for (size_t i = 0; i < aReplaceList.length(); i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1889
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1890
        char ch = aReplaceList.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1891
        if (ch == ' ' && isstr == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1892
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1893
            if (original == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1894
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1895
                original = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1896
                name = &replacementfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1897
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1898
            else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1899
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1900
                // Pair separator found. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1901
                // Store the pair (original, replacement)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1902
                stringpair mappair(toLowerCaseWin(originalfilename), toLowerCaseWin(replacementfilename));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1903
                aReplaceMap.insert(mappair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1904
                replacementfilename.resize(0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1905
                originalfilename.resize(0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1906
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1907
                original = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1908
                name = &originalfilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1909
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1910
        } else if (ch == '"')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1911
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1912
            if (isstr == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1913
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1914
                isstr = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1915
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1916
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1917
                isstr = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1918
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1919
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1920
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1921
            *name += ch;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1922
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1923
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1924
    if (original == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1925
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1926
        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
  1927
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1928
    if (originalfilename.length() > 0 && replacementfilename.length() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1929
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1930
        // Store the last pair in replacement list
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1931
        stringpair mappair(toLowerCaseWin(originalfilename), toLowerCaseWin(replacementfilename));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1932
        aReplaceMap.insert(mappair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1933
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1934
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1935
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1936
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1937
// Analyser::fileDiffs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1938
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1939
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1940
void Analyser::fileDiffs(vector<pair<string, string> >& aFiles, list<string>& aMismatches)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1941
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1942
    vector<pair<string, string> > ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1943
    ret.reserve(aFiles.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1944
    vector<pair<string, string> >::iterator file = aFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1945
    vector<pair<string, string> >::iterator fileend = aFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1946
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1947
    for(;file != fileend; file++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1948
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1949
        // START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1950
        list<pair<string, string> > basedirs = BBCFileUtils::extractFilenames(iParams.getParameter(BASELINEDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1951
        list<pair<string, string> >::iterator basedirbegin = basedirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1952
        string basedir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1953
        string basefile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1954
        for(; basedirbegin != basedirs.end(); basedirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1955
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1956
            // Find the base dir from the list of base dirs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1957
            basedir = basedirbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1958
            basefile = basedir + DIR_SEPARATOR + file->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1959
            if (BBCFileUtils::FileExists(basefile))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1960
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1961
        }  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1962
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1963
        list<pair<string, string> > curdirs = BBCFileUtils::extractFilenames(iParams.getParameter(CURRENTDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1964
        list<pair<string, string> >::iterator curdirbegin = curdirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1965
        string curdir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1966
        string curfile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1967
        for(; curdirbegin != curdirs.end(); curdirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1968
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1969
            // Find the current dir from the list of current dirs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1970
            curdir = curdirbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1971
            curfile = curdir + DIR_SEPARATOR + file->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1972
            if (BBCFileUtils::FileExists(curfile))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1973
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1974
        } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1975
        // END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1976
         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1977
        if (file->second == "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1978
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1979
            // 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
  1980
            aMismatches.push_back(basefile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1981
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1982
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1983
            pair<string, string> tempvar(basefile, curfile);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1984
            ret.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1985
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1986
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1987
    aFiles = ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1988
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1989
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1990
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1991
// Analyser::getFilenameWithoutDir
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1992
// Return the file part of the filename, eg. retuns the rightmost part of
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1993
// the given string, up to a "\" // or "/" separator.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1994
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1995
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1996
string Analyser::getFilenameWithoutDir(const string& aFilename)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1997
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1998
    string ret = aFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  1999
    string::size_type idx = rightmostDirSeparatorIndex(aFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2000
    if (idx != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2001
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2002
        ret = aFilename.substr(idx+1, aFilename.length() - idx);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2003
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2004
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2005
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2006
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2007
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2008
// Analyser::testFileAvailability
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
#if 0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2012
void Analyser::testFileAvailability(stringmap map)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2013
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2014
    stringmap::iterator begin = map.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2015
    stringmap::iterator end = map.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2016
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2017
    for(; begin!= end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2018
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2019
        string file = (*begin).first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2020
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2021
        int isValid = ACCESS(file.c_str(), 0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2022
        if (isValid == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2023
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2024
            throw HAException("File: \"" + file + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2025
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2026
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2027
        file = (*begin).second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2028
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2029
        isValid = ACCESS(file.c_str(), 0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2030
        if (isValid == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2031
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2032
            throw HAException("File: \"" + file + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2033
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2034
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2035
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2036
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2037
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2038
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2039
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2040
// Analyser::MergeFiles
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2041
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2042
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2043
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
  2044
                          const string& aReplaceList, vector<pair<string, string> >& aMatches)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2045
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2046
    size_t asdf = aBasefiles.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2047
    list<pair<string, string> >::const_iterator baseiter = aBasefiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2048
    list<pair<string, string> >::const_iterator baseend = aBasefiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2049
    list<pair<string, string> > removedcurrentfiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2050
    list<pair<string, string> > mismatches;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2051
    if (!iParams.givenParameter(BASELINE))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2052
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2053
        stringmap replaceMap;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2054
        if (aReplaceList.length() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2055
        {            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2056
            createReplaceMap(aReplaceList, replaceMap);         
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2057
            stringmap::iterator begin = replaceMap.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2058
            stringmap::iterator end = replaceMap.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2059
        }                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2060
        for(; baseiter != baseend; baseiter++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2061
        {            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2062
            pair<string, string> file = *baseiter;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2063
            file = processFileReplaces(file, replaceMap, aCurrentfiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2064
            pair<string,string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2065
			//compareWholeString will be set to true, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2066
			//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
  2067
			//else by default will always be set to false.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2068
            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
  2069
            if (current != aCurrentfiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2070
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2071
                tempvar.first = baseiter->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2072
                tempvar.second = current->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2073
                aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2074
                removedcurrentfiles.push_back(*current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2075
                aCurrentfiles.erase(current);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2076
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2077
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2078
                current = FindFromList(file.second, removedcurrentfiles, ERightValue, compareFiles, false);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2079
                if (current != removedcurrentfiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2080
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2081
                    tempvar.first = baseiter->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2082
                    tempvar.second = current->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2083
                    aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2084
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2085
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2086
                    mismatches.push_back(file);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2087
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2088
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2089
        }        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2090
        baseiter = mismatches.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2091
        baseend = mismatches.end();        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2092
        for(; baseiter != baseend; baseiter++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2093
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2094
            string filename = BBCFileUtils::StripPath(baseiter->second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2095
            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
  2096
            file = processFileReplaces(file, replaceMap, aCurrentfiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2097
            string empty("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2098
            pair<string,string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2099
            tempvar.first = baseiter->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2100
            list<pair<string, string> >::iterator current = FindFromList(file.second, aCurrentfiles, ERightValue, compareFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2101
            if (current != aCurrentfiles.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2102
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2103
                tempvar.second = current->first.substr(1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2104
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2105
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2106
                tempvar.second = empty;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2107
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2108
            aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2109
        }        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2110
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2111
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2112
        // START -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2113
        list<pair<string, string> > basedirs = BBCFileUtils::extractFilenames(iParams.getParameter(BASELINEDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2114
        list<pair<string, string> >::iterator basedirbegin = basedirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2115
        bool  basefilefound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2116
        string basefile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2117
        for(; basedirbegin != basedirs.end(); basedirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2118
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2119
            string basedir = basedirbegin->first;       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2120
            basefile = basedir + DIR_SEPARATOR + aBasefiles.front().first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2121
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2122
            if (ACCESS(basefile.c_str(), 0) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2123
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2124
                basefilefound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2125
                break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2126
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2127
      }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2128
        list<pair<string, string> > curdirs = BBCFileUtils::extractFilenames(iParams.getParameter(CURRENTDIR));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2129
        list<pair<string, string> >::iterator curdirbegin = curdirs.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2130
        bool  curfilefound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2131
        string curfile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2132
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2133
        for(; curdirbegin != curdirs.end(); curdirbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2134
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2135
            string curdir = curdirbegin->first;       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2136
            curfile = curdir + DIR_SEPARATOR + aBasefiles.front().first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2137
            if (ACCESS(curfile.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
                curfilefound = 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
        if (!basefilefound )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2144
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2145
            throw HAException("File \"" + basefile + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2146
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2147
        if (!curfilefound)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2148
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2149
            throw HAException("File \"" + curfile + "\" not found");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2150
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2151
        pair<string,string> tempvar(aBasefiles.front().first, aCurrentfiles.front().first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2152
        aMatches.push_back(tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2153
        // END -- Support for multiple header directories
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2154
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2155
}
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
// AnalyserParams::diffs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2159
//  	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2160
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2161
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2162
void Analyser::diffs(   const list<pair<string, string> >& allfiles, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2163
                        const list<pair<string, string> >& sets, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2164
                        list<pair<string, string> >& result)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2165
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2166
    result = sets;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2167
    list<stringpair >::iterator setiter = result.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2168
    while(setiter != result.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2169
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2170
        if( setiter->first.find_first_of("*?") != string::npos )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2171
            setiter = result.erase(setiter);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2172
        else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2173
            ++setiter;
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
    list<pair<string, string> >::const_iterator file = allfiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2177
    list<pair<string, string> >::const_iterator fileend = allfiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2178
    for(; file != fileend; file++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2179
    {    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2180
        list<pair<string, string> >::iterator set = 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2181
            FindFromList(file->second, result, ERightValue);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2182
        if (set == result.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2183
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2184
            set = FindFromList(file->second, result, ERightValue, compareFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2185
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2186
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2187
        if (set != result.end())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2188
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2189
            result.erase(set);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2190
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2191
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2192
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2193
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2194
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2195
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2196
// AnalyserParams::canonicalizeFilename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2197
// Get the actual name of a file. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2198
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2199
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2200
list<pair<string, string> > Analyser::canonicalizeFilename(list<pair<string, string> >& sets)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2201
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2202
    list<pair<string, string> > ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2203
    list<pair<string, string> >::iterator begin = sets.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2204
    list<pair<string, string> >::iterator end = sets.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2205
    for(; begin != end; begin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2206
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2207
        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
  2208
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2209
            string left = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2210
            left += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2211
            left += begin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2212
            string right = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2213
            right += DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2214
            right += begin->second;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2215
            ret.push_back(pair<string, string>(left, right));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2216
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2217
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2218
            ret.push_back(*begin);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2219
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2220
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2221
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2222
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2223
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2224
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2225
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2226
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2227
// Analyser::Wrapper
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2228
// Wrapper function to analyse all files in a component in separate thread.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2229
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2230
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2231
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2232
void Analyser::Wrapper( ReportGenerator& report, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2233
                        int& issues, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2234
                        CPPParser baseParser, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2235
                        CPPParser currParser, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2236
                        PlatformHeaders& pfHeaders, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2237
                        PlatformHeaders& unsuccessfulHdrs
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
	stringvector tiBaseFilenames; // This contains also additional headers needed to compile baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2241
	stringvector tiCurrFilenames; // This contains also additional headers needed to compile product  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2242
	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
  2243
	stringvector tiBaseIncludes; // This contains also additional headers needed to compile baseline
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2244
	stringvector tiCurrIncludes; // This contains also additional headers needed to compile product  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2245
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2246
	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
  2247
	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
  2248
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2249
	tiBaseFilenames.assign(iBaseFilenames.begin(),iBaseFilenames.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2250
	tiCurrFilenames.assign(iCurrFilenames.begin(),iCurrFilenames.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2251
	tiInvalidFiles.assign(iInvalidFiles.begin(),iInvalidFiles.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2252
	tiBaseIncludes.assign(iBaseIncludes.begin(),iBaseIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2253
	tiCurrIncludes.assign(iCurrIncludes.begin(),iCurrIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2254
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2255
	if (iOnlySystemIncludeRequired == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2256
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2257
		//tiBaseIncludes and tiCurrIncludes are required for 3rd time analyzation.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2258
		//This time parse each unsuccessful header with both system includes and paths.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2259
		baseSysIncludes.assign(tiBaseIncludes.begin(),tiBaseIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2260
		curSysIncludes.assign(tiCurrIncludes.begin(),tiCurrIncludes.end());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2261
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2262
		// Clear these includes as for 2nd time parsing of each unsuccessful headres, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2263
		//as only system include paths arerequuired.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2264
		tiBaseIncludes.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2265
		tiCurrIncludes.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2266
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2267
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2268
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2269
	if( (tiBaseIncludes.size()>0 && tiCurrIncludes.size()>0)|| (tiBaseFilenames.size()>0 && tiCurrFilenames.size()>0) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2270
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2271
		if( AnalyseBundle(tiBaseFilenames, tiCurrFilenames, report, issues, &baseParser, &currParser, &tiBaseIncludes, &tiCurrIncludes))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2272
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2273
			tiBaseFilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2274
			tiCurrFilenames.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2275
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2276
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2277
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2278
	if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2279
	{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2280
		list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2281
		list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2282
		list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2283
		for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2284
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2285
			CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2286
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2287
		if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2288
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2289
			iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2290
		} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2291
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2292
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2293
			iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2294
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2295
	}  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2296
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2297
	if(tiInvalidFiles.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2298
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2299
		// also add to this list, the set of headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2300
		// without include guards
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2301
		PlatformHeaders::iterator add = tiInvalidFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2302
		for(; add != tiInvalidFiles.end(); ++add )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2303
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2304
			tiBaseFilenames.push_back( add->first->ID() );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2305
			tiCurrFilenames.push_back( add->second->ID() );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2306
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2307
	}		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2308
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2309
	// 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
  2310
	if( iUseThread && tiBaseFilenames.size() >= PLATFORM_BUNDLESIZE  )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2311
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2312
		stringvector tmp;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2313
		int pcount = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2314
		stringvector::iterator i = tiBaseFilenames.begin();                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2315
		for(; i != tiBaseFilenames.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2316
		{				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2317
			pcount++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2318
			PlatformHeaders::iterator h = FindHeaderPair(*i, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2319
			if( h != pfHeaders.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2320
			{			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2321
				tmp.push_back(*i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2322
			}			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2323
			if ((pcount % PLATFORM_BUNDLESIZE == 0 || pcount == tiBaseFilenames.size()) && tmp.size()>0)		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2324
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2325
				while (lock.locked())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2326
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2327
					#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2328
					Sleep(4000);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2329
					#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2330
					usleep(4000*1000);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2331
					#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2332
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2333
				lock.lock();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2334
				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2335
				if(gComponentThreads.size() >= MAX_THREAD_COUNT2)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2336
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2337
					gComponentThreads.join_all();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2338
					int size = gComponentThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2339
					for (int i=0;i<size;i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2340
					{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2341
						gComponentThreads.remove_thread(gpHeaderThreads[i]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2342
						gpHeaderThreads[i]->~thread();	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2343
					}				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2344
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2345
						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2346
				//2nd time analyzation of each header in a different thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2347
				Analyser* obj = new Analyser();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2348
				*obj = *this;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2349
				int size = gComponentThreads.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2350
				gpHeaderThreads[size]=gComponentThreads.create_thread(boost::bind(&Analyser::Wrapper2,obj,tmp, 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2351
						boost::ref(pfHeaders), boost::ref(unsuccessfulHdrs), boost::ref(report), boost::ref(issues)));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2352
				lock.unlock();	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2353
				tmp.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2354
							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2355
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2356
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2357
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2358
	else // do not create different thread. analyse in the same thread.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2359
	{						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2360
		stringvector::iterator i = tiBaseFilenames.begin();                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2361
		for(; i != tiBaseFilenames.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2362
		{                    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2363
			PlatformHeaders::iterator h = FindHeaderPair(*i, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2364
			if( h != pfHeaders.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2365
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2366
				if(( pfHeaders.size() > 1 ) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2367
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2368
					PlatformHeaders tempHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2369
					tempHeaders.push_back(*h);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2370
					h->first->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2371
					iOnlySystemIncludeRequired = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2372
					//2nd time analyzation of each header in same thread
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2373
					AnalyzePlatforms( tempHeaders, unsuccessfulHdrs, report, issues, false );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2374
					iOnlySystemIncludeRequired = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2375
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2376
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2377
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2378
					//The 3rd time parsing is required to check again each unsuccessful headers 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2379
					//with system includes and paths from platform data
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2380
					if(!AnalyseBundle(tiBaseFilenames, tiCurrFilenames, report, issues, &baseParser, &currParser, &baseSysIncludes, &curSysIncludes))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2381
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2382
						if( FindHeaderPair(h->first->ID(), unsuccessfulHdrs ) == unsuccessfulHdrs.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2383
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2384
							unsuccessfulHdrs.push_back(*h); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2385
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2386
					} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2387
					if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2388
					{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2389
						list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2390
						list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2391
						list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2392
						for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2393
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2394
							CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2395
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2396
						if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2397
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2398
							iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2399
						} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2400
						else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2401
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2402
							iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2403
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2404
					}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2405
				}                        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2406
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2407
		}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2408
	}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2409
}  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2410
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2411
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2412
// Analyser::Wrapper2
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2413
// 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
  2414
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2415
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2416
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2417
void Analyser::Wrapper2(stringvector filenames, PlatformHeaders& pfHeaders, PlatformHeaders& unsuccessfulHdrs, ReportGenerator& report, int& issues)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2418
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2419
	PlatformHeaders tempHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2420
	stringvector::iterator i = filenames.begin();                
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2421
	for(; i != filenames.end(); ++i )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2422
	{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2423
		PlatformHeaders::iterator h = FindHeaderPair(*i, pfHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2424
		if( h != pfHeaders.end() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2425
		{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2426
			tempHeaders.push_back(*h);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2427
			h->first->SetStatus(Header::HDR_STATUS_TO_BE_ANALYZED);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2428
			iOnlySystemIncludeRequired = true;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2429
			AnalyzePlatforms( tempHeaders, unsuccessfulHdrs, report, issues, false );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2430
			iOnlySystemIncludeRequired = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2431
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2432
	}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2433
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2434
	if (iNotRemovedFiles.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2435
					{            
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2436
						list<string> tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2437
						list<string>::iterator removefile = iNotRemovedFiles.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2438
						list<string>::iterator fileend = iNotRemovedFiles.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2439
						for(; removefile != fileend; removefile++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2440
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2441
							CPPParser::RemoveFile(*removefile, tempvar);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2442
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2443
						if (tempvar.size() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2444
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2445
							iNotRemovedFiles = tempvar;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2446
						} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2447
						else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2448
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2449
							iNotRemovedFiles.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2450
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2451
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2452
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2453
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2454
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2455
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2456
void Analyser::ParseAndCompareResourceFiles(vector<pair< string, string> >& resourcevector, ReportGenerator& report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2457
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2458
	ResourceContent baseResource;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2459
	ResourceContent curResource;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2460
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2461
	list<pair<string, string> > iBaseSystemheaders = BBCFileUtils::extractFilenames(iParams.getParameter(BASELINEPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2462
	list<pair<string, string> > iCurSystemheaders = BBCFileUtils::extractFilenames(iParams.getParameter(CURRENTPLAT));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2463
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2464
	for(int outer = 0; outer< (int)resourcevector.size(); outer++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2465
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2466
		list<pair<string, string> > baseSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2467
		list<pair<string, string> > curSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2468
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2469
		baseSystemheaders = iBaseSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2470
		curSystemheaders = iCurSystemheaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2471
		pair <string, string> files = resourcevector.at(outer);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2472
		vector <string> bIncludes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2473
		vector <string> cIncludes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2474
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2475
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2476
		baseResource.RHFileName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2477
		curResource.RHFileName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2478
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2479
		baseResource.RHFileName = BBCFileUtils::TrimAll(files.first);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2480
		curResource.RHFileName = BBCFileUtils::TrimAll(files.second);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2481
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2482
		pair <string, string> fileAnalyzed;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2483
		fileAnalyzed.first = baseResource.RHFileName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2484
		fileAnalyzed.second = curResource.RHFileName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2485
		bool pairFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2486
		// check if the file is already analyzed or not.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2487
		for(int i = 0; i < (int)iRHFile_Analyzed.size(); i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2488
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2489
			pair<string,string> filePair = iRHFile_Analyzed.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2490
			if(fileAnalyzed.first == filePair.first )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2491
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2492
				pairFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2493
				break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2494
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2495
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2496
		// File is not analyzed yet, so analyze it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2497
		if(pairFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2498
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2499
			iRHFile_Analyzed.push_back(fileAnalyzed);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2500
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2501
			ifstream file(files.first.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2502
			if(!file.is_open())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2503
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2504
				cerr << "ERROR: Cannot open " << files.first << " for reading!" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2505
				exit(17);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2506
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2507
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2508
			// baseline resource file parsing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2509
			getElementListFromRHFile(file,baseResource,bIncludes );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2510
			file.close();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2511
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2512
			// handle #include .RH headers, get proper path from system includes
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2513
			int basePos = (int)baseResource.RHFileName.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2514
			string basePath = baseResource.RHFileName.substr(0,basePos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2515
			vector<pair<string,string> > includes;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2516
			bool isPresent = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2517
			pair<string,string> bPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2518
			list<pair<string,string> >::iterator bHdr = baseSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2519
			for(;bHdr!= baseSystemheaders.end(); bHdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2520
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2521
				bPath = *bHdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2522
				if(bPath.first == basePath)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2523
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2524
					isPresent = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2525
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2526
				}			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2527
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2528
			if(isPresent == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2529
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2530
				pair<string,string> bPair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2531
				bPair.first =basePath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2532
				bPair.second =basePath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2533
				baseSystemheaders.push_back(bPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2534
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2535
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2536
			bHdr= baseSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2537
			for(int i = 0; i < (int)bIncludes.size(); i++) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2538
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2539
				for(;bHdr != baseSystemheaders.end(); bHdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2540
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2541
					pair<string,string> baseHeader = *bHdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2542
					pair<string,string>basePair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2543
					if(BBCFileUtils::FileExists(baseHeader.first + DIR_SEPARATOR + bIncludes.at(i)) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2544
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2545
						basePair.first = baseHeader.first + DIR_SEPARATOR + bIncludes.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2546
						includes.push_back(basePair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2547
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2548
					}
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
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2552
			ifstream file2(files.second.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2553
			if(!file2.is_open())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2554
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2555
				cerr << "ERROR: Cannot open " << files.second << " for reading!" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2556
				exit(17);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2557
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2558
			// current resource file parsing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2559
			getElementListFromRHFile(file2,curResource, cIncludes );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2560
			file2.close();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2561
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2562
			_current_files++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2563
			cout << "\nAnalysing files (" << _current_files << "/" << _total_files << "): " << files.first <<" => "<< files.second << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2564
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2565
			// get current resource file's path and add to system include paths 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2566
			// to get proper path for #include rh headers in current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2567
			int cPos = (int)curResource.RHFileName.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2568
			string curPath = curResource.RHFileName.substr(0,cPos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2569
			isPresent = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2570
			list<pair<string,string> >::iterator chdr= curSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2571
			pair<string,string> cPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2572
			for(;chdr != curSystemheaders.end(); chdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2573
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2574
				cPath = *chdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2575
				if(cPath.first == curPath)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2576
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2577
					isPresent = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2578
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2579
				}			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2580
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2581
			if(isPresent == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2582
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2583
				pair<string,string> cPair;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2584
				cPair.first = curPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2585
				cPair.second = curPath;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2586
				curSystemheaders.push_back(cPair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2587
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2588
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2589
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2590
			for(int out = 0; out < (int)includes.size(); out++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2591
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2592
				int bLoc = (int)includes.at(out).first.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2593
				string bString = includes.at(out).first.substr(bLoc+1,string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2594
				bool includedHeaderPresent = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2595
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2596
				for(int j = 0; j < (int)cIncludes.size(); j++) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2597
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2598
					bool fileMatched = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2599
					chdr= curSystemheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2600
					for(;chdr != curSystemheaders.end(); chdr++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2601
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2602
						pair<string,string> curHeader = *chdr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2603
						string curFile = curHeader.first + DIR_SEPARATOR + cIncludes.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2604
						int loc = (int)curFile.find_last_of(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2605
						string curTemp = curFile.substr(loc+1 ,string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2606
						if(bString == curTemp)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2607
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2608
							includedHeaderPresent = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2609
							if(BBCFileUtils::FileExists(curFile) ) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2610
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2611
								fileMatched = true; // current file found in curr dir
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2612
								includes.at(out).second = curFile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2613
								break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2614
							}							
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2615
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2616
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2617
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2618
					if ( fileMatched = false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2619
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2620
						// file does not exists in curdir
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2621
						report.addIssue(baseResource.RHFileName, includes.at(out).first, EIssueIdentityFile, 
3
ebe3f8f03b59 Compatibility Analyser updated to version 2.8.4. Support for Qt code analysis added.
noe\swadi
parents: 0
diff changeset
  2622
							EIssueTypeRemoval,ESeverityBBCBreak,ESeveritySCNULL, "", 0, "",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2623
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2624
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2625
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2626
				if(includedHeaderPresent == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2627
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2628
					// add issue, as field is removed in current file.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2629
					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
  2630
						EIssueTypeRemoval,ESeverityNULL,ESeveritySCBreak, "", 0, "",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2631
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2632
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2633
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2634
			for(int l = 0; l < (int)includes.size(); l++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2635
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2636
				pair<string,string> pair = includes.at(l);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2637
				if(pair.first.size() > 0 && pair.second.size()>0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2638
				{				
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2639
					resourcevector.push_back(pair);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2640
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2641
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2642
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2643
			compareResources( baseResource, curResource, report);
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
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2647
		baseResource.structList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2648
		baseResource.enumList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2649
		baseResource.macroList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2650
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2651
		curResource.structList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2652
		curResource.enumList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2653
		curResource.macroList.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2654
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2655
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2656
	}// end of one resource
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2657
	cout<<"\n\n"<<endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2658
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2659
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2660
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2661
void Analyser::getElementListFromRHFile(std::ifstream& RHFile,ResourceContent& resource, vector< string >& includes )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2662
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2663
	string line;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2664
	EnumElement lEnum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2665
	string tempData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2666
	string elementVal;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2667
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2668
	StructElement lStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2669
	string structName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2670
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2671
	bool structInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2672
	bool enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2673
	bool macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2674
	bool keyFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2675
	bool elementfound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2676
	bool valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2677
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2678
	bool comment = false;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2679
	bool ignoreLine = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2680
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2681
	bool newLinecharFound = false; // for macros, newline character can be present
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2682
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2683
	long currentEnumVal = -1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2684
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2685
	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
  2686
		"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
  2687
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2688
	MacroElement macro;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2689
	int lineNo = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2690
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2691
	while(getline(RHFile,line))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2692
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2693
		lineNo++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2694
		pair<string,int> enummember;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2695
		StructMember elementMember;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2696
		line = toLowerCase(trimWhiteSpace(line));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2697
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2698
		// 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
  2699
		if(enumInuse == false && macroInuse == false && structInuse == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2700
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2701
			if(line.find("/*") != -1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2702
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2703
				if( line.find("*/") == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2704
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2705
				comment = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2706
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2707
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2708
				else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2709
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2710
					int com = (int)line.find_last_of("*");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2711
					line= line.substr(com +2, string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2712
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2713
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2714
			if(line.find("*/") != -1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2715
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2716
				comment = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2717
				if(ignoreLine == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2718
					ignoreLine = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2719
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2720
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2721
			if(comment == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2722
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2723
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2724
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2725
			if(line.find("//") != -1 ) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2726
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2727
				int com = (int)line.find_first_of("//");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2728
				bool wordFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2729
				line = line.substr(0,com);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2730
				for (int i = 0; i< (int)line.size(); i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2731
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2732
					// check  '//' commentline starts after some key value e.g struct ABCD // xyz
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2733
					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
  2734
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2735
						wordFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2736
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2737
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2738
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2739
				if(wordFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2740
				continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2741
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2742
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2743
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2744
 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2745
		// Find any other header file is included in current file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2746
		// 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
  2747
		// If not, then analyze it.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2748
		if(line.find ("#") != -1 && line.find("include") != -1 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2749
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2750
				int start = (int)line.find_first_of ("<");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2751
			
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2752
			int end;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2753
			if(start == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2754
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2755
				start =(int) line.find_first_of("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2756
				end = (int)line.find_last_of("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2757
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2758
			else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2759
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2760
				end = (int)line.find(">");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2761
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2762
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2763
			if (start > 0 && end > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2764
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2765
				line = line.substr(start + 1,(end - start) - 1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2766
				line = BBCFileUtils::TrimAll(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2767
				int loc = (int)line.find(RH_EXTENSION);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2768
				// Include only .rh files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2769
				if(loc != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2770
					includes.push_back(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2771
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2772
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2773
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2774
		// 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
  2775
		if (keyFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2776
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2777
			tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2778
			int enumloc = (int)line.find(KEY_ENUM);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2779
			// 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
  2780
			// For this case, following checks are needed.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2781
			if( enumloc!= -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2782
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2783
				enumInuse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2784
				string prestring = line.substr(0,enumloc);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2785
				for(int i = 0; i< (int)prestring.size(); i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2786
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2787
					if( (int)prestring.at(i)!= 32 && (int)prestring.at(i) != 9 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2788
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2789
						enumInuse =false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2790
						break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2791
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2792
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2793
				if(enumInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2794
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2795
					string postline = line.substr(enumloc+strlen(KEY_ENUM) ,string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2796
					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
  2797
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2798
							enumInuse =false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2799
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2800
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2801
					else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2802
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2803
						line = postline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2804
						macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2805
						structInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2806
						lEnum.enumName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2807
						lEnum.enums.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2808
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2809
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2810
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2811
			if(line.find(KEY_MACRO) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2812
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2813
				macroInuse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2814
				enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2815
				structInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2816
				macro.macroName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2817
				macro.macroVal = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2818
				line = line.substr(strlen(KEY_MACRO),string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2819
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2820
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2821
			if(line.find(KEY_STRUCT) != -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2822
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2823
				structInuse = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2824
				enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2825
				macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2826
				lStruct.structName = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2827
				lStruct.members.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2828
				line = line.substr(strlen(KEY_STRUCT),string::npos);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2829
			}	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2830
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2831
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2832
		// 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
  2833
		if ( enumInuse == true || macroInuse == true || structInuse == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2834
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2835
			keyFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2836
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2837
			EnumMember enummember;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2838
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2839
			string elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2840
			string elementType;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2841
			string structElementVal;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2842
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2843
			bool lineend = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2844
			int length = int(line.size());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2845
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2846
			for (int j = 0; j < length ; j++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2847
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2848
				int temp = line.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2849
				//int templie = line.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2850
				switch (temp)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2851
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2852
				case 32:  // For ' '
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2853
				case 9: //for Invalid space
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2854
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2855
						if (structInuse == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2856
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2857
							if ( elementfound == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2858
							{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2859
								for (int k = 0 ; k < 23 ; k++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2860
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2861
									// 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
  2862
									int loc = int(line.find_first_of(keywords[k]));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2863
									string key(keywords[k]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2864
									if (tempData == key )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2865
									{											
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2866
										elementType.append(keywords[k]);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2867
										tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2868
										break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2869
									}										
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2870
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2871
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2872
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2873
						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
  2874
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2875
							macro.macroName = tempData;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2876
							macro.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2877
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2878
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2879
					}
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
				case 59://For ';'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2882
					{						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2883
						if ( structInuse == true && elementfound == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2884
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2885
							elementName.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2886
							elementMember.elementName = elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2887
							elementMember.elementType = elementType;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2888
							elementMember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2889
							if (valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2890
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2891
								elementMember.elementValue= structElementVal; 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2892
								valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2893
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2894
							lStruct.members.push_back (elementMember);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2895
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2896
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2897
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2898
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2899
							break;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2900
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2901
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2902
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2903
				case 44://For ','
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2904
					{	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2905
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2906
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2907
							if ( enumInuse == true && elementfound == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2908
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2909
								if (valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2910
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2911
									enummember.enumVal = elementVal.c_str();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2912
									char *p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2913
									// convert enumVal to long , so that can be incremented if required.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2914
									currentEnumVal = strtol(enummember.enumVal.c_str(),&p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2915
									valueFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2916
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2917
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2918
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2919
									currentEnumVal += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2920
									string p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2921
									// convert long to string
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2922
									enummember.enumVal = ltoa(currentEnumVal,p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2923
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2924
								enummember.enumMemName.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2925
								enummember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2926
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2927
								lEnum.enums.push_back(enummember);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2928
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2929
								tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2930
								elementVal.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2931
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2932
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2933
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2934
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2935
					
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2936
				case 61: //For '='
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2937
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2938
						if(macroInuse == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2939
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2940
							valueFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2941
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2942
						}
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
				case 123:  //For '{'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2947
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2948
						if(macroInuse ==false)
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(tempData.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2951
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2952
								if(structInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2953
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2954
									lStruct.structName.assign(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2955
									lStruct.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2956
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2957
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2958
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2959
									lEnum.enumName.assign(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2960
									lEnum.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2961
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2962
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2963
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2964
							elementfound = 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
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2967
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2968
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2969
				case 125: //For '}'
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2970
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2971
						if(macroInuse ==false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2972
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2973
							if(structInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2974
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2975
								structInuse = false;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2976
								if(tempData.size() > 0) // if some inline macro is present
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2977
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2978
									elementMember.elementName = tempData ;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2979
									elementMember.elementType = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2980
									elementMember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2981
									lStruct.members.push_back(elementMember);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2982
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2983
								resource.structList.push_back(lStruct);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2984
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2985
							else if ( enumInuse == 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
								if (elementfound == true && tempData.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2988
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2989
									if (valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2990
									{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2991
										enummember.enumVal = elementVal.c_str(); 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2992
										char *p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2993
										// convert enumVal to long , so that can be incremented if required.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2994
										currentEnumVal = strtol(enummember.enumVal.c_str(),&p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2995
										valueFound = false;
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
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2998
									{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  2999
										currentEnumVal += 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3000
										string p;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3001
										// convert long to string
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3002
										enummember.enumVal = ltoa(currentEnumVal,p,0);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3003
									}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3004
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3005
									enummember.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3006
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3007
									enummember.enumMemName.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3008
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3009
									lEnum.enums.push_back(enummember);							
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
								elementVal.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3013
								enumInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3014
								resource.enumList.push_back(lEnum);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3015
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3016
							keyFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3017
							elementfound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3018
							tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3019
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3020
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3021
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3022
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3023
				default:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3024
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3025
						// followings are to ignore any comment line in between.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3026
						if( j+1 <length)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3027
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3028
							if (line.at(j) == '/' )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3029
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3030
								if(line.at(j+1) == '*')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3031
									ignoreLine = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3032
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3033
								else if ( line.at(j+1) == '/')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3034
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3035
									lineend = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3036
									break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3037
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3038
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3039
							if(ignoreLine == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3040
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3041
								if (j+1 <length && line.at(j) == '*' && line.at(j+1) == '/')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3042
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3043
									ignoreLine = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3044
									j = j+2;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3045
									continue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3046
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3047
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3048
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3049
						} // comment line checks ended
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 == false && j<length)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3052
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3053
							// 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
  3054
							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
  3055
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3056
								newLinecharFound = true; // new line character found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3057
								if ( macro.macroName.size() <=0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3058
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3059
									macro.macroName = tempData;	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3060
									macro.lineNo = lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3061
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3062
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3063
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3064
									macro.macroVal.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3065
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3066
								tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3067
								
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3068
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3069
							// Check macro definition ended after newlines
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3070
							if( (int) line.at(j)!= 92 && j+1 >= length && macroInuse == true &&  newLinecharFound == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3071
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3072
								newLinecharFound =false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3073
								//macroInuse = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3074
								//macro.macroVal.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3075
								//tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3076
								break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3077
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3078
							if (enumInuse == true || macroInuse == true || structInuse == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3079
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3080
								if(valueFound == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3081
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3082
									if ( structInuse == true )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3083
										structElementVal.push_back(line.at(j));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3084
									else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3085
										elementVal.push_back(line.at(j));									
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3086
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3087
								else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3088
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3089
									if( (int)line.at(j) != 92)// ignore newline character
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3090
									tempData.push_back(line.at(j));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3091
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3092
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3093
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3094
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3095
						
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3096
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3097
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3098
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3099
				if (lineend == true)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3100
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3101
			}// line end
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3102
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3103
			// Macro structure ended, fill the values.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3104
			if( macroInuse == true && newLinecharFound == false && tempData.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3105
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3106
				if(tempData.size()> 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3107
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3108
					macro.macroVal.append(tempData);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3109
					tempData.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3110
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3111
				keyFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3112
				macroInuse = false ;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3113
				resource.macroList.push_back(macro);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3114
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3115
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3116
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3117
	}// End of all lines in resource file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3118
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3119
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3120
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3121
void Analyser::compareResources(ResourceContent &baseResource, ResourceContent &curResource, ReportGenerator& report)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3122
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3123
	int base_struct_no = (int)baseResource.structList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3124
	int cur_struct_no = (int)curResource.structList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3125
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3126
	int base_enum_no = (int)baseResource.enumList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3127
	int cur_enum_no = (int)curResource.enumList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3128
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3129
	int base_macro_no = (int)baseResource.macroList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3130
	int cur_macro_no = (int)curResource.macroList.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3131
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3132
	StructElement baseStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3133
	StructElement curStruct;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3134
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3135
	EnumElement baseEnum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3136
	EnumElement curEnum;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3137
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3138
	MacroElement baseMacro;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3139
	MacroElement curMacro;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3140
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3141
	for(int i = 0; i < base_struct_no; i++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3142
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3143
		baseStruct =  baseResource.structList.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3144
		bool structFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3145
		for(int j = 0; j < cur_struct_no; j++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3146
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3147
			curStruct = curResource.structList.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3148
			if(baseStruct.structName == curStruct.structName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3149
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3150
				int baseMemNo = (int)baseStruct.members.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3151
				int curMemNo = (int)curStruct.members.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3152
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3153
				structFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3154
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3155
				for( int bInner = 0; bInner < baseMemNo; bInner++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3156
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3157
					bool memFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3158
					for ( int cInner = 0; cInner < curMemNo; cInner++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3159
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3160
						if ( baseStruct.members.at(bInner).elementName == curStruct.members.at(cInner).elementName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3161
						{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3162
							memFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3163
							if(baseStruct.members.at(bInner).elementType == curStruct.members.at(cInner).elementType)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3164
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3165
								if(baseStruct.members.at(bInner).elementValue.size() > 0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3166
									&& (baseStruct.members.at(bInner).elementValue != curStruct.members.at(cInner).elementValue) )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3167
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3168
									//add issue	member value mismatch		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3169
									string bVal = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3170
									string cVal = curStruct.members.at(cInner).elementValue;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3171
									int lineNo = curStruct.members.at(cInner).lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3172
									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
  3173
										ESeverityNULL, ESeveritySCBreak, cVal, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3174
								} 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3175
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3176
							else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3177
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3178
								// add issue tyechange
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3179
								string bType = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3180
								string cType = curStruct.members.at(cInner).elementType;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3181
								int lineNo = curStruct.members.at(cInner).lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3182
								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
  3183
									ESeverityNULL, ESeveritySCBreak, cType, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3184
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3185
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3186
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3187
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3188
						}// memeber name matched
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3189
					}// loop thru all curr struct member
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3190
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3191
					if( memFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3192
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3193
						// Add Issue Member not found  // baseStruct.members.at(bInner)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3194
						string bMember = baseStruct.structName + "::" + baseStruct.members.at(bInner).elementName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3195
						int lineNo = curStruct.lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3196
						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
  3197
							ESeverityNULL,ESeveritySCBreak, "", lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3198
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3199
				}// loop base struct member
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3200
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3201
			}// struct name match
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3202
		}// loop curr structs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3203
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3204
		if( structFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3205
		{ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3206
			//Add issue struct not found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3207
			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
  3208
				ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3209
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3210
	}//loop base structs
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3211
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3212
	// --------------Enum Comparison ------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3213
	vector<EnumMember>baseEnumNameEmptyMemberList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3214
	vector<EnumMember>curEnumNameEmptyMemberList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3215
	vector<EnumElement> bEnumList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3216
	vector<EnumElement> cEnumList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3217
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3218
    for( int b = 0; b < base_enum_no; b++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3219
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3220
		baseEnum = baseResource.enumList.at(b);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3221
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3222
		if(baseEnum.enumName.size()<=0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3223
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3224
			for(int k = 0; k < (int)baseEnum.enums.size(); k++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3225
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3226
				baseEnumNameEmptyMemberList.push_back(baseEnum.enums.at(k));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3227
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3228
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3229
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3230
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3231
			bEnumList.push_back(baseEnum);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3232
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3233
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3234
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3235
	for( int c = 0; c < cur_enum_no; c++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3236
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3237
		curEnum = curResource.enumList.at(c);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3238
		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3239
		if(curEnum.enumName.size()<=0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3240
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3241
			for(int k = 0; k < (int)curEnum.enums.size(); k++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3242
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3243
				curEnumNameEmptyMemberList.push_back(curEnum.enums.at(k));
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
		else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3247
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3248
			cEnumList.push_back(curEnum);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3249
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3250
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3251
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3252
	// Compare and report issue for enum list with name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3253
	for( int l = 0; l < (int) bEnumList.size(); l++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3254
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3255
		baseEnum = bEnumList.at(l);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3256
		bool enumFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3257
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3258
		for( int m = 0; m < (int)cEnumList.size(); m++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3259
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3260
			curEnum = cEnumList.at(m);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3261
			if ( baseEnum.enumName == curEnum.enumName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3262
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3263
				int bMemNo = (int)baseEnum.enums.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3264
				int cMemNo = (int)curEnum.enums.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3265
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3266
				enumFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3267
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3268
				for ( int outer = 0; outer < bMemNo; outer++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3269
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3270
					bool enumMemFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3271
					for( int inner = 0; inner < cMemNo; inner++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3272
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3273
						if(baseEnum.enums.at(outer).enumMemName == curEnum.enums.at(inner).enumMemName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3274
						{ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3275
							enumMemFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3276
							// member name found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3277
							if(baseEnum.enums.at(outer).enumVal.size() > 0 )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3278
							{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3279
								if (baseEnum.enums.at(outer).enumVal != curEnum.enums.at(inner).enumVal )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3280
								{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3281
									//add issue Member value changed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3282
									string baseEnumVal = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3283
									string curEnumVal = curEnum.enums.at(inner).enumVal;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3284
									int lineNo = curEnum.enums.at(inner).lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3285
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3286
									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
  3287
										ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3288
								}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3289
							}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3290
							break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3291
						}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3292
					} // loop cur mems
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3293
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3294
					if ( enumMemFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3295
					{ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3296
						// Add Enum Member Missing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3297
						string bMemName = baseEnum.enumName +"::" + baseEnum.enums.at(outer).enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3298
						int lineNo = curEnum.lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3299
						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
  3300
							ESeverityNULL, ESeveritySCBreak, "", lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3301
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3302
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3303
				}// loop base mems
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3304
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3305
				break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3306
			}// enum name matched
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3307
		}// loop cur enums
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3308
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3309
		if (enumFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3310
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3311
			// Enum List missing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3312
			string bEnum = baseEnum.enumName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3313
			string cEnum = curEnum.enumName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3314
			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
  3315
				ESeverityNULL, ESeveritySCBreak, cEnum, 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3316
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3317
	}//base enums
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3318
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3319
	// 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
  3320
	if(baseEnumNameEmptyMemberList.size() > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3321
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3322
		EnumMember bEnumMem;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3323
		for(unsigned long i = 0; i < (unsigned long)baseEnumNameEmptyMemberList.size(); i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3324
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3325
			bEnumMem = baseEnumNameEmptyMemberList.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3326
			EnumMember cEnumMem;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3327
			bool enumMemFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3328
			for(unsigned long j = 0; j <(unsigned long) curEnumNameEmptyMemberList.size(); j++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3329
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3330
				cEnumMem = curEnumNameEmptyMemberList.at(j);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3331
				if(bEnumMem.enumMemName == cEnumMem.enumMemName)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3332
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3333
					enumMemFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3334
					if(bEnumMem.enumVal != cEnumMem.enumVal )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3335
					{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3336
						//add issue enum value changed 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3337
						string baseEnumVal = "::" + bEnumMem.enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3338
						string curEnumVal = cEnumMem.enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3339
						int lineNo = cEnumMem.lineNo;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3340
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3341
						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
  3342
							ESeverityNULL, ESeveritySCBreak, curEnumVal, lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3343
					}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3344
					break;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3345
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3346
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3347
			if(enumMemFound == false)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3348
			{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3349
				// add issue enum mem mising
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3350
				string bMemName = "::" + bEnumMem.enumMemName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3351
				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
  3352
					ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3353
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3354
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3355
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3356
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3357
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3358
	// --------------------- Macro Comparision --------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3359
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3360
	for (int p = 0; p < base_macro_no; p++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3361
	{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3362
		bool macroFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3363
		baseMacro = baseResource.macroList.at(p);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3364
		for (int q = 0; q < cur_macro_no; q++ )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3365
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3366
			curMacro = curResource.macroList.at(q);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3367
			if(baseMacro.macroName == curMacro.macroName )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3368
			{ // check Macro value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3369
				macroFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3370
				if(baseMacro.macroVal != curMacro.macroVal )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3371
				{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3372
					//add issue macro value mismatch
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3373
					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
  3374
						ESeverityNULL, ESeveritySCBreak, curMacro.macroVal, curMacro.lineNo,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3375
				}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3376
				break; // macro name matched
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3377
			}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3378
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3379
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3380
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3381
		if (macroFound == false )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3382
		{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3383
			// add issue macro not found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3384
			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
  3385
				ESeverityNULL, ESeveritySCBreak, "", 0,"",curResource.RHFileName,"");
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3386
		}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3387
	}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
  3388
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