diff --git a/Source/DOH/README b/Source/DOH/README index 1e948105c..9a42e8b8b 100644 --- a/Source/DOH/README +++ b/Source/DOH/README @@ -92,12 +92,12 @@ DohEncoding(name, fn) Register a format encoding for Printf Currently Available datatypes ------------------------------ -NewString(char *initial) Strings -NewHash() Hash -NewList() List -NewVoid(void *ptr, void (*del)(void *)) Void -NewFile(char *file, char *mode) File -NewCallable(DOH *(*func)(DOH *, DOH *)) Callable object +NewString(char *initial) Strings +NewHash() Hash +NewList() List +NewVoid(void *ptr, void (*del)(void *)) Void +NewFile(char *filename, char *mode, List *newfiles) File +NewCallable(DOH *(*func)(DOH *, DOH *)) Callable object Odds and ends: diff --git a/Source/DOH/doh.h b/Source/DOH/doh.h index 7ab244fab..e6f52438e 100644 --- a/Source/DOH/doh.h +++ b/Source/DOH/doh.h @@ -297,7 +297,7 @@ extern char *DohStrchr(const DOHString_or_char *s1, int ch); * Files * ----------------------------------------------------------------------------- */ -extern DOHFile *DohNewFile(DOH *file, const char *mode); +extern DOHFile *DohNewFile(DOH *filename, const char *mode, DOHList *outfiles); extern DOHFile *DohNewFileFromFile(FILE *f); extern DOHFile *DohNewFileFromFd(int fd); extern void DohFileErrorDisplay(DOHString * filename); diff --git a/Source/DOH/file.c b/Source/DOH/file.c index 8c53978ee..65c2336a4 100644 --- a/Source/DOH/file.c +++ b/Source/DOH/file.c @@ -228,15 +228,16 @@ static DohObjInfo DohFileType = { * NewFile() * * Create a new file from a given filename and mode. + * If newfiles is non-zero, the filename is added to the list of new files. * ----------------------------------------------------------------------------- */ -DOH *DohNewFile(DOH *fn, const char *mode) { +DOH *DohNewFile(DOH *filename, const char *mode, DOHList *newfiles) { DohFile *f; FILE *file; - char *filename; + char *filen; - filename = Char(fn); - file = fopen(filename, mode); + filen = Char(filename); + file = fopen(filen, mode); if (!file) return 0; @@ -245,6 +246,8 @@ DOH *DohNewFile(DOH *fn, const char *mode) { fclose(file); return 0; } + if (newfiles) + Append(newfiles, filename); f->filep = file; f->fd = 0; f->closeondel = 1; diff --git a/Source/Modules/allegrocl.cxx b/Source/Modules/allegrocl.cxx index 302470889..5748a082b 100644 --- a/Source/Modules/allegrocl.cxx +++ b/Source/Modules/allegrocl.cxx @@ -1590,7 +1590,7 @@ int ALLEGROCL::top(Node *n) { Printf(cl_filename, "%s%s.cl", SWIG_output_directory(), module_name); - f_cl = NewFile(cl_filename, "w"); + f_cl = NewFile(cl_filename, "w", SWIG_output_files()); if (!f_cl) { Printf(stderr, "Unable to open %s for writing\n", cl_filename); SWIG_exit(EXIT_FAILURE); @@ -1599,7 +1599,7 @@ int ALLEGROCL::top(Node *n) { Generate_Wrapper = CPlusPlus || CWrap; if (Generate_Wrapper) { - f_cxx = NewFile(cxx_filename, "w"); + f_cxx = NewFile(cxx_filename, "w", SWIG_output_files()); if (!f_cxx) { Close(f_cl); Delete(f_cl); diff --git a/Source/Modules/cffi.cxx b/Source/Modules/cffi.cxx index 4b3ddac70..9d9991ea5 100644 --- a/Source/Modules/cffi.cxx +++ b/Source/Modules/cffi.cxx @@ -119,15 +119,14 @@ int CFFI::top(Node *n) { Printf(lisp_filename, "%s%s.lisp", SWIG_output_directory(), module); - File *f_lisp = NewFile(lisp_filename, "w"); - NewFile(lisp_filename, "w"); + File *f_lisp = NewFile(lisp_filename, "w", SWIG_output_files()); if (!f_lisp) { FileErrorDisplay(lisp_filename); SWIG_exit(EXIT_FAILURE); } if (CPlusPlus || CWrap) { - f_cxx = NewFile(cxx_filename, "w"); + f_cxx = NewFile(cxx_filename, "w", SWIG_output_files()); if (!f_cxx) { Close(f_lisp); Delete(f_lisp); @@ -137,7 +136,7 @@ int CFFI::top(Node *n) { String *clos_filename = NewString(""); Printf(clos_filename, "%s%s-clos.lisp", SWIG_output_directory(), module); - f_clos = NewFile(clos_filename, "w"); + f_clos = NewFile(clos_filename, "w", SWIG_output_files()); if (!f_clos) { Close(f_lisp); Delete(f_lisp); diff --git a/Source/Modules/chicken.cxx b/Source/Modules/chicken.cxx index 2298d2939..5ca340f04 100644 --- a/Source/Modules/chicken.cxx +++ b/Source/Modules/chicken.cxx @@ -188,7 +188,7 @@ int CHICKEN::top(Node *n) { /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -251,7 +251,7 @@ int CHICKEN::top(Node *n) { Printf(f_init, "#endif\n"); Printf(chicken_filename, "%s%s.scm", SWIG_output_directory(), module); - if ((f_scm = NewFile(chicken_filename, "w")) == 0) { + if ((f_scm = NewFile(chicken_filename, "w", SWIG_output_files())) == 0) { FileErrorDisplay(chicken_filename); SWIG_exit(EXIT_FAILURE); } diff --git a/Source/Modules/clisp.cxx b/Source/Modules/clisp.cxx index 823f22e2c..5275b9899 100644 --- a/Source/Modules/clisp.cxx +++ b/Source/Modules/clisp.cxx @@ -79,7 +79,7 @@ int CLISP::top(Node *n) { Printf(output_filename, "%s%s.lisp", SWIG_output_directory(), module); } - f_cl = NewFile(output_filename, "w+"); + f_cl = NewFile(output_filename, "w+", SWIG_output_files()); if (!f_cl) { FileErrorDisplay(output_filename); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx index 431181355..19e006a2a 100644 --- a/Source/Modules/csharp.cxx +++ b/Source/Modules/csharp.cxx @@ -286,7 +286,7 @@ public: SWIG_exit(EXIT_FAILURE); } - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -297,7 +297,7 @@ public: Printf(stderr, "Unable to determine outfile_h\n"); SWIG_exit(EXIT_FAILURE); } - f_runtime_h = NewFile(outfile_h, "w"); + f_runtime_h = NewFile(outfile_h, "w", SWIG_output_files()); if (!f_runtime_h) { FileErrorDisplay(outfile_h); SWIG_exit(EXIT_FAILURE); @@ -396,7 +396,7 @@ public: // Generate the intermediary class { String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), imclass_name); - File *f_im = NewFile(filen, "w"); + File *f_im = NewFile(filen, "w", SWIG_output_files()); if (!f_im) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -440,7 +440,7 @@ public: // Generate the C# module class { String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), module_class_name); - File *f_module = NewFile(filen, "w"); + File *f_module = NewFile(filen, "w", SWIG_output_files()); if (!f_module) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -1155,7 +1155,7 @@ public: } else { // Global enums are defined in their own file String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), symname); - File *f_enum = NewFile(filen, "w"); + File *f_enum = NewFile(filen, "w", SWIG_output_files()); if (!f_enum) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -1734,7 +1734,7 @@ public: } String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), proxy_class_name); - f_proxy = NewFile(filen, "w"); + f_proxy = NewFile(filen, "w", SWIG_output_files()); if (!f_proxy) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -2960,7 +2960,7 @@ public: void emitTypeWrapperClass(String *classname, SwigType *type) { String *swigtype = NewString(""); String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), classname); - File *f_swigtype = NewFile(filen, "w"); + File *f_swigtype = NewFile(filen, "w", SWIG_output_files()); if (!f_swigtype) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/guile.cxx b/Source/Modules/guile.cxx index f5f080034..df0540235 100644 --- a/Source/Modules/guile.cxx +++ b/Source/Modules/guile.cxx @@ -174,7 +174,7 @@ public: } } else if (strcmp(argv[i], "-procdoc") == 0) { if (argv[i + 1]) { - procdoc = NewFile(argv[i + 1], (char *) "w"); + procdoc = NewFile(argv[i + 1], "w", SWIG_output_files()); if (!procdoc) { FileErrorDisplay(argv[i + 1]); SWIG_exit(EXIT_FAILURE); @@ -299,7 +299,7 @@ public: /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -499,7 +499,7 @@ public: SWIG_output_directory(), primitive_name); Delete(primitive_name); - File *scmstubfile = NewFile(fname, (char *) "w"); + File *scmstubfile = NewFile(fname, "w", SWIG_output_files()); if (!scmstubfile) { FileErrorDisplay(fname); SWIG_exit(EXIT_FAILURE); @@ -530,7 +530,7 @@ public: String *fname = NewStringf("%s%s.scm", SWIG_output_directory(), module_name); - File *goopsfile = NewFile(fname, (char *) "w"); + File *goopsfile = NewFile(fname, "w", SWIG_output_files()); if (!goopsfile) { FileErrorDisplay(fname); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx index b92fccdfb..37ce22377 100644 --- a/Source/Modules/java.cxx +++ b/Source/Modules/java.cxx @@ -293,7 +293,7 @@ public: SWIG_exit(EXIT_FAILURE); } - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -304,7 +304,7 @@ public: Printf(stderr, "Unable to determine outfile_h\n"); SWIG_exit(EXIT_FAILURE); } - f_runtime_h = NewFile(outfile_h, "w"); + f_runtime_h = NewFile(outfile_h, "w", SWIG_output_files()); if (!f_runtime_h) { FileErrorDisplay(outfile_h); SWIG_exit(EXIT_FAILURE); @@ -420,7 +420,7 @@ public: // Generate the intermediary class { String *filen = NewStringf("%s%s.java", SWIG_output_directory(), imclass_name); - File *f_im = NewFile(filen, "w"); + File *f_im = NewFile(filen, "w", SWIG_output_files()); if (!f_im) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -471,7 +471,7 @@ public: // Generate the Java module class { String *filen = NewStringf("%s%s.java", SWIG_output_directory(), module_class_name); - File *f_module = NewFile(filen, "w"); + File *f_module = NewFile(filen, "w", SWIG_output_files()); if (!f_module) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -523,7 +523,7 @@ public: // Generate the Java constants interface if (Len(module_class_constants_code) != 0) { String *filen = NewStringf("%s%sConstants.java", SWIG_output_directory(), module_class_name); - File *f_module = NewFile(filen, "w"); + File *f_module = NewFile(filen, "w", SWIG_output_files()); if (!f_module) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -1210,7 +1210,7 @@ public: } else { // Global enums are defined in their own file String *filen = NewStringf("%s%s.java", SWIG_output_directory(), symname); - File *f_enum = NewFile(filen, "w"); + File *f_enum = NewFile(filen, "w", SWIG_output_files()); if (!f_enum) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -1742,7 +1742,7 @@ public: } String *filen = NewStringf("%s%s.java", SWIG_output_directory(), proxy_class_name); - f_proxy = NewFile(filen, "w"); + f_proxy = NewFile(filen, "w", SWIG_output_files()); if (!f_proxy) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -2798,7 +2798,7 @@ public: void emitTypeWrapperClass(String *classname, SwigType *type) { String *swigtype = NewString(""); String *filen = NewStringf("%s%s.java", SWIG_output_directory(), classname); - File *f_swigtype = NewFile(filen, "w"); + File *f_swigtype = NewFile(filen, "w", SWIG_output_files()); if (!f_swigtype) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/lua.cxx b/Source/Modules/lua.cxx index 6113da960..c17be52c3 100644 --- a/Source/Modules/lua.cxx +++ b/Source/Modules/lua.cxx @@ -213,7 +213,7 @@ public: String *outfile = Getattr(n, "outfile"); /* Open the output file */ - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx index 901ee812e..0992d5539 100644 --- a/Source/Modules/main.cxx +++ b/Source/Modules/main.cxx @@ -180,6 +180,7 @@ static String *dependencies_target = 0; static int external_runtime = 0; static String *external_runtime_name = 0; enum { STAGE1=1, STAGE2=2, STAGE3=4, STAGE4=8, STAGEOVERFLOW=16 }; +static List *all_output_files = 0; // ----------------------------------------------------------------------------- // check_suffix(char *name) @@ -300,6 +301,11 @@ void SWIG_config_cppext(const char *ext) { cpp_extension = (char *) ext; } +List *SWIG_output_files() { + assert(all_output_files); + return all_output_files; +} + void SWIG_setfeature(const char *cfeature, const char *cvalue) { Hash *features_hash = Swig_cparse_features(); String *name = NewString(""); @@ -363,7 +369,7 @@ static void SWIG_dump_runtime() { } } - runtime = NewFile(outfile, "w"); + runtime = NewFile(outfile, "w", SWIG_output_files()); if (!runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -867,6 +873,7 @@ int SWIG_main(int argc, char *argv[], Language *l) { } libfiles = NewList(); + all_output_files = NewList(); /* Check for SWIG_FEATURES environment variable */ @@ -940,20 +947,21 @@ int SWIG_main(int argc, char *argv[], Language *l) { if (!s) { fprintf(stderr, "Unable to locate '%s' in the SWIG library.\n", input_file); } else { - FILE *f = fopen(outfile, "r"); + FILE *f = Swig_open(outfile); if (f) { fclose(f); fprintf(stderr, "File '%s' already exists. Checkout aborted.\n", outfile); } else { - f = fopen(outfile, "w"); - if (!f) { - fprintf(stderr, "Unable to create file '%s'\n", outfile); - } else { - if (Verbose) - fprintf(stdout, "'%s' checked out from the SWIG library.\n", input_file); - fputs(Char(s), f); - fclose(f); - } + File *f_outfile = NewFile(outfile, "w", SWIG_output_files()); + if (!f_outfile) { + FileErrorDisplay(outfile); + SWIG_exit(EXIT_FAILURE); + } else { + if (Verbose) + fprintf(stdout, "'%s' checked out from the SWIG library.\n", outfile); + Printv(f_outfile, s, NIL); + Close(f_outfile); + } } } } else { @@ -1019,14 +1027,14 @@ int SWIG_main(int argc, char *argv[], Language *l) { outfile = NewString(outfile_name); } if (dependencies_file && Len(dependencies_file) != 0) { - f_dependencies_file = NewFile(dependencies_file, "w"); + f_dependencies_file = NewFile(dependencies_file, "w", SWIG_output_files()); if (!f_dependencies_file) { FileErrorDisplay(dependencies_file); SWIG_exit(EXIT_FAILURE); } } else if (!depend_only) { String *filename = NewStringf("%s_wrap.%s", Swig_file_basename(input_file), depends_extension); - f_dependencies_file = NewFile(filename, "w"); + f_dependencies_file = NewFile(filename, "w", SWIG_output_files()); if (!f_dependencies_file) { FileErrorDisplay(filename); SWIG_exit(EXIT_FAILURE); @@ -1173,6 +1181,21 @@ int SWIG_main(int argc, char *argv[], Language *l) { if (memory_debug) DohMemoryDebug(); + char *outfiles = getenv("CCACHE_OUTFILES"); + if (outfiles) { + File *f_outfiles = NewFile(outfiles, "w", 0); + if (!f_outfiles) { + Printf(stderr, "Failed to write list of output files to the filename '%s' specified in CCACHE_OUTFILES environment variable - ", outfiles); + FileErrorDisplay(f_outfiles); + SWIG_exit(EXIT_FAILURE); + } else { + int i; + for (i = 0; i < Len(all_output_files); i++) + Printf(f_outfiles, "%s\n", Getitem(all_output_files, i)); + Close(f_outfiles); + } + } + // Deletes Delete(libfiles); Preprocessor_delete(); diff --git a/Source/Modules/modula3.cxx b/Source/Modules/modula3.cxx index 6cb24d39a..e85ba3a46 100644 --- a/Source/Modules/modula3.cxx +++ b/Source/Modules/modula3.cxx @@ -542,7 +542,7 @@ MODULA3(): * ----------------------------------------------------------------------------- */ File *openWriteFile(String *name) { - File *file = NewFile(name, "w"); + File *file = NewFile(name, "w", SWIG_output_files()); if (!file) { FileErrorDisplay(name); SWIG_exit(EXIT_FAILURE); @@ -902,7 +902,7 @@ MODULA3(): /* Initialize all of the output files */ outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -2382,7 +2382,7 @@ MODULA3(): } String *filen = NewStringf("%s%s.m3", Swig_file_dirname(outfile), proxy_class_name); - f_proxy = NewFile(filen, "w"); + f_proxy = NewFile(filen, "w", SWIG_output_files()); if (!f_proxy) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -3762,7 +3762,7 @@ MODULA3(): void emitTypeWrapperClass(String *classname, SwigType *type) { String *filen = NewStringf("%s%s.m3", Swig_file_dirname(outfile), classname); - File *f_swigtype = NewFile(filen, "w"); + File *f_swigtype = NewFile(filen, "w", SWIG_output_files()); if (!f_swigtype) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/mzscheme.cxx b/Source/Modules/mzscheme.cxx index 78d4a4b65..b0bfbf5ef 100644 --- a/Source/Modules/mzscheme.cxx +++ b/Source/Modules/mzscheme.cxx @@ -129,7 +129,7 @@ public: /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/ocaml.cxx b/Source/Modules/ocaml.cxx index 0d0f4c7f2..5c0e4b134 100755 --- a/Source/Modules/ocaml.cxx +++ b/Source/Modules/ocaml.cxx @@ -214,7 +214,7 @@ public: /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -293,12 +293,12 @@ public: Printv(mlifile, module, ".mli", NIL); String *mlfilen = NewStringf("%s%s", SWIG_output_directory(), mlfile); - if ((f_mlout = NewFile(mlfilen, "w")) == 0) { + if ((f_mlout = NewFile(mlfilen, "w", SWIG_output_files())) == 0) { FileErrorDisplay(mlfilen); SWIG_exit(EXIT_FAILURE); } String *mlifilen = NewStringf("%s%s", SWIG_output_directory(), mlifile); - if ((f_mliout = NewFile(mlifilen, "w")) == 0) { + if ((f_mliout = NewFile(mlifilen, "w", SWIG_output_files())) == 0) { FileErrorDisplay(mlifilen); SWIG_exit(EXIT_FAILURE); } diff --git a/Source/Modules/octave.cxx b/Source/Modules/octave.cxx index d582e8a6c..5e3cc9d08 100644 --- a/Source/Modules/octave.cxx +++ b/Source/Modules/octave.cxx @@ -87,7 +87,7 @@ public: String *module = Getattr(n, "name"); String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/perl5.cxx b/Source/Modules/perl5.cxx index 6e706fc8d..3b9585534 100644 --- a/Source/Modules/perl5.cxx +++ b/Source/Modules/perl5.cxx @@ -222,7 +222,7 @@ public: /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -315,7 +315,7 @@ public: pmfile = NewStringf("%s.pm", m); } String *filen = NewStringf("%s%s", SWIG_output_directory(), pmfile); - if ((f_pm = NewFile(filen, "w")) == 0) { + if ((f_pm = NewFile(filen, "w", SWIG_output_files())) == 0) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); } diff --git a/Source/Modules/php.cxx b/Source/Modules/php.cxx index e96e64c02..434456b40 100644 --- a/Source/Modules/php.cxx +++ b/Source/Modules/php.cxx @@ -258,7 +258,7 @@ public: String *outfile = Getattr(n, "outfile"); /* main output file */ - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -302,7 +302,7 @@ public: Printv(filen, SWIG_output_directory(), module, ".php", NIL); phpfilename = NewString(filen); - f_phpcode = NewFile(filen, "w"); + f_phpcode = NewFile(filen, "w", SWIG_output_files()); if (!f_phpcode) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -381,7 +381,7 @@ public: /* Create the .h file too */ filen = NewStringEmpty(); Printv(filen, SWIG_output_directory(), "php_", module, ".h", NIL); - f_h = NewFile(filen, "w"); + f_h = NewFile(filen, "w", SWIG_output_files()); if (!f_h) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/pike.cxx b/Source/Modules/pike.cxx index 30f9b3d74..56d1acab2 100644 --- a/Source/Modules/pike.cxx +++ b/Source/Modules/pike.cxx @@ -123,7 +123,7 @@ public: String *outfile = Getattr(n, "outfile"); /* Open the output file */ - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx index b455de890..870c6f35e 100644 --- a/Source/Modules/python.cxx +++ b/Source/Modules/python.cxx @@ -513,7 +513,7 @@ public: String *outfile = Getattr(n, "outfile"); String *outfile_h = !no_header_file ? Getattr(n, "outfile_h") : 0; - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -521,7 +521,7 @@ public: if (directorsEnabled()) { if (!no_header_file) { - f_runtime_h = NewFile(outfile_h, "w"); + f_runtime_h = NewFile(outfile_h, "w", SWIG_output_files()); if (!f_runtime_h) { FileErrorDisplay(outfile_h); SWIG_exit(EXIT_FAILURE); @@ -662,7 +662,7 @@ public: module = interface; else Insert(module, 0, "_"); - if ((f_shadow_py = NewFile(filen, "w")) == 0) { + if ((f_shadow_py = NewFile(filen, "w", SWIG_output_files())) == 0) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); } diff --git a/Source/Modules/r.cxx b/Source/Modules/r.cxx index 49d3ecc89..26b83adea 100644 --- a/Source/Modules/r.cxx +++ b/Source/Modules/r.cxx @@ -878,7 +878,7 @@ int R::DumpCode(Node *n) { Printf(stderr, "Writing S code to %s\n", output_filename); #endif - File *scode = NewFile(output_filename, "w"); + File *scode = NewFile(output_filename, "w", SWIG_output_files()); if (!scode) { FileErrorDisplay(output_filename); SWIG_exit(EXIT_FAILURE); @@ -893,7 +893,7 @@ int R::DumpCode(Node *n) { Close(scode); // Delete(scode); String *outfile = Getattr(n,"outfile"); - File *runtime = NewFile(outfile,"w"); + File *runtime = NewFile(outfile,"w", SWIG_output_files()); if (!runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -920,7 +920,7 @@ int R::DumpCode(Node *n) { if(outputNamespaceInfo) { output_filename = NewString(""); Printf(output_filename, "%sNAMESPACE", SWIG_output_directory()); - File *ns = NewFile(output_filename, "w"); + File *ns = NewFile(output_filename, "w", SWIG_output_files()); if (!ns) { FileErrorDisplay(output_filename); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/ruby.cxx b/Source/Modules/ruby.cxx index ad448d34e..8e4aece84 100644 --- a/Source/Modules/ruby.cxx +++ b/Source/Modules/ruby.cxx @@ -992,7 +992,7 @@ public: SWIG_exit(EXIT_FAILURE); } - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -1003,7 +1003,7 @@ public: Printf(stderr, "Unable to determine outfile_h\n"); SWIG_exit(EXIT_FAILURE); } - f_runtime_h = NewFile(outfile_h, "w"); + f_runtime_h = NewFile(outfile_h, "w", SWIG_output_files()); if (!f_runtime_h) { FileErrorDisplay(outfile_h); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/s-exp.cxx b/Source/Modules/s-exp.cxx index b89b3097f..b492a2add 100644 --- a/Source/Modules/s-exp.cxx +++ b/Source/Modules/s-exp.cxx @@ -59,7 +59,7 @@ public: String *outfile = Getattr(n, "outfile"); Replaceall(outfile, "_wrap.cxx", ".lisp"); Replaceall(outfile, "_wrap.c", ".lisp"); - out = NewFile(outfile, "w"); + out = NewFile(outfile, "w", SWIG_output_files()); if (!out) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/swigmod.h b/Source/Modules/swigmod.h index 84817a27d..8ee97bb2c 100644 --- a/Source/Modules/swigmod.h +++ b/Source/Modules/swigmod.h @@ -317,6 +317,9 @@ void SWIG_config_file(const String_or_char *); const String *SWIG_output_directory(); void SWIG_config_cppext(const char *ext); +/* get the list of generated files */ +List *SWIG_output_files(); + void SWIG_library_directory(const char *); int emit_num_arguments(ParmList *); int emit_num_required(ParmList *); diff --git a/Source/Modules/tcl8.cxx b/Source/Modules/tcl8.cxx index 09bd266c3..fe21cb78a 100644 --- a/Source/Modules/tcl8.cxx +++ b/Source/Modules/tcl8.cxx @@ -136,7 +136,7 @@ public: /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -177,7 +177,7 @@ public: Insert(module, 0, "_"); - if ((f_shadow = NewFile(filen, "w")) == 0) { + if ((f_shadow = NewFile(filen, "w", SWIG_output_files())) == 0) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); } diff --git a/Source/Modules/uffi.cxx b/Source/Modules/uffi.cxx index 5d4affb8c..84155cf2a 100644 --- a/Source/Modules/uffi.cxx +++ b/Source/Modules/uffi.cxx @@ -229,7 +229,7 @@ int UFFI::top(Node *n) { Printf(output_filename, "%s%s.cl", SWIG_output_directory(), module); - f_cl = NewFile(output_filename, "w"); + f_cl = NewFile(output_filename, "w", SWIG_output_files()); if (!f_cl) { FileErrorDisplay(output_filename); SWIG_exit(EXIT_FAILURE); diff --git a/Source/Modules/xml.cxx b/Source/Modules/xml.cxx index c74b48d7c..2edd01cf0 100644 --- a/Source/Modules/xml.cxx +++ b/Source/Modules/xml.cxx @@ -47,7 +47,7 @@ public: iX++; Swig_mark_arg(iX); String *outfile = NewString(argv[iX]); - out = NewFile(outfile, "w"); + out = NewFile(outfile, "w", SWIG_output_files()); if (!out) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -82,7 +82,7 @@ public: Replaceall(outfile, ".cxx", ".xml"); Replaceall(outfile, ".cpp", ".xml"); Replaceall(outfile, ".c", ".xml"); - out = NewFile(outfile, "w"); + out = NewFile(outfile, "w", SWIG_output_files()); if (!out) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -301,7 +301,7 @@ void Swig_print_xml(DOH *obj, String *filename) { if (!filename) { out = stdout; } else { - out = NewFile(filename, "w"); + out = NewFile(filename, "w", SWIG_output_files()); if (!out) { FileErrorDisplay(filename); SWIG_exit(EXIT_FAILURE);