apicompatanamdw/compatanalysercmd/headeranalyser/src/CPPParser.cpp
author noe\swadi
Tue, 12 Jan 2010 14:52:39 +0530
changeset 0 638b9c697799
child 3 ebe3f8f03b59
permissions -rw-r--r--
1. Licenses updated to EPL. 2. New components test cases added to BC Drivers 3. Some minor fixes and few feature additions to CA.
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
#include <stdio.h>
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 <stdlib.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#include <windows.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
#include <direct.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <errno.h>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
#include <xercesc/dom/DOM.hpp>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
#include <xercesc/parsers/AbstractDOMParser.hpp>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
#include <iostream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
#include <fstream>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
#include <string>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
#include "CPPParser.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
#include "XMLModuleErrorHandler.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
#include "HAException.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
#include "BBCFileUtils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
#include "Utils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
#include "XMLUtils.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
XERCES_CPP_NAMESPACE_USE
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
const int KMaxFilenameLength = 512;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
const int KMaxDirLength=1024;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
// The C++ parser executable
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
static const char* GCCXML_COMMAND = "ha_gccxml_cc1plus ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
static const char* GCCXML_COMMAND = "./ha_gccxml_cc1plus ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
// Parameters to parser 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
// 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
//static const char* GCCXML_DEFINE = " -D_DEBUG -D__wchar_t=wchar_t -D_UNICODE -D__SYMBIAN32__ -D__SERIES60_30__ -D__SERIES60_3X__ -D__GCC32__ -D__EPOC32__ -D__GCC32__ -D__MARM__ -D__GCCXML__ -D__MARM_ARM4__ -D__MARM_ARMV5__ -D__EXE__  -UWIN32  -U__i386__ -U_WIN32 -U__WIN32__";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
static const char* GCCXML_DEFINE = " -D_DEBUG -D_UNICODE -D__SYMBIAN32__ -D__SERIES60_30__ -D__SERIES60_3X__ -D__GCC32__ -D__GNUC__ -D__EPOC32__ -D__GCC32__ -D__MARM__ -D__GCCXML__ -D__MARM_ARM4__ -D__MARM_ARMV5__ -D__EXE__  -UWIN32  -U__i386__ -U_WIN32 -U__WIN32__";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
static const char* GCCXML_OPTIONS = " -E -g -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -fshort-wchar -quiet -w ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
// Output file define
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
static const char* GCCXML_OUTPUT = " -o ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
static const char* GCCXML_INCLUDEPATH = " -I ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
// XML output file define
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
static const char* GCCXML_XML_OUTPUT = " -fxml=";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
static const char* GCCXML_MACRO_OUTPUT = " -dD ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
// Error code when file remove fails
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
const int KErrorRemoveFailed=0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
static const char* GCCXML_COMP_OPTIONS = " -fpreprocessed -g -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -fshort-wchar -quiet -w -o nul";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
static const char* GCCXML_COMP_OPTIONS = " -fpreprocessed -g -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -fshort-wchar -quiet -w -o /dev/null";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
#endif
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
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
// CPPParser::GenerateCompilationCmd
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
// Generate command for compilation
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
string CPPParser::GenerateCompilationCmd(const string& currentDir,const string& epocRoot,const string& inputFile,const string& outputFile)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
{    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
    string cmdline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
    if (currentDir != "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
        cmdline = currentDir + "\"" + DIR_SEPARATOR + "\"";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
    cmdline += GCCXML_COMMAND;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
    cmdline += GCCXML_COMP_OPTIONS;    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
    cmdline += GCCXML_XML_OUTPUT + string("\"") + outputFile + string("\" \"");
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
    cmdline += inputFile + string("\"")+ string(" 2>\"") + iCompErrFile + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
    //cout << "-------COMPILATION-----------------------\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
    //cout << cmdline << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
    //cout << "-----------------------------------------\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
    return cmdline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
// CPPParser::GeneratePreprocessCmd
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
// Generate GCXML command for prepocessing
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
string CPPParser::GeneratePreprocessCmd(const string& currentDir,const string& epocRoot,const string& inputFile,const string& outputFile,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
                             vector<string>& aHeaders )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
    string cmdline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
    if (currentDir != "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
        cmdline = currentDir + DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
    cmdline += GCCXML_COMMAND;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
    list<pair<string, string> > includes = BBCFileUtils::extractFilenames(epocRoot);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
    list<pair<string, string> >::iterator listbegin = includes.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
    list<pair<string, string> >::iterator listend = includes.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
    for(; listbegin != listend; listbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
        cmdline += GCCXML_INCLUDEPATH + string("\"") + listbegin->first + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
    if ( !aHeaders.empty() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
        int size = (int)aHeaders.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
        int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
        for(;i < size; i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
            string headerfile = aHeaders.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
            cmdline += GCCXML_INCLUDEPATH + string("\"") + headerfile + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
    cmdline += GCCXML_DEFINE;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
    cmdline += GCCXML_OPTIONS;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
    cmdline += GCCXML_OUTPUT + string("\"") + outputFile + string("\" \"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
    cmdline += inputFile + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
    //cout << "-------- PREPROCESS COMMAND --------------" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
    //cout << cmdline << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
    //cout << "------------------------------------------" << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
    return cmdline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   155
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   156
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
// CPPParser::GenerateMacroExtract
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
// Generate commanf or macro extract
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
string CPPParser::GenerateMacroExtract(const string& currentDir,const string& epocRoot,const string& inputFile,const string& outputFile,
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
                             vector<string>& aHeaders )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
    string cmdline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
    if (currentDir != "")
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
        cmdline = currentDir + DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
    cmdline += GCCXML_COMMAND;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
    list<pair<string, string> > includes = BBCFileUtils::extractFilenames(epocRoot);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
    list<pair<string, string> >::iterator listbegin = includes.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
    list<pair<string, string> >::iterator listend = includes.end();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
    for(; listbegin != listend; listbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
        cmdline += GCCXML_INCLUDEPATH + string("\"") + listbegin->first + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
    if ( !aHeaders.empty() )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
        int size = (int)aHeaders.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
        int i = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
        for(;i < size; i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   189
            string headerfile = aHeaders.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   190
            cmdline += GCCXML_INCLUDEPATH + string("\"") + headerfile + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   191
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   192
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   193
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   194
    cmdline += GCCXML_DEFINE;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   195
    cmdline += GCCXML_OPTIONS;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   196
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   197
    cmdline += GCCXML_MACRO_OUTPUT;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   198
    cmdline += GCCXML_OUTPUT + string("\"") + outputFile + string("\" \"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   199
  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   200
    cmdline += inputFile + string("\"")+ string(" 2>\"") + iCompErrFile + string("\"");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   201
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   202
    //cout << "-----------------------------------------\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   203
    //cout << cmdline << endl;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   204
    //cout << "-----------------------------------------\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   205
    return cmdline;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   206
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   207
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   208
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   209
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   210
// CPPParser::CPPParser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   211
// Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   212
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   213
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   214
CPPParser::CPPParser(string epocroot) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   215
  : iInputFilename(), iOutputFilename(), iXMLOutputPath(),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   216
    iEpocRoot(epocroot), iDOMParser(NULL), iDOMDoc(NULL),
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   217
    iDOMRootElement(NULL), iCompErrFile()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   218
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   219
 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   220
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   221
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   222
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   223
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   224
// CPPParser::~CPPParser
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   225
// Destructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   226
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   227
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   228
CPPParser::~CPPParser() 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   229
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   230
    if (iDOMParser != NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   231
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   232
        iDOMParser->resetDocumentPool();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   233
        iDOMParser->release();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   234
        iDOMParser = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   235
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   236
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   237
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   238
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   239
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   240
// CPPParser::parse
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   241
// Please, note that iOutputFilename is changed internally in different 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   242
// function calls.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   243
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   244
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   245
DOMNode* CPPParser::parse(const vector<string>& aFilenames, string aVersion, string aPath, list<string>& notRemovedFiles)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   246
{   
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   247
    DOMNode* ret = NULL;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   248
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   249
    int err = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   250
    headervector headers;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   251
    string cppfilename = generateTempCPPFile(aFilenames, aVersion, headers );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   252
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   253
    string extensionStripped = BBCFileUtils::StripFilenameExtension(cppfilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   254
    iOriginalFilename = BBCFileUtils::StripPath(extensionStripped);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   255
	iCompErrFile = iTempDir + DIR_SEPARATOR + iOriginalFilename + "-" + aVersion + "-comperr.txt";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   256
    try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   257
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   258
        err = PreprocessH(cppfilename, aVersion, headers);        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   259
    } catch (HAException error)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   260
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   261
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   262
        RemoveFile(cppfilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   263
        RemoveFile(iMacroFilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   264
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   265
        throw error;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   266
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   267
    RemoveFile(cppfilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   268
    string prefilename = iOutputFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   269
    HandleExports(iOutputFilename, aVersion);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   270
    string pre2filename = iOutputFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   271
    try
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   272
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   273
        err = ConvertHToXML(iOutputFilename, aVersion);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   274
    } catch (HAException error)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   275
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   276
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   277
        RemoveFile(prefilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   278
        RemoveFile(pre2filename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   279
        RemoveFile(iMacroFilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   280
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   281
        throw error;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   282
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   283
    if (err == 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   284
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   285
        err = ExtractDOMFromXML(iOutputFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   286
        ret = iDOMRootElement;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   287
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   288
    headers.clear();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   289
    RemoveFile(prefilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   290
    RemoveFile(pre2filename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   291
#if !defined(_DEBUG) && !defined(DEBUG)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   292
    RemoveFile(iOutputFilename, notRemovedFiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   293
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   294
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   295
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   296
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   297
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   298
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   299
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   300
// CPPParser::RemoveFile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   301
// Remove given file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   302
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   303
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   304
void CPPParser::RemoveFile(string file, list<string>& notRemovedFiles)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   305
{       
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   306
    int success;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   307
/*#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   308
    success = DeleteFile(file.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   309
    if (success == KErrorRemoveFailed)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   310
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   311
        unsigned long int errorcode = GetLastError();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   312
        if (errorcode != ERROR_FILE_NOT_FOUND)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   313
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   314
            notRemovedFiles.push_back(file);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   315
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   316
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   317
#else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   318
    success = unlink(file.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   319
    if (success == -1)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   320
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   321
        if (errno != ENOENT)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   322
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   323
            notRemovedFiles.push_back(file);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   324
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   325
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   326
#endif*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   327
	REMOVE_FILE_FUNCTION
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   328
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   329
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   330
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   331
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   332
// CPPParser::GenerateMacroExtract
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   333
// Converts a header file with given filename to an XML file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   334
// (with same base filename and extension .xml).
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   335
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   336
// Throw an exception on error
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   337
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   338
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   339
int CPPParser::ConvertHToXML(string aFilename, string aVersion) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   340
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   341
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   342
    string oFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   343
    string iFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   344
    string tempOFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   345
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   346
    iFilename = aFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   347
    tempOFilename = BBCFileUtils::StripPath(BBCFileUtils::StripFilenameExtension(iFilename));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   348
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   349
    oFilename = iTempDir + DIR_SEPARATOR + iOriginalFilename + "-" + aVersion + ".xml";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   350
    char currentDir[KMaxDirLength];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   351
    getcwd(currentDir,KMaxDirLength);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   352
    #ifdef USE_INCLUDED_GCC_DISTRIBUTION
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   353
        string cmdline = GenerateCompilationCmd(currentDir, iEpocRoot, iFilename, oFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   354
    #else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   355
    string empty("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   356
        string cmdline = GenerateCompilationCmd(empty, iEpocRoot, iFilename, oFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   357
    #endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   358
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   359
    ret = system(cmdline.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   360
    iXMLOutputPath = iTempDir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   361
    iOutputFilename = oFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   362
    iInputFilename = iFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   363
    if (ret != 0) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   364
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   365
        throw(HAException("GCCXML Error, please see above for more information"));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   366
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   367
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   368
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   369
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   370
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   371
// CPPParser::GenerateMacroExtract
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   372
// Generate temporary CPP-file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   373
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   374
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   375
int CPPParser::DumpMacros(string mdumpfile, string ifile, vector<string>& headers)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   376
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   377
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   378
    string cmdbuf;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   379
    char currentDir[KMaxDirLength];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   380
    getcwd(currentDir,KMaxDirLength);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   381
    #ifdef USE_INCLUDED_GCC_DISTRIBUTION
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   382
        cmdbuf = GenerateMacroExtract(currentDir, iEpocRoot, ifile, mdumpfile, headers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   383
    #else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   384
        string empty("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   385
        cmdbuf = GenerateMacroExtract(empty, iEpocRoot, ifile, mdumpfile,headers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   386
    #endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   387
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   388
    ret = system(cmdbuf.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   389
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   390
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   391
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   392
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   393
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   394
// CPPParser::ExtractDOMFromXML
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   395
// Reads in and parses an XML file with given filename.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   396
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   397
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   398
int CPPParser::ExtractDOMFromXML(const string& aXMLFilename)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   399
{    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   400
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   401
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   402
    if (iDOMParser != NULL) {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   403
        iDOMParser->resetDocumentPool();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   404
        iDOMParser->release();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   405
		iDOMParser = NULL;		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   406
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   407
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   408
    return ParseXMLFile(aXMLFilename, iDOMParser, iDOMDoc, iDOMRootElement);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   409
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   410
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   411
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   412
// CPPParser::setBaselineDir
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   413
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   414
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   415
void CPPParser::setBaselineDir(string aRoot)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   416
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   417
    iEpocRoot = aRoot;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   418
}
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
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   422
// CPPParser::PreprocessH
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   423
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   424
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   425
int CPPParser::PreprocessH(string aFilename, string aVersion, vector<string>& headers )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   426
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   427
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   428
    string oFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   429
    string iFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   430
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   431
    string tempOFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   432
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   433
    iFilename = aFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   434
    tempOFilename = iOriginalFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   435
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   436
    oFilename = iTempDir + DIR_SEPARATOR + tempOFilename + "-" + aVersion + ".pre";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   437
    iMacroFilename = iTempDir + DIR_SEPARATOR + iOriginalFilename + "-" + aVersion + "-macros.txt";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   438
    ret = DumpMacros(iMacroFilename, iFilename,headers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   439
    if (ret != 0) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   440
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   441
        throw(HAException("GCCXML Error, please see above for more information"));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   442
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   443
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   444
    char currentDir[KMaxDirLength];
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   445
     getcwd(currentDir,KMaxDirLength);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   446
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   447
    #ifdef USE_INCLUDED_GCC_DISTRIBUTION
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   448
        string cmdline = GeneratePreprocessCmd(currentDir,iEpocRoot,iFilename,oFilename, headers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   449
    #else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   450
    string empty("");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   451
        string cmdline = GeneratePreprocessCmd(empty,iEpocRoot,iFilename,oFilename, headers);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   452
    #endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   453
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   454
    ret = system(cmdline.c_str());
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   455
    if (ret != 0) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   456
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   457
        throw(HAException("GCCXML Error, please see above for more information"));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   458
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   459
    iXMLOutputPath = iTempDir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   460
    iOutputFilename = oFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   461
    iInputFilename = iFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   462
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   463
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   464
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   465
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   466
// CPPParser::HandleExports
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   467
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   468
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   469
int CPPParser::HandleExports(string aFilename, string aVersion)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   470
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   471
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   472
    string ofilename = aFilename + ".2";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   473
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   474
    ifstream input(aFilename.c_str(), ios::in);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   475
    ofstream output(ofilename.c_str(), ios::out);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   476
    iOutputFilename = ofilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   477
    char c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   478
    string toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   479
    unsigned int matches = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   480
    string tofind = STR_EXPORT_HACK;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   481
    string attribstr = STR_ATTRIBUTE_STR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   482
    string outputBuffer;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   483
    outputBuffer.reserve(PREPROCESS_BUFFERSIZE);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   484
    int state = EStateSearching;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   485
    bool purevirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   486
    bool possiblepurevirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   487
    while (input.get(c))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   488
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   489
        if (outputBuffer.length() >= PREPROCESS_BUFFERSIZE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   490
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   491
            output << outputBuffer;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   492
            outputBuffer = "";
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 (state == EStateSearching)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   495
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   496
            if (c == tofind.at(matches))
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   497
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   498
                matches++;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   499
                toflush += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   500
            } else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   501
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   502
                matches = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   503
                if (!toflush.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   504
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   505
                    outputBuffer += toflush;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   506
                    toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   507
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   508
                outputBuffer += c;
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 (matches == tofind.length())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   511
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   512
                toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   513
                state = EStateReplacing;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   514
                matches = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   515
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   516
        } else if (state == EStateReplacing)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   517
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   518
            if (c == '=')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   519
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   520
                if (possiblepurevirtual == true && !toflush.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   521
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   522
                    outputBuffer += toflush;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   523
                    toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   524
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   525
                possiblepurevirtual = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   526
                toflush += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   527
            } else if (possiblepurevirtual == true && c!= ';')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   528
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   529
                if (c == ' ')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   530
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   531
                    toflush += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   532
                } else if (c == '\t')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   533
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   534
                    toflush += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   535
                } else if (c == '0')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   536
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   537
                    toflush += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   538
                    purevirtual = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   539
                } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   540
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   541
                    outputBuffer += toflush;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   542
                    outputBuffer += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   543
                    toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   544
                    possiblepurevirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   545
                    purevirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   546
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   547
            } else if (c == ';')
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   548
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   549
                state = EStateSearching;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   550
                if (purevirtual)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   551
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   552
                } else if (possiblepurevirtual)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   553
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   554
                    outputBuffer += toflush;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   555
                    toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   556
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   557
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   558
                outputBuffer += " ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   559
                outputBuffer += attribstr;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   560
                if (!toflush.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   561
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   562
                    outputBuffer += " ";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   563
                    outputBuffer += toflush;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   564
                    toflush = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   565
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   566
                possiblepurevirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   567
                purevirtual = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   568
                outputBuffer += ';';
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   569
            } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   570
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   571
                outputBuffer += c;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   572
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   573
        } else if (state == EStateReplaceDone)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   574
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   575
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   576
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   577
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   578
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   579
    if (outputBuffer.length() != 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   580
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   581
        output << outputBuffer;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   582
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   583
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   584
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   585
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   586
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   587
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   588
// CPPParser::ReplaceExport
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   589
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   590
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   591
#if 0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   592
int CPPParser::ReplaceExport(string line, string& processedline)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   593
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   594
    int ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   595
    if (processedline.length() == 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   596
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   597
        string tofind = STR_EXPORT_HACK;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   598
        size_t idx = line.find(tofind);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   599
        if (idx != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   600
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   601
            unsigned int start = (unsigned int)idx + tofind.length();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   602
            int len = (int)line.length() - start;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   603
            string sub = line.substr(start+1, len-1);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   604
            int insertidx = (int)sub.rfind("=0;");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   605
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   606
            if (insertidx < 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   607
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   608
                insertidx = (int)sub.rfind("= 0;");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   609
                if (insertidx < 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   610
                {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   611
                    insertidx = (int)sub.rfind(';');
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   612
                }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   613
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   614
            if (insertidx > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   615
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   616
                sub.insert(insertidx, " __attribute((gccxml(\"exported\")))");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   617
            } else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   618
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   619
                ret = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   620
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   621
            processedline.append(sub);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   622
        } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   623
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   624
            if (processedline.find("};") != string::npos )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   625
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   626
                processedline.append(line);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   627
                ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   628
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   629
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   630
    } else
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   631
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   632
        string sub = line;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   633
        int insertidx = (int)sub.rfind("=0;");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   634
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   635
        if (insertidx < 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   636
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   637
            insertidx = (int)sub.rfind("= 0;");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   638
            if (insertidx < 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   639
            {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   640
                insertidx = (int)sub.rfind(';');
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   641
            }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   642
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   643
        if (insertidx > 0)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   644
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   645
            sub.insert(insertidx, " __attribute((gccxml(\"exported\")))");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   646
            ret = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   647
        } else 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   648
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   649
            ret = 1;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   650
        }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   651
        processedline = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   652
        processedline.append(sub);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   653
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   654
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   655
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   656
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   657
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   658
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   659
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   660
// CPPParser::getEnv
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   661
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   662
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   663
char* CPPParser::getEnv(char* aEnvVarName)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   664
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   665
    char* ret = getenv(aEnvVarName);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   666
    if (ret == NULL)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   667
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   668
        string s("Environment variable not defined: ");
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   669
        s += aEnvVarName;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   670
        throw(new HAException(s));
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   671
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   672
    return ret;
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
// CPPParser::generateTempCPPFile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   677
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   678
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   679
string CPPParser::generateTempCPPFile(const vector<string>& aFiles, string aVersion, vector<string>& aHeaders)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   680
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   681
    string headers = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   682
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   683
	if (!iForcedHeaders.empty())
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   684
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   685
        // START -- Support for multiple forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   686
        list<pair<string, string> > fheaders = BBCFileUtils::extractFilenames(iForcedHeaders);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   687
        list<pair<string, string> >::iterator fheadersbegin = fheaders.begin();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   688
        
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   689
        for(; fheadersbegin != fheaders.end(); fheadersbegin++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   690
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   691
            headers += "#include \"";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   692
            headers += fheadersbegin->first;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   693
            headers += "\"\n";           
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   694
        } 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   695
		// END -- Support for multiple forced headers
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   696
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   697
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   698
    size_t filecount = aFiles.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   699
    int filehash = 0;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   700
    string ret = "";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   701
    for (unsigned int i = 0; i < filecount; i++)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   702
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   703
        // Append header folder to include vector
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   704
        //string& hdr = aFiles.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   705
        AppendHeader( aHeaders, aFiles.at(i) );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   706
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   707
        string fn = aFiles.at(i);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   708
        headers += "#include \"";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   709
        headers += fn;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   710
        headers += "\"\n";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   711
        fn += "-";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   712
        fn += aVersion;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   713
        filehash += BBCFileUtils::quickHash(fn);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   714
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   715
    string temp;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   716
    itoa(filehash, temp, 10);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   717
    ret = iTempDir + DIR_SEPARATOR + temp + ".cpp";
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   718
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   719
    ofstream output(ret.c_str(), ios::out);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   720
    output << headers;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   721
    output.close();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   722
    return ret;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   723
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   724
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   725
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   726
// CPPParser::setForcedHeaders
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   727
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   728
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   729
void CPPParser::setForcedHeaders(const string& aHeaders)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   730
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   731
    iForcedHeaders = aHeaders;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   732
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   733
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   734
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   735
// CPPParser::setTemp
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   736
// Set temp file
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
void CPPParser::setTemp(const string& aTempDir)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   740
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   741
    iTempDir = aTempDir;
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
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   745
// CPPParser::getMacroFilename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   746
// Returns macro filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   747
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   748
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   749
string CPPParser::getMacroFilename()
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   750
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   751
    return iMacroFilename;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   752
}
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   753
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   754
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   755
// CPPParser::getCompErrFile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   756
// Returns compilation error filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   757
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   758
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   759
string CPPParser::getCompErrFile()
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 iCompErrFile;
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
// CPPParser::AppendHeader
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   766
// ----------------------------------------------------------------------------
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   767
//
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   768
void CPPParser::AppendHeader( vector<string>& aHeaders, string aFile )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   769
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   770
    string onlyFolder = aFile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   771
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   772
    string::size_type idx = onlyFolder.rfind(DIR_SEPARATOR);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   773
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   774
    // for other separation formats
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   775
    if (idx != string::npos)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   776
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   777
        onlyFolder.erase( idx );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   778
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   779
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   780
    if (onlyFolder.size() == ANALYSER_HEADER_SIZE)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   781
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   782
        onlyFolder += APPEND_DIR_SEPARATOR;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   783
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   784
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   785
    bool notFound = true;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   786
    unsigned int size = (unsigned int)aHeaders.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   787
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   788
    for(unsigned int g = 0; g < size ; g++ )
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( aHeaders.at(g) == onlyFolder )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   791
        {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   792
            notFound = false;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   793
            size = (unsigned int)aHeaders.size();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   794
        }		
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   795
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   796
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   797
    if( notFound )
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   798
    {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   799
        aHeaders.push_back( onlyFolder );
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   800
    }
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   801
}