Add support for the -external-runtime argument and update all language modules to use it
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6993 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
6c63b1c5b9
commit
ef58056ffd
18 changed files with 233 additions and 46 deletions
|
|
@ -93,6 +93,9 @@ protected:
|
|||
|
||||
String *chickenNameMapping(String *, String_or_char *);
|
||||
String *chickenPrimitiveName(String *);
|
||||
|
||||
String *runtimeCode();
|
||||
String *defaultExternalRuntimeFilename();
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------
|
||||
|
|
@ -1329,3 +1332,15 @@ CHICKEN::validIdentifier(String *s)
|
|||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
String *CHICKEN::runtimeCode() {
|
||||
String *s = Swig_include_sys("chickenrun.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'chickenrun.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
}
|
||||
|
||||
String *CHICKEN::defaultExternalRuntimeFilename() {
|
||||
return NewString("swigchickenrun.h");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1772,6 +1772,32 @@ public:
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
String *runtimeCode() {
|
||||
String *s;
|
||||
if (use_scm_interface) {
|
||||
s = Swig_include_sys("guile_scm_run.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'guile_scm_run.swg");
|
||||
s = NewString("");
|
||||
}
|
||||
} else {
|
||||
s = Swig_include_sys("guile_gh_run.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'guile_gh_run.swg");
|
||||
s = NewString("");
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
String *defaultExternalRuntimeFilename() {
|
||||
if (use_scm_interface) {
|
||||
return NewString("swigguilerun.h");
|
||||
} else {
|
||||
return NewString("swigguileghrun.h");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -2915,3 +2915,11 @@ int Language::is_assignable(Node *n)
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
String *Language::runtimeCode() {
|
||||
return NewString("");
|
||||
}
|
||||
|
||||
String *Language::defaultExternalRuntimeFilename() {
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,6 +128,8 @@ static DOH *libfiles = 0;
|
|||
static DOH *cpps = 0 ;
|
||||
static String *dependencies_file = 0;
|
||||
static File *f_dependencies_file = 0;
|
||||
static int external_runtime = 0;
|
||||
static String *external_runtime_name = 0;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// check_suffix(char *name)
|
||||
|
|
@ -269,6 +271,56 @@ void SWIG_getfeatures(const char *c)
|
|||
Delete(name);
|
||||
}
|
||||
|
||||
/* This function handles the -external-runtime command option */
|
||||
static void SWIG_dump_runtime() {
|
||||
String *outfile;
|
||||
File *runtime;
|
||||
String *s;
|
||||
|
||||
outfile = external_runtime_name;
|
||||
if (!outfile) {
|
||||
outfile = lang->defaultExternalRuntimeFilename();
|
||||
if (!outfile) {
|
||||
Printf(stderr, "*** Please provide a filename for the external runtime\n");
|
||||
SWIG_exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
runtime = NewFile(outfile, "w");
|
||||
if (!runtime) {
|
||||
Printf(stderr, "*** Unable to open '%s'\n", outfile);
|
||||
Close(runtime);
|
||||
SWIG_exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
Swig_banner(runtime);
|
||||
|
||||
s = Swig_include_sys("swigrun.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'swigrun.swg'\n");
|
||||
Close(runtime);
|
||||
SWIG_exit(EXIT_FAILURE);
|
||||
}
|
||||
Printf(runtime, "%s", s);
|
||||
Delete(s);
|
||||
|
||||
s = lang->runtimeCode();
|
||||
Printf(runtime, "%s", s);
|
||||
Delete(s);
|
||||
|
||||
s = Swig_include_sys("runtime.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'runtime.swg'\n");
|
||||
Close(runtime);
|
||||
SWIG_exit(EXIT_FAILURE);
|
||||
}
|
||||
Printf(runtime, "%s", s);
|
||||
Delete(s);
|
||||
|
||||
Close(runtime);
|
||||
SWIG_exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
void SWIG_getoptions(int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
|
|
@ -341,6 +393,14 @@ void SWIG_getoptions(int argc, char *argv[])
|
|||
Swig_mark_arg(i);
|
||||
Swig_warning(WARN_DEPRECATED_OPTC, "SWIG",1, "-c, -runtime, -noruntime command line options are deprecated.\n");
|
||||
SwigRuntime = 2;
|
||||
} else if (strcmp(argv[i], "-external-runtime") == 0) {
|
||||
external_runtime = 1;
|
||||
Swig_mark_arg(i);
|
||||
if (argv[i+1]) {
|
||||
external_runtime_name = NewString(argv[i+1]);
|
||||
Swig_mark_arg(i+1);
|
||||
i++;
|
||||
}
|
||||
} else if ((strcmp(argv[i],"-make_default") == 0) || (strcmp(argv[i],"-makedefault") == 0)) {
|
||||
GenerateDefault = 1;
|
||||
Swig_mark_arg(i);
|
||||
|
|
@ -645,7 +705,8 @@ int SWIG_main(int argc, char *argv[], Language *l) {
|
|||
}
|
||||
|
||||
// Check all of the options to make sure we're cool.
|
||||
Swig_check_options();
|
||||
// Don't check for an input file if -external-runtime is passed
|
||||
Swig_check_options(external_runtime ? 0 : 1);
|
||||
|
||||
install_opts(argc, argv);
|
||||
|
||||
|
|
@ -674,6 +735,10 @@ int SWIG_main(int argc, char *argv[], Language *l) {
|
|||
}
|
||||
}
|
||||
|
||||
// handle the -external-runtime argument
|
||||
if (external_runtime)
|
||||
SWIG_dump_runtime();
|
||||
|
||||
// If we made it this far, looks good. go for it....
|
||||
|
||||
input_file = argv[argc-1];
|
||||
|
|
|
|||
|
|
@ -798,6 +798,19 @@ public:
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
String *runtimeCode() {
|
||||
String *s = Swig_include_sys("mzrun.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'mzrun.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
String *defaultExternalRuntimeFilename() {
|
||||
return NewString("swigmzrun.h");
|
||||
}
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1931,6 +1931,19 @@ public:
|
|||
}
|
||||
return SWIG_OK;
|
||||
}
|
||||
|
||||
String *runtimeCode() {
|
||||
String *s = Swig_include_sys("ocaml.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'ocaml.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
String *defaultExternalRuntimeFilename() {
|
||||
return NewString("swigocamlrun.h");
|
||||
}
|
||||
};
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1527,6 +1527,19 @@ public:
|
|||
}
|
||||
return SWIG_OK;
|
||||
}
|
||||
|
||||
String *runtimeCode() {
|
||||
String *s = Swig_include_sys("perlrun.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'perlrun.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
String *defaultExternalRuntimeFilename() {
|
||||
return NewString("swigperlrun.h");
|
||||
}
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -2470,6 +2470,20 @@ public:
|
|||
}
|
||||
return SWIG_OK;
|
||||
}
|
||||
|
||||
virtual String *runtimeCode() {
|
||||
String *s = Swig_include_sys("pyrun.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'pyrun.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
virtual String *defaultExternalRuntimeFilename() {
|
||||
return NewString("swigpyrun.h");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -2470,6 +2470,19 @@ public:
|
|||
p = nextSibling(p);
|
||||
}
|
||||
}
|
||||
|
||||
String *runtimeCode() {
|
||||
String *s = Swig_include_sys("rubydef.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'rubydef.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
String *defaultExternalRuntimeFilename() {
|
||||
return NewString("swigrubyrun.h");
|
||||
}
|
||||
}; /* class RUBY */
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -224,6 +224,8 @@ public:
|
|||
virtual Node *enumLookup(SwigType *s); /* Enum lookup */
|
||||
virtual int abstractClassTest(Node *n); /* Is class really abstract? */
|
||||
virtual int is_assignable(Node *n); /* Is variable assignable? */
|
||||
virtual String *runtimeCode(); /* returns the language specific runtime code */
|
||||
virtual String *defaultExternalRuntimeFilename(); /* the default filename for the external runtime */
|
||||
|
||||
/* Allow director related code generation */
|
||||
void allow_directors(int val = 1);
|
||||
|
|
|
|||
|
|
@ -1219,6 +1219,19 @@ public:
|
|||
}
|
||||
return Char(temp);
|
||||
}
|
||||
|
||||
String *runtimeCode() {
|
||||
String *s = Swig_include_sys("swigtcl8.swg");
|
||||
if (!s) {
|
||||
Printf(stderr, "*** Unable to open 'swigtcl8.swg'\n");
|
||||
s = NewString("");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
String *defaultExternalRuntimeFilename() {
|
||||
return NewString("swigtclrun.h");
|
||||
}
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -79,11 +79,12 @@ Swig_check_marked(int n) {
|
|||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
Swig_check_options() {
|
||||
Swig_check_options(int check_input) {
|
||||
int error = 0;
|
||||
int i;
|
||||
int max = check_input ? numargs - 1 : numargs;
|
||||
assert(marked);
|
||||
for (i = 1; i < numargs-1; i++) {
|
||||
for (i = 1; i < max; i++) {
|
||||
if (!marked[i]) {
|
||||
Printf(stderr,"swig error : Unrecognized option %s\n", args[i]);
|
||||
error=1;
|
||||
|
|
@ -93,7 +94,7 @@ Swig_check_options() {
|
|||
Printf(stderr,"Use 'swig -help' for available options.\n");
|
||||
exit(1);
|
||||
}
|
||||
if (marked[numargs-1]) {
|
||||
if (check_input && marked[numargs-1]) {
|
||||
Printf(stderr,"Must specify an input file. Use -help for available options.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ extern char *Swig_file_dirname(const String_or_char *filename);
|
|||
extern void Swig_init_args(int argc, char **argv);
|
||||
extern void Swig_mark_arg(int n);
|
||||
extern int Swig_check_marked(int n);
|
||||
extern void Swig_check_options();
|
||||
extern void Swig_check_options(int check_input);
|
||||
extern void Swig_arg_error();
|
||||
|
||||
/* --- Scanner Interface --- */
|
||||
|
|
|
|||
|
|
@ -723,7 +723,7 @@ extern DOH *Swig_include(DOH *name);
|
|||
|
||||
extern void Swig_init_args(int argc, char **argv);
|
||||
extern void Swig_mark_arg(int n);
|
||||
extern void Swig_check_options();
|
||||
extern void Swig_check_options(int check_input);
|
||||
extern void Swig_arg_error();
|
||||
|
||||
%section "Miscelaneous", after
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue