Modifications to the module system
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@961 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
300da52da5
commit
d66f561cfc
20 changed files with 561 additions and 571 deletions
92
Source/Modules/cppmodule.c
Normal file
92
Source/Modules/cppmodule.c
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
/* -----------------------------------------------------------------------------
|
||||
* cppmodule.c
|
||||
*
|
||||
* This module is responsible for running the SWIG preprocessor module.
|
||||
*
|
||||
* Author(s) : David Beazley (beazley@cs.uchicago.edu)
|
||||
*
|
||||
* Copyright (C) 1999-2000. The University of Chicago
|
||||
* See the file LICENSE for information on usage and redistribution.
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
#include "swig.h"
|
||||
#include "swigconfig.h"
|
||||
#include "preprocessor.h"
|
||||
|
||||
static int cpp_only = 0;
|
||||
|
||||
static const char *usage = "Preprocessor options:\n\
|
||||
-E - Run the preprocessor only\n\
|
||||
-Dmacro - Define a new macro\n\
|
||||
";
|
||||
|
||||
static
|
||||
int preprocessor_init(int argc, char **argv) {
|
||||
int i;
|
||||
/* Look for command line options */
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (argv[i]) {
|
||||
if (strcmp(argv[i],"-E") == 0) {
|
||||
cpp_only = 1;
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-c++") == 0) {
|
||||
Preprocessor_define("__cplusplus 1", 0);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strncmp(argv[i],"-D",2) == 0) {
|
||||
DOH *d = NewString(argv[i]+2);
|
||||
Replace(d,"="," ", DOH_REPLACE_ANY | DOH_REPLACE_FIRST);
|
||||
Preprocessor_define(d,0);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-includeall") == 0) {
|
||||
Preprocessor_include_all(1);
|
||||
Swig_mark_arg(i);
|
||||
} else if (strcmp(argv[i],"-help") == 0) {
|
||||
Printf(stderr,"%s",usage);
|
||||
Swig_mark_arg(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static
|
||||
DOH *preprocessor_run(DOH *node) {
|
||||
String *cpps, *data;
|
||||
DOH *result;
|
||||
|
||||
data = Getattr(node,"data");
|
||||
if (!data) {
|
||||
Printf(stderr,"SWIG: preprocessor error. no data.\n");
|
||||
Swig_exit(1);
|
||||
}
|
||||
|
||||
Preprocessor_define("SWIG 1", 0);
|
||||
Preprocessor_define("__STDC__ 1", 0);
|
||||
#ifdef MACSWIG
|
||||
Preprocessor_define("SWIGMAC 1", 0);
|
||||
#endif
|
||||
#ifdef SWIGWIN32
|
||||
Preprocessor_define("SWIGWIN32 1", 0);
|
||||
#endif
|
||||
|
||||
Seek(data,0, SEEK_SET);
|
||||
cpps = Preprocessor_parse(data);
|
||||
if (cpp_only) {
|
||||
Printf(stdout,"%s", cpps);
|
||||
return 0;
|
||||
}
|
||||
|
||||
result = NewHash();
|
||||
Settag(result,"swig:preprocess");
|
||||
Setfile(cpps,Getfile(data));
|
||||
Setline(cpps,Getline(data));
|
||||
Seek(cpps,0,SEEK_SET);
|
||||
Setattr(result,"data",cpps);
|
||||
Setattr(result,"last",node);
|
||||
return result;
|
||||
}
|
||||
|
||||
void preprocessormodule() {
|
||||
Swig_register_module("preprocessor","swig:input", preprocessor_init, preprocessor_run);
|
||||
Preprocessor_init();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue