testCommandLineArguments.cxx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*=========================================================================
  2. Program: KWSys - Kitware System Library
  3. Module: $RCSfile$
  4. Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved.
  5. See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even
  7. the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  8. PURPOSE. See the above copyright notices for more information.
  9. =========================================================================*/
  10. #include "kwsysPrivate.h"
  11. #include KWSYS_HEADER(CommandLineArguments.hxx)
  12. #include KWSYS_HEADER(ios/iostream)
  13. // Work-around CMake dependency scanning limitation. This must
  14. // duplicate the above list of headers.
  15. #if 0
  16. # include "CommandLineArguments.hxx.in"
  17. # include "kwsys_ios_iostream.h.in"
  18. #endif
  19. void* random_ptr = (void*)0x123;
  20. int argument(const char* arg, const char* value, void* call_data)
  21. {
  22. kwsys_ios::cout << "Got argument: \"" << arg << "\" value: \"" << (value?value:"(null)") << "\"" << kwsys_ios::endl;
  23. if ( call_data != random_ptr )
  24. {
  25. kwsys_ios::cerr << "Problem processing call_data" << kwsys_ios::endl;
  26. return 0;
  27. }
  28. return 1;
  29. }
  30. int unknown_argument(const char* argument, void* call_data)
  31. {
  32. kwsys_ios::cout << "Got unknown argument: \"" << argument << "\"" << kwsys_ios::endl;
  33. if ( call_data != random_ptr )
  34. {
  35. kwsys_ios::cerr << "Problem processing call_data" << kwsys_ios::endl;
  36. return 0;
  37. }
  38. return 1;
  39. }
  40. int main(int argc, char* argv[])
  41. {
  42. // Example run: ./testCommandLineArguments --some-int-variable 4
  43. // --another-bool-variable --some-bool-variable=yes
  44. // --some-stl-string-variable=foobar --set-bool-arg1 --set-bool-arg2
  45. // --some-string-variable=hello
  46. int res = 0;
  47. kwsys::CommandLineArguments arg;
  48. arg.Initialize(argc, argv);
  49. // For error handling
  50. arg.SetClientData(random_ptr);
  51. arg.SetUnknownArgumentCallback(unknown_argument);
  52. int some_int_variable = 10;
  53. double some_double_variable = 10.10;
  54. char* some_string_variable = 0;
  55. kwsys_stl::string some_stl_string_variable = "";
  56. bool some_bool_variable = false;
  57. bool some_bool_variable1 = false;
  58. bool bool_arg1 = false;
  59. int bool_arg2 = 0;
  60. typedef kwsys::CommandLineArguments argT;
  61. arg.AddArgument("--some-int-variable", argT::SPACE_ARGUMENT, &some_int_variable, "Set some random int variable");
  62. arg.AddArgument("--some-double-variable", argT::CONCAT_ARGUMENT, &some_double_variable, "Set some random double variable");
  63. arg.AddArgument("--some-string-variable", argT::EQUAL_ARGUMENT, &some_string_variable, "Set some random string variable");
  64. arg.AddArgument("--some-stl-string-variable", argT::EQUAL_ARGUMENT, &some_stl_string_variable, "Set some random stl string variable");
  65. arg.AddArgument("--some-bool-variable", argT::EQUAL_ARGUMENT, &some_bool_variable, "Set some random bool variable");
  66. arg.AddArgument("--another-bool-variable", argT::NO_ARGUMENT, &some_bool_variable1, "Set some random bool variable 1");
  67. arg.AddBooleanArgument("--set-bool-arg1", &bool_arg1, "Test AddBooleanArgument 1");
  68. arg.AddBooleanArgument("--set-bool-arg2", &bool_arg2, "Test AddBooleanArgument 2");
  69. arg.AddCallback("-A", argT::NO_ARGUMENT, argument, random_ptr, "Some option -A. This option has a multiline comment. It should demonstrate how the code splits lines.");
  70. arg.AddCallback("-B", argT::SPACE_ARGUMENT, argument, random_ptr, "Option -B takes argument with space");
  71. arg.AddCallback("-C", argT::EQUAL_ARGUMENT, argument, random_ptr, "Option -C takes argument after =");
  72. arg.AddCallback("-D", argT::CONCAT_ARGUMENT, argument, random_ptr, "This option takes concatinated argument");
  73. arg.AddCallback("--long1", argT::NO_ARGUMENT, argument, random_ptr, "-A");
  74. arg.AddCallback("--long2", argT::SPACE_ARGUMENT, argument, random_ptr, "-B");
  75. arg.AddCallback("--long3", argT::EQUAL_ARGUMENT, argument, random_ptr, "Same as -C but a bit different");
  76. arg.AddCallback("--long4", argT::CONCAT_ARGUMENT, argument, random_ptr, "-C");
  77. if ( !arg.Parse() )
  78. {
  79. kwsys_ios::cerr << "Problem parsing arguments" << kwsys_ios::endl;
  80. res = 1;
  81. }
  82. kwsys_ios::cout << "Help: " << arg.GetHelp() << kwsys_ios::endl;
  83. kwsys_ios::cout << "Some int variable was set to: " << some_int_variable << kwsys_ios::endl;
  84. kwsys_ios::cout << "Some double variable was set to: " << some_double_variable << kwsys_ios::endl;
  85. if ( some_string_variable )
  86. {
  87. kwsys_ios::cout << "Some string variable was set to: " << some_string_variable << kwsys_ios::endl;
  88. delete [] some_string_variable;
  89. }
  90. else
  91. {
  92. kwsys_ios::cerr << "Problem setting string variable" << kwsys_ios::endl;
  93. res = 1;
  94. }
  95. kwsys_ios::cout << "Some STL String variable was set to: " << some_stl_string_variable.c_str() << kwsys_ios::endl;
  96. kwsys_ios::cout << "Some bool variable was set to: " << some_bool_variable << kwsys_ios::endl;
  97. kwsys_ios::cout << "Some bool variable was set to: " << some_bool_variable1 << kwsys_ios::endl;
  98. kwsys_ios::cout << "bool_arg1 variable was set to: " << bool_arg1 << kwsys_ios::endl;
  99. kwsys_ios::cout << "bool_arg2 variable was set to: " << bool_arg2 << kwsys_ios::endl;
  100. kwsys_ios::cout << kwsys_ios::endl;
  101. return res;
  102. }