PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/tags/Root-branch-php-utl/SWIG/Source/Modules/swigmain.cxx

#
C++ | 205 lines | 154 code | 22 blank | 29 comment | 39 complexity | 5538a42e9c3edb7396ea6024e565654c MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* -----------------------------------------------------------------------------
  2. * See the LICENSE file for information on copyright, usage and redistribution
  3. * of SWIG, and the README file for authors - http://www.swig.org/release.html.
  4. *
  5. * Simplified Wrapper and Interface Generator (SWIG)
  6. *
  7. * swigmain.cxx
  8. *
  9. * This file is the main entry point to SWIG. It collects the command
  10. * line options, registers built-in language modules, and instantiates
  11. * a module for code generation. If adding new language modules
  12. * to SWIG, you would modify this file.
  13. * ----------------------------------------------------------------------------- */
  14. char cvsroot_swigmain_cxx[] = "$Header$";
  15. #include "swigmod.h"
  16. #include <ctype.h>
  17. /* Module factories. These functions are used to instantiate
  18. the built-in language modules. If adding a new language
  19. module to SWIG, place a similar function here. Make sure
  20. the function has "C" linkage. This is required so that modules
  21. can be dynamically loaded in future versions. */
  22. extern "C" {
  23. Language *swig_tcl(void);
  24. Language *swig_python(void);
  25. Language *swig_perl5(void);
  26. Language *swig_ruby(void);
  27. Language *swig_guile(void);
  28. Language *swig_modula3(void);
  29. Language *swig_mzscheme(void);
  30. Language *swig_java(void);
  31. Language *swig_php4(void);
  32. Language *swig_php5(void);
  33. Language *swig_ocaml(void);
  34. Language *swig_pike(void);
  35. Language *swig_sexp(void);
  36. Language *swig_xml(void);
  37. Language *swig_chicken(void);
  38. Language *swig_csharp(void);
  39. Language *swig_allegrocl(void);
  40. Language *swig_lua(void);
  41. Language *swig_clisp(void);
  42. Language *swig_cffi(void);
  43. Language *swig_uffi(void);
  44. Language *swig_r(void);
  45. }
  46. struct swig_module {
  47. const char *name;
  48. ModuleFactory fac;
  49. const char *help;
  50. };
  51. /* Association of command line options to language modules.
  52. Place an entry for new language modules here, keeping the
  53. list sorted alphabetically. */
  54. static swig_module modules[] = {
  55. {"-allegrocl", swig_allegrocl, "ALLEGROCL"},
  56. {"-chicken", swig_chicken, "CHICKEN"},
  57. {"-clisp", swig_clisp, "CLISP"},
  58. {"-cffi", swig_cffi, "CFFI"},
  59. {"-csharp", swig_csharp, "C#"},
  60. {"-guile", swig_guile, "Guile"},
  61. {"-java", swig_java, "Java"},
  62. {"-lua", swig_lua, "Lua"},
  63. {"-modula3", swig_modula3, "Modula 3"},
  64. {"-mzscheme", swig_mzscheme, "Mzscheme"},
  65. {"-ocaml", swig_ocaml, "Ocaml"},
  66. {"-perl", swig_perl5, "Perl"},
  67. {"-perl5", swig_perl5, 0},
  68. {"-php", swig_php4, 0},
  69. {"-php4", swig_php4, "PHP4"},
  70. {"-php5", swig_php5, "PHP5"},
  71. {"-pike", swig_pike, "Pike"},
  72. {"-python", swig_python, "Python"},
  73. {"-ruby", swig_ruby, "Ruby"},
  74. {"-sexp", swig_sexp, "Lisp S-Expressions"},
  75. {"-tcl", swig_tcl, "Tcl"},
  76. {"-tcl8", swig_tcl, 0},
  77. {"-uffi", swig_uffi, "Common Lisp / UFFI"},
  78. {"-xml", swig_xml, "XML"},
  79. {"-r", swig_r, "R (aka GNU S)"},
  80. {NULL, NULL, NULL}
  81. };
  82. #ifdef MACSWIG
  83. #include <console.h>
  84. #include <SIOUX.h>
  85. #endif
  86. #ifndef SWIG_LANG
  87. #define SWIG_LANG "-python"
  88. #endif
  89. //-----------------------------------------------------------------
  90. // main()
  91. //
  92. // Main program. Initializes the files and starts the parser.
  93. //-----------------------------------------------------------------
  94. void SWIG_merge_envopt(const char *env, int oargc, char *oargv[],
  95. int *nargc, char ***nargv)
  96. {
  97. if (!env) {
  98. *nargc = oargc;
  99. *nargv = oargv;
  100. return;
  101. }
  102. int argc = 1;
  103. int arge = oargc + 1024;
  104. char **argv = (char **) malloc(sizeof(char*)*(arge));
  105. char *buffer = (char*) malloc(2048);
  106. char *b = buffer;
  107. char *be = b + 1023;
  108. const char *c = env;
  109. while ((b != be) && *c && (argc < arge)) {
  110. while (isspace(*c) && *c) ++c;
  111. if (*c) {
  112. argv[argc] = b;
  113. ++argc;
  114. }
  115. while ((b != be) && *c && !isspace(*c)) {
  116. *(b++) = *(c++);
  117. }
  118. *b++ = 0;
  119. }
  120. argv[0] = oargv[0];
  121. for (int i = 1; (i < oargc) && (argc < arge); ++i, ++argc) {
  122. argv[argc] = oargv[i];
  123. }
  124. *nargc = argc;
  125. *nargv = argv;
  126. }
  127. int main(int margc, char **margv) {
  128. int i;
  129. Language *dl = 0;
  130. ModuleFactory fac = 0;
  131. int argc;
  132. char **argv;
  133. SWIG_merge_envopt(getenv("SWIG_FEATURES"), margc, margv, &argc, &argv);
  134. #ifdef MACSWIG
  135. SIOUXSettings.asktosaveonclose = false;
  136. argc = ccommand(&argv);
  137. #endif
  138. /* Register built-in modules */
  139. for (i = 0; modules[i].name; i++) {
  140. Swig_register_module(modules[i].name, modules[i].fac);
  141. }
  142. Swig_init_args(argc,argv);
  143. /* Get options */
  144. for (i = 1; i < argc; i++) {
  145. if (argv[i]) {
  146. fac = Swig_find_module(argv[i]);
  147. if (fac) {
  148. dl = (fac)();
  149. Swig_mark_arg(i);
  150. } else if (strcmp(argv[i],"-nolang") == 0) {
  151. dl = new Language;
  152. Swig_mark_arg(i);
  153. } else if ((strcmp(argv[i],"-dnone") == 0) ||
  154. (strcmp(argv[i],"-dhtml") == 0) ||
  155. (strcmp(argv[i],"-dlatex") == 0) ||
  156. (strcmp(argv[i],"-dascii") == 0) ||
  157. (strcmp(argv[i],"-stat") == 0))
  158. {
  159. Printf(stderr,"swig: Warning. %s option deprecated.\n",argv[i]);
  160. Swig_mark_arg(i);
  161. } else if ((strcmp(argv[i],"-help") == 0) || (strcmp(argv[i],"--help") == 0)) {
  162. if (strcmp(argv[i],"--help") == 0)
  163. strcpy(argv[i], "-help");
  164. Printf(stdout,"Target Language Options\n");
  165. for (int j = 0; modules[j].name; j++) {
  166. if (modules[j].help) {
  167. Printf(stdout," %-15s - Generate %s wrappers\n", modules[j].name, modules[j].help);
  168. }
  169. }
  170. // Swig_mark_arg not called as the general -help options also need to be displayed later on
  171. }
  172. }
  173. }
  174. if (!dl) {
  175. fac = Swig_find_module(SWIG_LANG);
  176. if (fac) {
  177. dl = (fac)();
  178. }
  179. }
  180. int res = SWIG_main(argc,argv,dl);
  181. delete dl;
  182. return res;
  183. }