--- /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 <xercesc/dom/DOM.hpp>
+#include <iostream>
+#include <list>
+#include <string>
+#include <vector>
+
+#include "CmdGlobals.h"
+
+using namespace std;
+
+typedef vector<string> 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<string>& aFilenames, string aVersion, string aPath, list<string>& 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<string>& 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<string>& 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<string>& 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<string>& aFiles, string aVersion, vector<string>& 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<string>& 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<string>& 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<string>& 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