PageRenderTime 44ms CodeModel.GetById 23ms app.highlight 18ms 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
 15char cvsroot_swigmain_cxx[] = "$Header$";
 16
 17#include "swigmod.h"
 18#include <ctype.h>
 19
 20/* Module factories.  These functions are used to instantiate
 21   the built-in language modules.    If adding a new language
 22   module to SWIG, place a similar function here. Make sure
 23   the function has "C" linkage.  This is required so that modules
 24   can be dynamically loaded in future versions. */
 25
 26extern "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_php4(void);
 36  Language *swig_php5(void);
 37  Language *swig_ocaml(void);
 38  Language *swig_pike(void);
 39  Language *swig_sexp(void);
 40  Language *swig_xml(void);
 41  Language *swig_chicken(void);
 42  Language *swig_csharp(void);
 43  Language *swig_allegrocl(void);
 44  Language *swig_lua(void);
 45  Language *swig_clisp(void);
 46  Language *swig_cffi(void);
 47  Language *swig_uffi(void);
 48  Language *swig_r(void);
 49}
 50
 51struct swig_module {
 52  const char     *name;
 53  ModuleFactory   fac;
 54  const char      *help;
 55};
 56
 57/* Association of command line options to language modules.
 58   Place an entry for new language modules here, keeping the
 59   list sorted alphabetically. */
 60
 61static 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  {"-guile",     swig_guile,     "Guile"},
 68  {"-java",      swig_java,      "Java"},
 69  {"-lua",       swig_lua,       "Lua"},
 70  {"-modula3",   swig_modula3,   "Modula 3"},
 71  {"-mzscheme",  swig_mzscheme,  "Mzscheme"},
 72  {"-ocaml",     swig_ocaml,     "Ocaml"},
 73  {"-perl",      swig_perl5,     "Perl"},
 74  {"-perl5",     swig_perl5, 0},
 75  {"-php",       swig_php4, 0},
 76  {"-php4",      swig_php4,      "PHP4"},
 77  {"-php5",      swig_php5,      "PHP5"},
 78  {"-pike",      swig_pike,      "Pike"},
 79  {"-python",    swig_python,    "Python"},
 80  {"-ruby",      swig_ruby,      "Ruby"},
 81  {"-sexp",      swig_sexp,      "Lisp S-Expressions"},
 82  {"-tcl",       swig_tcl,       "Tcl"},
 83  {"-tcl8",      swig_tcl, 0},
 84  {"-uffi",      swig_uffi,      "Common Lisp / UFFI"},
 85  {"-xml",       swig_xml,       "XML"},
 86  {"-r",         swig_r,         "R (aka GNU S)"},
 87  {NULL, NULL, NULL}
 88};
 89
 90#ifdef MACSWIG
 91#include <console.h>
 92#include <SIOUX.h>
 93#endif
 94
 95#ifndef SWIG_LANG
 96#define SWIG_LANG "-python"
 97#endif
 98
 99//-----------------------------------------------------------------
100// main()
101//
102// Main program.    Initializes the files and starts the parser.
103//-----------------------------------------------------------------
104
105void SWIG_merge_envopt(const char *env, int oargc, char *oargv[],
106		       int *nargc, char ***nargv)
107{
108  if (!env) {
109    *nargc = oargc;
110    *nargv = oargv;
111    return;
112  }
113
114  int argc = 1;
115  int arge = oargc + 1024;
116  char **argv = (char **) malloc(sizeof(char*)*(arge));
117  char *buffer = (char*)  malloc(2048);
118  char *b = buffer;
119  char *be = b + 1023;
120  const char *c = env;
121  while ((b != be) && *c && (argc < arge)) {
122    while (isspace(*c) && *c) ++c;
123    if (*c) {
124      argv[argc] = b;
125      ++argc;
126    }
127    while ((b != be) && *c && !isspace(*c)) {
128      *(b++) = *(c++);
129    }
130    *b++ = 0;
131  }
132
133  argv[0] = oargv[0];
134  for (int i = 1; (i < oargc) && (argc < arge); ++i, ++argc) {
135    argv[argc] = oargv[i];
136  }
137
138  *nargc = argc;
139  *nargv = argv;
140}
141
142int main(int margc, char **margv) {
143  int i;
144  Language *dl = 0;
145  ModuleFactory fac = 0;
146
147  int argc;
148  char **argv;
149
150  SWIG_merge_envopt(getenv("SWIG_FEATURES"), margc, margv, &argc, &argv);
151
152#ifdef MACSWIG
153  SIOUXSettings.asktosaveonclose = false;
154  argc = ccommand(&argv);
155#endif
156
157  /* Register built-in modules */
158  for (i = 0; modules[i].name; i++) {
159    Swig_register_module(modules[i].name, modules[i].fac);
160  }
161
162  Swig_init_args(argc,argv);
163
164  /* Get options */
165  for (i = 1; i < argc; i++) {
166    if (argv[i]) {
167      fac = Swig_find_module(argv[i]);
168      if (fac) {
169	dl = (fac)();
170	Swig_mark_arg(i);
171      } else if (strcmp(argv[i],"-nolang") == 0) {
172	dl = new Language;
173	Swig_mark_arg(i);
174      } else if ((strcmp(argv[i],"-dnone") == 0) ||
175		 (strcmp(argv[i],"-dhtml") == 0) ||
176		 (strcmp(argv[i],"-dlatex") == 0) ||
177		 (strcmp(argv[i],"-dascii") == 0) ||
178		 (strcmp(argv[i],"-stat") == 0))
179      {
180	Printf(stderr,"swig: Warning. %s option deprecated.\n",argv[i]);
181	Swig_mark_arg(i);
182      } else if ((strcmp(argv[i],"-help") == 0) || (strcmp(argv[i],"--help") == 0)) {
183        if (strcmp(argv[i],"--help") == 0)
184	  strcpy(argv[i], "-help");
185	Printf(stdout,"Target Language Options\n");
186	for (int j = 0; modules[j].name; j++) {
187	  if (modules[j].help) {
188	    Printf(stdout,"     %-15s - Generate %s wrappers\n", modules[j].name, modules[j].help);
189	  }
190	}
191	// Swig_mark_arg not called as the general -help options also need to be displayed later on
192      }
193    }
194  }
195  if (!dl) {
196    fac = Swig_find_module(SWIG_LANG);
197    if (fac) {
198      dl = (fac)();
199    }
200  }
201  int res = SWIG_main(argc,argv,dl);
202  delete dl;
203  return res;  
204}
205