Merge branch 'Sghirate-master' - C# -outfile option
* Sghirate-master: changes file update for -outfile Add in all C# command line options to the docs C# -outfile cosmetic code fixes [C#] Single file mode (fixes) [C#] Single file mode (minor fix) [C#] Single file mode Conflicts: CHANGES.current
This commit is contained in:
commit
6ab1ab57dd
3 changed files with 148 additions and 70 deletions
|
|
@ -34,6 +34,7 @@ class CSHARP:public Language {
|
|||
File *f_init;
|
||||
File *f_directors;
|
||||
File *f_directors_h;
|
||||
File *f_single_out;
|
||||
List *filenames_list;
|
||||
|
||||
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_connect_parms; // Director delegates parameter list for director connect call
|
||||
String *destructor_call; //C++ destructor call if any
|
||||
String *output_file; // File name for single file mode. If set all generated code will be written to this file
|
||||
|
||||
// Director method stuff:
|
||||
List *dmethods_seq;
|
||||
|
|
@ -108,6 +110,7 @@ public:
|
|||
f_init(NULL),
|
||||
f_directors(NULL),
|
||||
f_directors_h(NULL),
|
||||
f_single_out(NULL),
|
||||
filenames_list(NULL),
|
||||
proxy_flag(true),
|
||||
native_function_flag(false),
|
||||
|
|
@ -150,6 +153,7 @@ public:
|
|||
director_method_types(NULL),
|
||||
director_connect_parms(NULL),
|
||||
destructor_call(NULL),
|
||||
output_file(NULL),
|
||||
dmethods_seq(NULL),
|
||||
dmethods_table(NULL),
|
||||
n_dmethods(0),
|
||||
|
|
@ -244,6 +248,16 @@ public:
|
|||
} else if (strcmp(argv[i], "-oldvarnames") == 0) {
|
||||
Swig_mark_arg(i);
|
||||
old_variable_names = true;
|
||||
} else if (strcmp(argv[i], "-outfile") == 0) {
|
||||
if (argv[i + 1]) {
|
||||
output_file = NewString("");
|
||||
Printf(output_file, argv[i + 1]);
|
||||
Swig_mark_arg(i);
|
||||
Swig_mark_arg(i + 1);
|
||||
i++;
|
||||
} else {
|
||||
Swig_arg_error();
|
||||
}
|
||||
} else if (strcmp(argv[i], "-help") == 0) {
|
||||
Printf(stdout, "%s\n", usage);
|
||||
}
|
||||
|
|
@ -423,18 +437,7 @@ public:
|
|||
}
|
||||
// Generate the intermediary class
|
||||
{
|
||||
String *filen = NewStringf("%s%s.cs", 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);
|
||||
File *f_im = getOutputFile(SWIG_output_directory(), imclass_name);
|
||||
|
||||
addOpenNamespace(0, f_im);
|
||||
|
||||
|
|
@ -462,23 +465,14 @@ public:
|
|||
Printf(f_im, "}\n");
|
||||
addCloseNamespace(0, f_im);
|
||||
|
||||
Delete(f_im);
|
||||
if (f_im != f_single_out)
|
||||
Delete(f_im);
|
||||
f_im = NULL;
|
||||
}
|
||||
|
||||
// Generate the C# module class
|
||||
{
|
||||
String *filen = NewStringf("%s%s.cs", 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);
|
||||
File *f_module = getOutputFile(SWIG_output_directory(), module_class_name);
|
||||
|
||||
addOpenNamespace(0, f_module);
|
||||
|
||||
|
|
@ -514,7 +508,9 @@ public:
|
|||
Printf(f_module, "}\n");
|
||||
addCloseNamespace(0, f_module);
|
||||
|
||||
Delete(f_module);
|
||||
if (f_module != f_single_out)
|
||||
Delete(f_module);
|
||||
f_module = NULL;
|
||||
}
|
||||
|
||||
if (upcasts_code)
|
||||
|
|
@ -613,6 +609,12 @@ public:
|
|||
f_directors_h = NULL;
|
||||
}
|
||||
|
||||
if (f_single_out) {
|
||||
Dump(f_single_out, f_begin);
|
||||
Delete(f_single_out);
|
||||
f_single_out = NULL;
|
||||
}
|
||||
|
||||
Dump(f_wrappers, f_begin);
|
||||
Wrapper_pretty_print(f_init, f_begin);
|
||||
Delete(f_header);
|
||||
|
|
@ -634,6 +636,50 @@ public:
|
|||
Swig_banner_target_lang(f, "//");
|
||||
Printf(f, "//------------------------------------------------------------------------------\n\n");
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* getOutputFile()
|
||||
*
|
||||
* Prepares a File object by creating the file in the file system and
|
||||
* writing the banner for auto-generated files to it (emitBanner).
|
||||
* If '-outfile' is provided (single file mode) the supplied parameters will
|
||||
* be ignored and the returned file will always be:
|
||||
* <outdir>/<outfile>
|
||||
* Otherwise the file will be:
|
||||
* <dir>/<name>.cs
|
||||
* ----------------------------------------------------------------------------- */
|
||||
|
||||
File *getOutputFile(const String *dir, const String *name) {
|
||||
if (output_file) {
|
||||
if (!f_single_out) {
|
||||
String *filen = NewStringf("%s%s", SWIG_output_directory(), output_file);
|
||||
f_single_out = NewFile(filen, "w", SWIG_output_files());
|
||||
if (!f_single_out) {
|
||||
FileErrorDisplay(filen);
|
||||
SWIG_exit(EXIT_FAILURE);
|
||||
}
|
||||
Append(filenames_list, Copy(filen));
|
||||
Delete(filen);
|
||||
filen = NULL;
|
||||
|
||||
emitBanner(f_single_out);
|
||||
}
|
||||
return f_single_out;
|
||||
} 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
|
||||
|
|
@ -1086,7 +1132,7 @@ public:
|
|||
scope = NewString("");
|
||||
if (nspace)
|
||||
Printf(scope, "%s", nspace);
|
||||
if (Node* cls = getCurrentClass()) {
|
||||
if (Node *cls = getCurrentClass()) {
|
||||
if (Node *outer = Getattr(cls, "nested:outer")) {
|
||||
String *outerClassesPrefix = Copy(Getattr(outer, "sym:name"));
|
||||
for (outer = Getattr(outer, "nested:outer"); outer != 0; outer = Getattr(outer, "nested:outer")) {
|
||||
|
|
@ -1198,18 +1244,7 @@ public:
|
|||
} else {
|
||||
// Global enums are defined in their own file
|
||||
String *output_directory = outputDirectory(nspace);
|
||||
String *filen = NewStringf("%s%s.cs", 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);
|
||||
File *f_enum = getOutputFile(output_directory, symname);
|
||||
|
||||
addOpenNamespace(nspace, f_enum);
|
||||
|
||||
|
|
@ -1217,7 +1252,9 @@ public:
|
|||
"\n", enum_code, "\n", NIL);
|
||||
|
||||
addCloseNamespace(nspace, f_enum);
|
||||
Delete(f_enum);
|
||||
if (f_enum != f_single_out)
|
||||
Delete(f_enum);
|
||||
f_enum = NULL;
|
||||
Delete(output_directory);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1917,21 +1954,9 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
// Each outer proxy class goes into a separate file
|
||||
if (!has_outerclass) {
|
||||
String *output_directory = outputDirectory(nspace);
|
||||
String *filen = NewStringf("%s%s.cs", 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);
|
||||
f_proxy = getOutputFile(output_directory, proxy_class_name);
|
||||
|
||||
addOpenNamespace(nspace, f_proxy);
|
||||
}
|
||||
|
|
@ -1991,7 +2016,8 @@ public:
|
|||
if (!has_outerclass) {
|
||||
Printf(f_proxy, "}\n");
|
||||
addCloseNamespace(nspace, f_proxy);
|
||||
Delete(f_proxy);
|
||||
if (f_proxy != f_single_out)
|
||||
Delete(f_proxy);
|
||||
f_proxy = NULL;
|
||||
} else {
|
||||
for (int i = 0; i < nesting_depth; ++i)
|
||||
|
|
@ -3216,18 +3242,7 @@ public:
|
|||
Setline(n, line_number);
|
||||
|
||||
String *swigtype = NewString("");
|
||||
String *filen = NewStringf("%s%s.cs", 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);
|
||||
File *f_swigtype = getOutputFile(SWIG_output_directory(), classname);
|
||||
|
||||
addOpenNamespace(0, f_swigtype);
|
||||
|
||||
|
|
@ -3262,8 +3277,9 @@ public:
|
|||
Printv(f_swigtype, swigtype, NIL);
|
||||
|
||||
addCloseNamespace(0, f_swigtype);
|
||||
|
||||
Delete(f_swigtype);
|
||||
if (f_swigtype != f_single_out)
|
||||
Delete(f_swigtype);
|
||||
f_swigtype = NULL;
|
||||
Delete(swigtype);
|
||||
Delete(n);
|
||||
}
|
||||
|
|
@ -4285,4 +4301,5 @@ C# Options (available with -csharp)\n\
|
|||
-noproxy - Generate the low-level functional interface instead\n\
|
||||
of proxy classes\n\
|
||||
-oldvarnames - Old intermediary method names for variable wrappers\n\
|
||||
-outfile <file> - Write all C# into a single <file> located in the output directory\n\
|
||||
\n";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue