/tags/rel-1-3-30rc1-b4beautify/SWIG/Source/Modules/swigmain.cxx
# · C++ · 205 lines · 154 code · 22 blank · 29 comment · 39 complexity · 5538a42e9c3edb7396ea6024e565654c MD5 · raw file
- /* -----------------------------------------------------------------------------
- * See the LICENSE file for information on copyright, usage and redistribution
- * of SWIG, and the README file for authors - http://www.swig.org/release.html.
- *
- * Simplified Wrapper and Interface Generator (SWIG)
- *
- * swigmain.cxx
- *
- * This file is the main entry point to SWIG. It collects the command
- * line options, registers built-in language modules, and instantiates
- * a module for code generation. If adding new language modules
- * to SWIG, you would modify this file.
- * ----------------------------------------------------------------------------- */
- char cvsroot_swigmain_cxx[] = "$Header$";
- #include "swigmod.h"
- #include <ctype.h>
- /* Module factories. These functions are used to instantiate
- the built-in language modules. If adding a new language
- module to SWIG, place a similar function here. Make sure
- the function has "C" linkage. This is required so that modules
- can be dynamically loaded in future versions. */
- extern "C" {
- Language *swig_tcl(void);
- Language *swig_python(void);
- Language *swig_perl5(void);
- Language *swig_ruby(void);
- Language *swig_guile(void);
- Language *swig_modula3(void);
- Language *swig_mzscheme(void);
- Language *swig_java(void);
- Language *swig_php4(void);
- Language *swig_php5(void);
- Language *swig_ocaml(void);
- Language *swig_pike(void);
- Language *swig_sexp(void);
- Language *swig_xml(void);
- Language *swig_chicken(void);
- Language *swig_csharp(void);
- Language *swig_allegrocl(void);
- Language *swig_lua(void);
- Language *swig_clisp(void);
- Language *swig_cffi(void);
- Language *swig_uffi(void);
- Language *swig_r(void);
- }
- struct swig_module {
- const char *name;
- ModuleFactory fac;
- const char *help;
- };
- /* Association of command line options to language modules.
- Place an entry for new language modules here, keeping the
- list sorted alphabetically. */
- static swig_module modules[] = {
- {"-allegrocl", swig_allegrocl, "ALLEGROCL"},
- {"-chicken", swig_chicken, "CHICKEN"},
- {"-clisp", swig_clisp, "CLISP"},
- {"-cffi", swig_cffi, "CFFI"},
- {"-csharp", swig_csharp, "C#"},
- {"-guile", swig_guile, "Guile"},
- {"-java", swig_java, "Java"},
- {"-lua", swig_lua, "Lua"},
- {"-modula3", swig_modula3, "Modula 3"},
- {"-mzscheme", swig_mzscheme, "Mzscheme"},
- {"-ocaml", swig_ocaml, "Ocaml"},
- {"-perl", swig_perl5, "Perl"},
- {"-perl5", swig_perl5, 0},
- {"-php", swig_php4, 0},
- {"-php4", swig_php4, "PHP4"},
- {"-php5", swig_php5, "PHP5"},
- {"-pike", swig_pike, "Pike"},
- {"-python", swig_python, "Python"},
- {"-ruby", swig_ruby, "Ruby"},
- {"-sexp", swig_sexp, "Lisp S-Expressions"},
- {"-tcl", swig_tcl, "Tcl"},
- {"-tcl8", swig_tcl, 0},
- {"-uffi", swig_uffi, "Common Lisp / UFFI"},
- {"-xml", swig_xml, "XML"},
- {"-r", swig_r, "R (aka GNU S)"},
- {NULL, NULL, NULL}
- };
- #ifdef MACSWIG
- #include <console.h>
- #include <SIOUX.h>
- #endif
- #ifndef SWIG_LANG
- #define SWIG_LANG "-python"
- #endif
- //-----------------------------------------------------------------
- // main()
- //
- // Main program. Initializes the files and starts the parser.
- //-----------------------------------------------------------------
- void SWIG_merge_envopt(const char *env, int oargc, char *oargv[],
- int *nargc, char ***nargv)
- {
- if (!env) {
- *nargc = oargc;
- *nargv = oargv;
- return;
- }
- int argc = 1;
- int arge = oargc + 1024;
- char **argv = (char **) malloc(sizeof(char*)*(arge));
- char *buffer = (char*) malloc(2048);
- char *b = buffer;
- char *be = b + 1023;
- const char *c = env;
- while ((b != be) && *c && (argc < arge)) {
- while (isspace(*c) && *c) ++c;
- if (*c) {
- argv[argc] = b;
- ++argc;
- }
- while ((b != be) && *c && !isspace(*c)) {
- *(b++) = *(c++);
- }
- *b++ = 0;
- }
- argv[0] = oargv[0];
- for (int i = 1; (i < oargc) && (argc < arge); ++i, ++argc) {
- argv[argc] = oargv[i];
- }
- *nargc = argc;
- *nargv = argv;
- }
- int main(int margc, char **margv) {
- int i;
- Language *dl = 0;
- ModuleFactory fac = 0;
- int argc;
- char **argv;
- SWIG_merge_envopt(getenv("SWIG_FEATURES"), margc, margv, &argc, &argv);
- #ifdef MACSWIG
- SIOUXSettings.asktosaveonclose = false;
- argc = ccommand(&argv);
- #endif
- /* Register built-in modules */
- for (i = 0; modules[i].name; i++) {
- Swig_register_module(modules[i].name, modules[i].fac);
- }
- Swig_init_args(argc,argv);
- /* Get options */
- for (i = 1; i < argc; i++) {
- if (argv[i]) {
- fac = Swig_find_module(argv[i]);
- if (fac) {
- dl = (fac)();
- Swig_mark_arg(i);
- } else if (strcmp(argv[i],"-nolang") == 0) {
- dl = new Language;
- Swig_mark_arg(i);
- } else if ((strcmp(argv[i],"-dnone") == 0) ||
- (strcmp(argv[i],"-dhtml") == 0) ||
- (strcmp(argv[i],"-dlatex") == 0) ||
- (strcmp(argv[i],"-dascii") == 0) ||
- (strcmp(argv[i],"-stat") == 0))
- {
- Printf(stderr,"swig: Warning. %s option deprecated.\n",argv[i]);
- Swig_mark_arg(i);
- } else if ((strcmp(argv[i],"-help") == 0) || (strcmp(argv[i],"--help") == 0)) {
- if (strcmp(argv[i],"--help") == 0)
- strcpy(argv[i], "-help");
- Printf(stdout,"Target Language Options\n");
- for (int j = 0; modules[j].name; j++) {
- if (modules[j].help) {
- Printf(stdout," %-15s - Generate %s wrappers\n", modules[j].name, modules[j].help);
- }
- }
- // Swig_mark_arg not called as the general -help options also need to be displayed later on
- }
- }
- }
- if (!dl) {
- fac = Swig_find_module(SWIG_LANG);
- if (fac) {
- dl = (fac)();
- }
- }
- int res = SWIG_main(argc,argv,dl);
- delete dl;
- return res;
- }