apicompatanamdw/compatanalysercmd/headeranalyser/src/CommandLine.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) 2007-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 __COMMAND_LINE_H__
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    20
#define __COMMAND_LINE_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 <string>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    26
#include <map>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    27
#include <set>
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    28
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    29
using namespace std;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    30
typedef pair<string, string> mapentry;
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
* The class CommandLine handles the command line parsing and represents
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    34
* the options for the program in an easy way.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    35
*/
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    36
class CommandLine {
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    37
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    38
// constructors & destructors
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    39
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    40
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    41
    * Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    42
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    43
    CommandLine();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    44
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    45
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    46
    * Constructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    47
    * @param args commanline argument as pointer to string
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    48
    * @param argc argument count
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    49
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    50
    CommandLine(char** args, int argc);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    51
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    52
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    53
    * Destructor
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    54
    */
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    55
    ~CommandLine();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    56
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    57
// public methods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    58
public:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    59
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    60
    * Returns the parameter value for a given parameter.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    61
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    62
    * @param parm parameter to get
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    63
    * @return parameter value
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    64
    * @exception throw an exception if illegal parameter is requested.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    65
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    66
    string getParameter(string parm);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    67
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    68
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    69
    * Get parameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    70
    * @return map of parameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    71
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    72
    const map <string, string>& getParameters();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    73
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    74
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    75
    * Check if the asked parameter is given
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    76
    * @param parm parameter name
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    77
    * @return true if the asked parameter is given
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    78
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    79
    bool parameterExists(const string& parm);
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
    * Validate parameters. Returns a string containing mismatching/insufficiently
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    83
    * specified parameters if there are any mismatches. Otherwise returns a string 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    84
    * of zero length.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    85
    * @return error string consisting of invalid parameters.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    86
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    87
    string  validateParameters();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    88
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    89
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    90
    * Check if the given parameter value is valid
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    91
    * @param parm parameter to check
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    92
    * @param val parameter value to check
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    93
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    94
    void validParamValue(string parm, string val);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    95
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    96
// private methods
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    97
private:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    98
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
    99
    * Inserts a parameter into parameter validation lists.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   100
    * This is *NOT* the same as storeParameter, which stores
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   101
    * the actual parameter value of a command line parm.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   102
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   103
    * Parameter to be inserted can require a specifier/no 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   104
    * specifier, and can be optional/mandatory
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   105
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   106
    * @param parmname name of the paramter to insert
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   107
    * @param specifierRequired if required, this true
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   108
    * @param optional true if parameter is optional
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   109
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   110
    void insertParameter(string parmname, bool specifierRequired, bool optional = true);
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
    * Initialize  acceptable parameters list
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   114
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   115
    * Define which parameters are valid and which additionally require a string 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   116
    * after them (dir etc), and which are mandatory (ie. modal, ie. non-optional)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   117
    * Also assign the initial values for epocroot directories.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   118
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   119
    * See documentation for exact meaning of each parameter.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   120
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   121
    void initializeAcceptableParametersList();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   122
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   123
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   124
    * Stores a parameter. Actual functionality depends on parameter type
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   125
    * (was it a command-line parameter [overrides environmental variables and
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   126
    * command file variables], a command-file parameter [overrides environmental
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   127
    * variables] or an environmental variable)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   128
    * In other words, it's not possible for a command-file parameter or
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   129
    * an environment variable to replace any parameter that has been
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   130
    * specified on command-line; respectively, command-line argument
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   131
    * will always override any other type of argument, no matter where it
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   132
    * was earlier defined.
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   133
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   134
    * Throws an exception if no specifier is given to a parameter that
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   135
    * requires one (e.g. -baselinedir requires a specifier [directory],
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   136
    * whereas -recursive doesn't)
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   137
    *
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   138
    * @param parm parameter to store
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   139
    * @param val parameter value to store
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   140
    * @param parmtype commandline or commandfile
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   141
    * @exception an exeption is thrown if no specifier is given to a parameter 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   142
    * that requires one (e.g. -baselinedir requires a specifier [directory],
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   143
    * whereas -recursive doesn't) 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   144
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   145
    void storeParameter(string parm, string val, int parmtype = EParmCommandLine);
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   146
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   147
    /**
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   148
    * Parses the command line parameters and stores them to public instance 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   149
    * variables. 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   150
    * @param params list of params
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   151
    * @param count count params
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   152
    * @param parmtype defaulttype=EParmCommandLine
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   153
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   154
    void parse(char** params, size_t count, int parmtype = EParmCommandLine);
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
    * Show commandline options and exit programe
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   158
    * Not enough options are given, so options list is shown and 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   159
    * the program is exited
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   160
    */ 
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   161
    void showCommandLineOptionsAndExit();
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   162
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   163
// Private instance variables
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   164
private:
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   165
    //! All the parameters that the program accepts
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   166
    map <string, string>    iAcceptableParameterMap;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   167
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   168
    //! Map of parameters
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   169
    map <string, string>    iParameterMap;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   170
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   171
    //! These command line parameters require option
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   172
    set <string>            parameterSpecifierSet;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   173
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   174
    //! These command line parameters are required
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   175
    set <string>            requiredParametersSet;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   176
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   177
    //! True if the parameters are valid
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   178
    int                     iParametersValid;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   179
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   180
    //! Command line arguments
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   181
    char**                  iArgList;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   182
    
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   183
    //! Count of command line arguments
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   184
    int                     iArgCount;
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   185
};
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   186
638b9c697799 1. Licenses updated to EPL.
noe\swadi
parents:
diff changeset
   187
#endif