From: <je...@us...> - 2008-06-28 15:16:58
|
Revision: 10602 http://swig.svn.sourceforge.net/swig/?rev=10602&view=rev Author: jezabek Date: 2008-06-28 08:16:56 -0700 (Sat, 28 Jun 2008) Log Message: ----------- Generate DEF file for DLLs. Add options to disable generating DLL export functions (DllGetClassObject and DllCanUnloadNow) and the DEF file. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-06-28 13:53:07 UTC (rev 10601) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-06-28 15:16:56 UTC (rev 10602) @@ -29,6 +29,7 @@ File *f_runtime; File *f_header; File *f_module; + File *f_deffile; File *f_wrappers; File *f_proxy; File *f_proxy_forward_defs; @@ -37,6 +38,8 @@ File *f_factory; bool proxy_flag; // Flag for generating proxy classes + bool dllexports_flag; + bool deffile_flag; bool enum_constant_flag; // Flag for when wrapping an enum or constant bool static_flag; // Flag for when wrapping a static functions or member variables bool variable_wrapper_flag; // Flag for when wrapping a nonstatic member variable @@ -67,6 +70,8 @@ COM():empty_string(NewString("")), proxy_flag(true), + deffile_flag(true), + dllexports_flag(true), enum_constant_flag(false), proxy_class_vtable_code(NewString("")), proxy_class_vtable_defs(NewString("")), @@ -105,6 +110,13 @@ if (argv[i]) { if (strcmp(argv[i], "-help") == 0) { Printf(stdout, "%s\n", usage); + } else if ((strcmp(argv[i], "-nodllexports") == 0)) { + Swig_mark_arg(i); + dllexports_flag = false; + deffile_flag = false; + } else if (strcmp(argv[i], "-nodeffile") == 0) { + Swig_mark_arg(i); + deffile_flag = false; } } } @@ -233,6 +245,25 @@ emitTypeWrapperClass(swig_type.key, swig_type.item); } + /* Generate DEF file */ + if (deffile_flag) { + String *filen = NewStringf("%s%s.def", SWIG_output_directory(), module_class_name); + f_deffile = NewFile(filen, "w"); + if (!f_deffile) { + FileErrorDisplay(filen); + SWIG_exit(EXIT_FAILURE); + } + // Append(filenames_list, Copy(filen)); + Delete(filen); + filen = NULL; + + Printf(f_deffile, "LIBRARY %s\n", module_class_name); + + Printf(f_deffile, "EXPORTS\n" + " DllGetClassObject\n" + " DllCanUnloadNow\n"); + } + /* Generate the IDL file containing the module class and proxy classes */ { String *filen = NewStringf("%s%s.idl", SWIG_output_directory(), module_class_name); @@ -289,12 +320,17 @@ Delete(f_vtables); Dump(clsid_list, f_runtime); Delete(clsid_list); - Dump(f_factory, f_runtime); + if (dllexports_flag) + Dump(f_factory, f_runtime); Delete(f_factory); Close(f_runtime); Delete(f_runtime); Close(f_module); Delete(f_module); + if (deffile_flag) { + Close(f_deffile); + Delete(f_deffile); + } return SWIG_OK; } @@ -1182,4 +1218,7 @@ const char *COM::usage = (char *) "\ COM Options (available with -com)\n\ + -nodeffile - Do not generate DEF file\n\ + -nodllexports - Do not generate DllGetClassObject and DllCanUnloadNow\n\ + (implicates -nodeffile)\n\ \n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |