[C#] Single file mode
Added "-csout <path>" parameter. If supplied all generated C# code will be written to the given file. Makes it easier to integrate SWIG into automated script based build processes.
This commit is contained in:
parent
b8e1a66a38
commit
747e22f714
1 changed files with 73 additions and 66 deletions
|
|
@ -34,6 +34,7 @@ class CSHARP:public Language {
|
||||||
File *f_init;
|
File *f_init;
|
||||||
File *f_directors;
|
File *f_directors;
|
||||||
File *f_directors_h;
|
File *f_directors_h;
|
||||||
|
File *f_single;
|
||||||
List *filenames_list;
|
List *filenames_list;
|
||||||
|
|
||||||
bool proxy_flag; // Flag for generating proxy classes
|
bool proxy_flag; // Flag for generating proxy classes
|
||||||
|
|
@ -78,6 +79,7 @@ class CSHARP:public Language {
|
||||||
String *director_method_types; // Director method types
|
String *director_method_types; // Director method types
|
||||||
String *director_connect_parms; // Director delegates parameter list for director connect call
|
String *director_connect_parms; // Director delegates parameter list for director connect call
|
||||||
String *destructor_call; //C++ destructor call if any
|
String *destructor_call; //C++ destructor call if any
|
||||||
|
String *cs_out;
|
||||||
|
|
||||||
// Director method stuff:
|
// Director method stuff:
|
||||||
List *dmethods_seq;
|
List *dmethods_seq;
|
||||||
|
|
@ -108,6 +110,7 @@ public:
|
||||||
f_init(NULL),
|
f_init(NULL),
|
||||||
f_directors(NULL),
|
f_directors(NULL),
|
||||||
f_directors_h(NULL),
|
f_directors_h(NULL),
|
||||||
|
f_single(NULL),
|
||||||
filenames_list(NULL),
|
filenames_list(NULL),
|
||||||
proxy_flag(true),
|
proxy_flag(true),
|
||||||
native_function_flag(false),
|
native_function_flag(false),
|
||||||
|
|
@ -150,6 +153,7 @@ public:
|
||||||
director_method_types(NULL),
|
director_method_types(NULL),
|
||||||
director_connect_parms(NULL),
|
director_connect_parms(NULL),
|
||||||
destructor_call(NULL),
|
destructor_call(NULL),
|
||||||
|
cs_out(NULL),
|
||||||
dmethods_seq(NULL),
|
dmethods_seq(NULL),
|
||||||
dmethods_table(NULL),
|
dmethods_table(NULL),
|
||||||
n_dmethods(0),
|
n_dmethods(0),
|
||||||
|
|
@ -244,6 +248,16 @@ public:
|
||||||
} else if (strcmp(argv[i], "-oldvarnames") == 0) {
|
} else if (strcmp(argv[i], "-oldvarnames") == 0) {
|
||||||
Swig_mark_arg(i);
|
Swig_mark_arg(i);
|
||||||
old_variable_names = true;
|
old_variable_names = true;
|
||||||
|
} else if (strcmp(argv[i], "-csout") == 0) {
|
||||||
|
if (argv[i + 1]) {
|
||||||
|
cs_out = NewString("");
|
||||||
|
Printf(cs_out, argv[i + 1]);
|
||||||
|
Swig_mark_arg(i);
|
||||||
|
Swig_mark_arg(i + 1);
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
Swig_arg_error();
|
||||||
|
}
|
||||||
} else if (strcmp(argv[i], "-help") == 0) {
|
} else if (strcmp(argv[i], "-help") == 0) {
|
||||||
Printf(stdout, "%s\n", usage);
|
Printf(stdout, "%s\n", usage);
|
||||||
}
|
}
|
||||||
|
|
@ -423,18 +437,7 @@ public:
|
||||||
}
|
}
|
||||||
// Generate the intermediary class
|
// Generate the intermediary class
|
||||||
{
|
{
|
||||||
String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), imclass_name);
|
File *f_im = getFile(SWIG_output_directory(), imclass_name);
|
||||||
File *f_im = NewFile(filen, "w", SWIG_output_files());
|
|
||||||
if (!f_im) {
|
|
||||||
FileErrorDisplay(filen);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
Append(filenames_list, Copy(filen));
|
|
||||||
Delete(filen);
|
|
||||||
filen = NULL;
|
|
||||||
|
|
||||||
// Start writing out the intermediary class file
|
|
||||||
emitBanner(f_im);
|
|
||||||
|
|
||||||
addOpenNamespace(0, f_im);
|
addOpenNamespace(0, f_im);
|
||||||
|
|
||||||
|
|
@ -462,23 +465,13 @@ public:
|
||||||
Printf(f_im, "}\n");
|
Printf(f_im, "}\n");
|
||||||
addCloseNamespace(0, f_im);
|
addCloseNamespace(0, f_im);
|
||||||
|
|
||||||
Delete(f_im);
|
if(f_im != f_single)
|
||||||
|
Delete(f_im);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate the C# module class
|
// Generate the C# module class
|
||||||
{
|
{
|
||||||
String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), module_class_name);
|
File *f_module = getFile(SWIG_output_directory(), module_class_name);
|
||||||
File *f_module = NewFile(filen, "w", SWIG_output_files());
|
|
||||||
if (!f_module) {
|
|
||||||
FileErrorDisplay(filen);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
Append(filenames_list, Copy(filen));
|
|
||||||
Delete(filen);
|
|
||||||
filen = NULL;
|
|
||||||
|
|
||||||
// Start writing out the module class file
|
|
||||||
emitBanner(f_module);
|
|
||||||
|
|
||||||
addOpenNamespace(0, f_module);
|
addOpenNamespace(0, f_module);
|
||||||
|
|
||||||
|
|
@ -514,7 +507,8 @@ public:
|
||||||
Printf(f_module, "}\n");
|
Printf(f_module, "}\n");
|
||||||
addCloseNamespace(0, f_module);
|
addCloseNamespace(0, f_module);
|
||||||
|
|
||||||
Delete(f_module);
|
if(f_module != f_single)
|
||||||
|
Delete(f_module);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (upcasts_code)
|
if (upcasts_code)
|
||||||
|
|
@ -613,6 +607,11 @@ public:
|
||||||
f_directors_h = NULL;
|
f_directors_h = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(f_single) {
|
||||||
|
Dump(f_single, f_begin);
|
||||||
|
Delete(f_single);
|
||||||
|
}
|
||||||
|
|
||||||
Dump(f_wrappers, f_begin);
|
Dump(f_wrappers, f_begin);
|
||||||
Wrapper_pretty_print(f_init, f_begin);
|
Wrapper_pretty_print(f_init, f_begin);
|
||||||
Delete(f_header);
|
Delete(f_header);
|
||||||
|
|
@ -635,6 +634,44 @@ public:
|
||||||
Printf(f, "//------------------------------------------------------------------------------\n\n");
|
Printf(f, "//------------------------------------------------------------------------------\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* getFile()
|
||||||
|
* ----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
File* getFile(const String* dir, String* name) {
|
||||||
|
if(cs_out) {
|
||||||
|
if(!f_single) {
|
||||||
|
String* filen = NewStringf("%s", cs_out);
|
||||||
|
f_single = NewFile(filen, "w", SWIG_output_files());
|
||||||
|
if(!f_single) {
|
||||||
|
FileErrorDisplay(filen);
|
||||||
|
SWIG_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
Append(filenames_list, Copy(filen));
|
||||||
|
Delete(filen);
|
||||||
|
filen = NULL;
|
||||||
|
|
||||||
|
Printf(stdout, "create single file");
|
||||||
|
|
||||||
|
emitBanner(f_single);
|
||||||
|
}
|
||||||
|
return f_single;
|
||||||
|
} else {
|
||||||
|
String* filen = NewStringf("%s%s.cs", dir, name);
|
||||||
|
File* f = NewFile(filen, "w", SWIG_output_files());
|
||||||
|
if(!f) {
|
||||||
|
FileErrorDisplay(f);
|
||||||
|
SWIG_exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
Append(filenames_list, Copy(filen));
|
||||||
|
Delete(filen);
|
||||||
|
filen = NULL;
|
||||||
|
|
||||||
|
emitBanner(f);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Add new director upcall signature
|
* Add new director upcall signature
|
||||||
*----------------------------------------------------------------------*/
|
*----------------------------------------------------------------------*/
|
||||||
|
|
@ -1198,18 +1235,7 @@ public:
|
||||||
} else {
|
} else {
|
||||||
// Global enums are defined in their own file
|
// Global enums are defined in their own file
|
||||||
String *output_directory = outputDirectory(nspace);
|
String *output_directory = outputDirectory(nspace);
|
||||||
String *filen = NewStringf("%s%s.cs", output_directory, symname);
|
File *f_enum = getFile(output_directory, symname);
|
||||||
File *f_enum = NewFile(filen, "w", SWIG_output_files());
|
|
||||||
if (!f_enum) {
|
|
||||||
FileErrorDisplay(filen);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
Append(filenames_list, Copy(filen));
|
|
||||||
Delete(filen);
|
|
||||||
filen = NULL;
|
|
||||||
|
|
||||||
// Start writing out the enum file
|
|
||||||
emitBanner(f_enum);
|
|
||||||
|
|
||||||
addOpenNamespace(nspace, f_enum);
|
addOpenNamespace(nspace, f_enum);
|
||||||
|
|
||||||
|
|
@ -1217,7 +1243,8 @@ public:
|
||||||
"\n", enum_code, "\n", NIL);
|
"\n", enum_code, "\n", NIL);
|
||||||
|
|
||||||
addCloseNamespace(nspace, f_enum);
|
addCloseNamespace(nspace, f_enum);
|
||||||
Delete(f_enum);
|
if(f_enum != f_single)
|
||||||
|
Delete(f_enum);
|
||||||
Delete(output_directory);
|
Delete(output_directory);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1920,18 +1947,7 @@ public:
|
||||||
// Each outer proxy class goes into a separate file
|
// Each outer proxy class goes into a separate file
|
||||||
if (!has_outerclass) {
|
if (!has_outerclass) {
|
||||||
String *output_directory = outputDirectory(nspace);
|
String *output_directory = outputDirectory(nspace);
|
||||||
String *filen = NewStringf("%s%s.cs", output_directory, proxy_class_name);
|
f_proxy = getFile(output_directory, proxy_class_name);
|
||||||
f_proxy = NewFile(filen, "w", SWIG_output_files());
|
|
||||||
if (!f_proxy) {
|
|
||||||
FileErrorDisplay(filen);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
Append(filenames_list, Copy(filen));
|
|
||||||
Delete(filen);
|
|
||||||
filen = NULL;
|
|
||||||
|
|
||||||
// Start writing out the proxy class file
|
|
||||||
emitBanner(f_proxy);
|
|
||||||
|
|
||||||
addOpenNamespace(nspace, f_proxy);
|
addOpenNamespace(nspace, f_proxy);
|
||||||
}
|
}
|
||||||
|
|
@ -1991,7 +2007,8 @@ public:
|
||||||
if (!has_outerclass) {
|
if (!has_outerclass) {
|
||||||
Printf(f_proxy, "}\n");
|
Printf(f_proxy, "}\n");
|
||||||
addCloseNamespace(nspace, f_proxy);
|
addCloseNamespace(nspace, f_proxy);
|
||||||
Delete(f_proxy);
|
if(f_proxy != f_single)
|
||||||
|
Delete(f_proxy);
|
||||||
f_proxy = NULL;
|
f_proxy = NULL;
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < nesting_depth; ++i)
|
for (int i = 0; i < nesting_depth; ++i)
|
||||||
|
|
@ -3216,18 +3233,7 @@ public:
|
||||||
Setline(n, line_number);
|
Setline(n, line_number);
|
||||||
|
|
||||||
String *swigtype = NewString("");
|
String *swigtype = NewString("");
|
||||||
String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), classname);
|
File *f_swigtype = getFile(SWIG_output_directory(), classname);
|
||||||
File *f_swigtype = NewFile(filen, "w", SWIG_output_files());
|
|
||||||
if (!f_swigtype) {
|
|
||||||
FileErrorDisplay(filen);
|
|
||||||
SWIG_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
Append(filenames_list, Copy(filen));
|
|
||||||
Delete(filen);
|
|
||||||
filen = NULL;
|
|
||||||
|
|
||||||
// Start writing out the type wrapper class file
|
|
||||||
emitBanner(f_swigtype);
|
|
||||||
|
|
||||||
addOpenNamespace(0, f_swigtype);
|
addOpenNamespace(0, f_swigtype);
|
||||||
|
|
||||||
|
|
@ -3262,8 +3268,8 @@ public:
|
||||||
Printv(f_swigtype, swigtype, NIL);
|
Printv(f_swigtype, swigtype, NIL);
|
||||||
|
|
||||||
addCloseNamespace(0, f_swigtype);
|
addCloseNamespace(0, f_swigtype);
|
||||||
|
if(f_swigtype != f_single)
|
||||||
Delete(f_swigtype);
|
Delete(f_swigtype);
|
||||||
Delete(swigtype);
|
Delete(swigtype);
|
||||||
Delete(n);
|
Delete(n);
|
||||||
}
|
}
|
||||||
|
|
@ -4285,4 +4291,5 @@ C# Options (available with -csharp)\n\
|
||||||
-noproxy - Generate the low-level functional interface instead\n\
|
-noproxy - Generate the low-level functional interface instead\n\
|
||||||
of proxy classes\n\
|
of proxy classes\n\
|
||||||
-oldvarnames - Old intermediary method names for variable wrappers\n\
|
-oldvarnames - Old intermediary method names for variable wrappers\n\
|
||||||
|
-csout <path> - Write all C# to a single file located at <path>\n\
|
||||||
\n";
|
\n";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue