/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