apicompatanamdw/compatanalysercmd/headeranalyser/src/BBCFileUtils.h
author shrivatsa
Mon, 27 Sep 2010 14:51:17 +0530
changeset 12 a0eee409ff14
parent 0 638b9c697799
permissions -rw-r--r--
Updates to CompatibilityAnalyser - The Tool should now work with Symbian^4 - Some minor bug fixes related to Qt headers in the Symbian Platform
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     1
/*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     3
* All rights reserved.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     4
* This component and the accompanying materials are made available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     6
* which accompanies this distribution, and is available
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     8
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
     9
* Initial Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    11
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    12
* Contributors:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    13
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    14
* Description:  
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    15
*
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    16
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    17
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    18
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    19
#ifndef __BBC_FILE_UTILS_H__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#define __BBC_FILE_UTILS_H__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    21
#include "CmdGlobals.h"
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    22
#ifdef __WIN__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    23
#pragma warning(disable:4786)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    24
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    25
#include <vector>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <string>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
#include <map>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
#include <list>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
using namespace std;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    31
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    32
/**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    33
* Class includes file handling methods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
*/ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
class BBCFileUtils
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
{
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
    * Contructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
    * @param  basedir 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
    BBCFileUtils(string basedir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
    * Destructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
    ~BBCFileUtils();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
    * Gets all the filenames matching the given wildcard in a directory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
    * @param wildcard Search pattern for the files.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
    * @param aRelPath Search location.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
    * @return List of the filenames (pairs).
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
    list<pair<string, string> > getFilesInDir(string wildcard, string aRelPath);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
    * Gets all the filenames matching a file set in a directory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
    * @param fileset List of filenames to be searched.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
    * @param aRelPath Search location.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
    * @param aFoundfiles list of files found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
    * @return List of the filenames (pairs).
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
    list<pair<string, string> > getFilesInDir(list<pair<string, string> >& fileset, string aRelPath, list<pair<string, string> >& aFoundfiles);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
    * Calculates a quick but relatively unique fingerprint for a string.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
    * Used in tempfile name generation. Collisions may occur, but it's 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
    * not highly probable.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
    * @param str filename + version
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
    * @return hash value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
    static unsigned int quickHash(string str);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
    * Extract Filenames
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
    * Converts a ';' (semicolon) separated filename list to a string list.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    80
    * @param aFilenameList list of file names to search for
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    81
    * @return list pair of files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    82
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
    static list<pair<string, string> > extractFilenames(string aFilenameList);
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
    * Gets subdirectories in a directory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
    * @param aRelPath Relative path to the directory from where the subdirectories are searched.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
    * @param aExcludes Subdirectories to be excluded from the results
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
    * @return List of subdirectories found.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
    list<pair<string, string> > getDirsInDir(string aRelPath, list<pair<string, string> >& aExcludes);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
    * Trims the given filename string (changes ';' to ' ' [whitespace])
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
    * and prefixes each filename entry with the base directory name 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
    * (if required)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
    * @param aFilenameList String containing the filenames separated with ';'.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
    * @return String containing the trimmed filenames
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
    string trimFilenames(string aFilenameList);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
    * Checks if the given filename is valid.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
    * @param aFilename Name of the file to be checked.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
    * @return true, if the given string is a valid filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
    static bool isValidFilename(const string& aFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
    * Check if the given path is a valid directory.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   111
    * @param aPath Path to be checked
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   112
    * @return true, if the given string is a valid directory path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   113
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
    static bool isValidDirectory(const string& aPath);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
    * Set temporary directory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
    * @param aTempDir Temp directory name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
    void setTemp(const string& aTempDir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
    * Get full path name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
    * @param aPath Path to be parsed
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
    * @return Full path name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
    * @exception throws an exception if the path cannot be solved.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
    static string getFullPath(const string& aPath);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
    * Strips off the file extension
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
    * @param aFileName Whole name of the file
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
    * @return Filename without the extension
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
    static string  StripFilenameExtension(string aFileName);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
    * Strips off the path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
    * @param aAbsFilename Filename containing the path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
    * @return Path from the given filename
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
    static string StripPath(const string& aAbsFilename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
    // -- Support for multiple header directories -- Return type changed to list
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
    static list<pair<string, bool> > MergeDirs(const string& rootDir, const string& subDir);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
    static bool FileExists(const string& fileName);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
    * Function to read the compilation error output from a file and append to a string.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
    * @param filename Filename containing the error output
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
    * @return string having error output
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
    */     
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
	static string getCompilationError(string filename);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   155
	
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   156
	static string& TrimRight(string& s);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   157
    static string& TrimLeft(string& s);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
    static string& TrimAll(string& s);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
private:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
#ifdef __UNIX__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
    * Finds and return absolute path of the given relative path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
    * @param aRelPath path to check
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
    * @param aAbsPath returnned absolute path
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
    * @return true if absolute path is found
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
    static bool absolutePath(const string& aRelPath, string& aAbsPath);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
#endif
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
private:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
    //! count of files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
    int             iFileCount;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
    //! Vector of base/current files
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
    vector<string>  iFiles;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
    //! the whole path + wildcard given
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
    string          iWildcard;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
    //! base directory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
    string          iBaseDir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
    //! temporary directory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
    string          iTempDir;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
    //! Dump file (not used)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
    string          iDumpfile;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
    static map<string, bool> fileExistsCache;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   188
#endif