diff -r 000000000000 -r 638b9c697799 apicompatanamdw/compatanalysercmd/headeranalyser/src/CPPParser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/apicompatanamdw/compatanalysercmd/headeranalyser/src/CPPParser.h Tue Jan 12 14:52:39 2010 +0530 @@ -0,0 +1,268 @@ +/* +* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#ifndef __CPP_PARSER_H__ +#define __CPP_PARSER_H__ +#include "CmdGlobals.h" +#ifdef __WIN__ +#pragma warning(disable:4786) +#endif + +#include +#include +#include +#include +#include + +#include "CmdGlobals.h" + +using namespace std; + +typedef vector headervector; + +XERCES_CPP_NAMESPACE_USE + + +/** +* The CPPParser provides interface for the GCCXML program for C++ parsing functionality +* It produces a XML document that the HeaderAnalyser interface receives as a input +* for BBC analysis. The result of the analysis from the HeaderAnalysis is also +* a XML document. +*/ +class CPPParser { + +// Construction / destruction +public: + + /** + * Constructor + * @param epocroot root of the platform headers( baseline or current) + */ + CPPParser(string epocroot); + + /** + * Destructor + */ + ~CPPParser(); + +// Interface methods +public: + + /** + * Parse the filename vectors into XML and eventually into a DOM format + * @param aFilenames vector of filename to parse + * @param aVersion version string + * @param aPath header path + * @param notRemovedFiles list of not removed files + * @return pointer to DOMnode + */ + DOMNode* parse(const vector& aFilenames, string aVersion, string aPath, list& notRemovedFiles); + + /** + * Set baseline directory + * @param aDir header path + */ + void setBaselineDir(string aDir); + + /** + * Set forced headers.Specifies a file which is always included + * first in generated temporary cpp file. + * @param aHeaders fors + */ + void setForcedHeaders(const string& aHeaders); + + /** + * Set temporary directory to member variable + * @param aTempDir reference to temp directory name + */ + void setTemp(const string& aTempDir); + + /** + * Get macro filename + * @return name of the file containing all macros found + */ + string getMacroFilename(); + + /** + * Get compilation error file + * @return compilation error file + */ + string getCompErrFile(); + + /** + * Remove file + * @param file filename to remove + * @param notRemovedFiles list of files that couldn't get removed + */ + static void RemoveFile(string file, list& notRemovedFiles); + + +// Helper functions +private: + /** + * Converts a header file with given filename to an XML file + * (with same base filename and extension .xml). + * + * @param aAbsFilename filename to convert + * @param aVersion version string + * @return 0 if the conversion succeeded + * @exception Throw an exception on error + */ + int ConvertHToXML(string aAbsFilename, string aVersion); + + /** + * Reads in and parses an XML file with given filename. Set the + * pointer to the document root (DOM Tree root). + * + * @param aAbsFilename XML filename to parse + * @return 0 if the parse succeeded + */ + int ExtractDOMFromXML(const string& aAbsFilename); + + /** + * Dump macros file + * @param mdumpfile nacro dumpfile + * @param ifile + * @param headers list of headers + * @return 0 if success + */ + int DumpMacros(string mdumpfile, string ifile, vector& headers); + + /** + * Preprocess header file + * @param aAbsFilename filename to remove + * @param aVersion version name to parse + * @param aHeaders vector of headers to preprocess + * @return 0, if success + */ + int PreprocessH(string aAbsFilename, string aVersion, vector& aHeaders ); + + /** + * Opens header file as input, write findings to output file + * @param aFilename input filename + * @param aVersion version name to handle + * @return 0 if success + */ + int HandleExports(string aFilename, string aVersion); + + /** + * Replace exports + * @param line line to process from input file + * @param processedline line processed + * @return + */ + //int ReplaceExport(string line, string& processedline); + + /** + * Generate temporary CPP-file + * @param aFiles filename to remove + * @param aVersion + * @param aHeaders + * @return + */ + string generateTempCPPFile(const vector& aFiles, string aVersion, vector& aHeaders ); + + /** + * Get value of environment variable + * @param aEnvVarName variable to get + * @return value of the variable + * @exception throw axeption if the variable vaue isn't found + */ + char* getEnv(char* aEnvVarName); + + /** + * Append headers to file + * @param aHeaders reference to headerpaths + * @param aFile the header file which the path is taken from + */ + void AppendHeader( vector& aHeaders, string aFile ); + + /** + * Generate GCXML command for prepocessing + * @param currentDir current directory + * @param epocRoot epocroot directory + * @param inputFile to parser + * @param outputFile to parser + * @param aHeaders reference to headerpaths + * @return commandline string to start parser + */ + string GeneratePreprocessCmd(const string& currentDir,const string& epocRoot,const string& inputFile, + const string& outputFile, vector& aHeaders ); + + /** + * Generate GCXML command for prepocessing + * @param currentDir current directory + * @param epocRoot epocroot directory + * @param inputFile to parser + * @param outputFile to parser + * @return commandline string to start parser + */ + string GenerateCompilationCmd(const string& currentDir,const string& epocRoot,const string& inputFile, + const string& outputFile); + + /** + * Generate macro extraction command + * @param currentDir current directory + * @param epocRoot root directory of headers + * @param inputFile to parser + * @param outputFile to parser + * @param aHeaders reference to headerpaths + * @return commandline string to start parser + */ + string GenerateMacroExtract(const string& currentDir,const string& epocRoot,const string& inputFile,const string& outputFile, + vector& aHeaders ); + +// Instance variables +private: + //! File name for input + string iInputFilename; + + //! File name for output + string iOutputFilename; + + //! Path where the XML output goes + string iXMLOutputPath; + + //! EPOC root path + string iEpocRoot; + + //! Working file + string iOriginalFilename; + + //! String consisting of forced headers + string iForcedHeaders; + + //! Name of the temporary directory + string iTempDir; + + //! Name of the macrofile + string iMacroFilename; + + //! Compilation error text + string iCompErrFile; + + //! Pointer to DOMBuilder + XERCES_CPP_NAMESPACE_QUALIFIER DOMBuilder* iDOMParser; + + //! Pointer to DOMDocument + XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* iDOMDoc; + + //! Pointer to DOM root node + XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* iDOMRootElement; +}; +#endif