PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Source/Modules/swigmain.cxx

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