summaryrefslogtreecommitdiffstats
path: root/Source/cmSeparateArgumentsCommand.h
blob: 736f0662c616b45f4d759fb639a3464ad3ef4518 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*============================================================================
  CMake - Cross Platform Makefile Generator
  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium

  Distributed under the OSI-approved BSD License (the "License");
  see accompanying file Copyright.txt for details.

  This software is distributed WITHOUT ANY WARRANTY; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the License for more information.
============================================================================*/
#ifndef cmSeparateArgumentsCommand_h
#define cmSeparateArgumentsCommand_h

#include "cmCommand.h"

/** \class cmSeparateArgumentsCommand
 * \brief separate_arguments command
 *
 * cmSeparateArgumentsCommand implements the separate_arguments CMake command
 */
class cmSeparateArgumentsCommand : public cmCommand
{
public:
  /**
   * This is a virtual constructor for the command.
   */
  virtual cmCommand* Clone() 
    {
    return new cmSeparateArgumentsCommand;
    }

  /**
   * This is called when the command is first encountered in
   * the CMakeLists.txt file.
   */
  virtual bool InitialPass(std::vector<std::string> const& args,
                           cmExecutionStatus &status);

  /**
   * This determines if the command is invoked when in script mode.
   */
  virtual bool IsScriptable() { return true; }

  /**
   * The name of the command as specified in CMakeList.txt.
   */
  virtual const char* GetName() {return "separate_arguments";}
  
  /**
   * Succinct documentation.
   */
  virtual const char* GetTerseDocumentation() 
    {
    return 
      "Parse space-separated arguments into a semicolon-separated list.";
    }
  
  /**
   * More documentation.
   */
  virtual const char* GetFullDocumentation()
    {
    return
      "  separate_arguments(<var> <UNIX|WINDOWS>_COMMAND \"<args>\")\n"
      "Parses a unix- or windows-style command-line string \"<args>\" and "
      "stores a semicolon-separated list of the arguments in <var>.  "
      "The entire command line must be given in one \"<args>\" argument."
      "\n"
      "The UNIX_COMMAND mode separates arguments by unquoted whitespace.  "
      "It recognizes both single-quote and double-quote pairs.  "
      "A backslash escapes the next literal character (\\\" is \"); "
      "there are no special escapes (\\n is just n)."
      "\n"
      "The WINDOWS_COMMAND mode parses a windows command-line using the "
      "same syntax the runtime library uses to construct argv at startup.  "
      "It separates arguments by whitespace that is not double-quoted.  "
      "Backslashes are literal unless they precede double-quotes.  "
      "See the MSDN article \"Parsing C Command-Line Arguments\" for details."
      "\n"
      "  separate_arguments(VARIABLE)\n"
      "Convert the value of VARIABLE to a semi-colon separated list.  "
      "All spaces are replaced with ';'.  This helps with generating "
      "command lines.";
    }
  
  cmTypeMacro(cmSeparateArgumentsCommand, cmCommand);
};



#endif