#include #include #include static void CreateInitFile(const char *libName, FILE *fout) { const char *prefix = ""; const char* dllexp = "VTK_ABI_EXPORT "; fprintf(fout,"// Generated by vtkWrapPythonInit in VTK/Wrapping\n"); fprintf(fout,"#include \"vtkPython.h\"\n"); fprintf(fout,"#include \"vtkPythonCompatibility.h\"\n"); fprintf(fout,"#include \"vtkSystemIncludes.h\"\n"); fprintf(fout,"// Handle compiler warning messages, etc.\n" "#if defined( _MSC_VER ) && !defined(VTK_DISPLAY_WIN32_WARNINGS)\n" "#pragma warning ( disable : 4706 )\n" "#endif // Windows Warnings\n\n"); fprintf(fout,"extern \"C\" { PyObject *real_init%s(const char *); }\n\n", libName); fprintf(fout,"#ifdef VTK_PY3K\n"); fprintf(fout,"extern \"C\" { %sPyObject *PyInit_%s%s(); }\n\n", dllexp, prefix, libName); fprintf(fout,"PyObject *PyInit_%s()\n", libName); fprintf(fout,"{\n"); fprintf(fout," return real_init%s(nullptr);\n", libName); fprintf(fout,"}\n"); fprintf(fout,"#else\n"); fprintf(fout,"extern \"C\" { %svoid init%s%s(); }\n\n", dllexp, prefix, libName); fprintf(fout,"void init%s()\n", libName); fprintf(fout,"{\n"); fprintf(fout," real_init%s(nullptr);\n", libName); fprintf(fout,"}\n"); fprintf(fout,"#endif\n"); } /* warning this code is also in getclasses.cxx under pcmaker */ /* this routine creates the init file */ static void CreateImplFile(const char *libName, int numFiles, char **files, FILE *fout) { int i; const char* dllexp = "VTK_ABI_EXPORT "; fprintf(fout,"// Generated by vtkWrapPythonInit in VTK/Wrapping\n"); fprintf(fout,"#include \"vtkPython.h\"\n"); fprintf(fout,"#include \"vtkPythonCompatibility.h\"\n"); fprintf(fout,"#include \"vtkSystemIncludes.h\"\n"); fprintf(fout,"#include \n"); fprintf(fout,"// Handle compiler warning messages, etc.\n" "#if defined( _MSC_VER ) && !defined(VTK_DISPLAY_WIN32_WARNINGS)\n" "#pragma warning ( disable : 4706 )\n" "#endif // Windows Warnings\n\n"); for (i = 0; i < numFiles; i++) { fprintf(fout,"extern \"C\" {%sPyObject *PyVTKAddFile_%s(PyObject *); }\n", dllexp, files[i]); } fprintf(fout,"\nstatic PyMethodDef Py%s_Methods[] = {\n", libName); fprintf(fout,"{nullptr, nullptr, 0, nullptr}};\n\n"); fprintf(fout,"#ifdef VTK_PY3K\n"); fprintf(fout,"static PyModuleDef Py%s_Module = {\n", libName); fprintf(fout," PyModuleDef_HEAD_INIT,\n"); fprintf(fout," \"%s\", // m_name\n", libName); fprintf(fout," nullptr, // m_doc\n"); fprintf(fout," 0, // m_size\n"); fprintf(fout," Py%s_Methods, //m_methods\n", libName); fprintf(fout," nullptr, // m_reload\n"); fprintf(fout," nullptr, // m_traverse\n"); fprintf(fout," nullptr, // m_clear\n"); fprintf(fout," nullptr // m_free\n"); fprintf(fout,"};\n"); fprintf(fout,"#endif\n\n"); fprintf(fout,"extern \"C\" {%sPyObject *real_init%s(const char *); }\n\n", dllexp, libName); fprintf(fout,"PyObject *real_init%s(const char *)\n{\n", libName); /* module init function */ fprintf(fout,"#ifdef VTK_PY3K\n"); fprintf(fout," PyObject *m = PyModule_Create(&Py%s_Module);\n", libName); fprintf(fout,"#else\n\n"); fprintf(fout," PyObject *m = Py_InitModule(\"%s\",\n" " Py%s_Methods);\n", libName, libName); fprintf(fout,"#endif\n\n"); fprintf(fout," PyObject *d = PyModule_GetDict(m);\n"); fprintf(fout," if (!d)\n"); fprintf(fout," {\n"); fprintf(fout," Py_FatalError(\"can't get dictionary for module %s\");\n", libName); fprintf(fout," }\n"); for (i = 0; i < numFiles; i++) { fprintf(fout," PyVTKAddFile_%s(d);\n", files[i]); } fprintf(fout,"\n"); fprintf(fout," return m;\n"); fprintf(fout,"}\n\n"); } int main(int argc,char *argv[]) { FILE *file; FILE *fout_init; FILE *fout_impl; int numFiles = 0; char libName[250]; char tmpVal[250]; char *files[4000]; if (argc < 4) { fprintf(stderr,"Usage: %s input_file init_file impl_file\n",argv[0]); return 1; } file = fopen(argv[1],"r"); if (!file) { fprintf(stderr,"Input file %s could not be opened\n",argv[1]); return 1; } /* read the info from the file */ if (fscanf(file,"%s",libName) != 1) { fprintf(stderr,"Error getting libName\n"); fclose(file); return 1; } /* read in the classes */ while (fscanf(file,"%s",tmpVal) != EOF) { files[numFiles] = strdup(tmpVal); numFiles++; } /* close the file */ fclose(file); file = NULL; fout_init = fopen(argv[2],"w"); if (!fout_init) { return 1; } fout_impl = fopen(argv[3],"w"); if (!fout_impl) { fclose(fout_init); return 1; } /* extra functions, types, etc. for the CommonCore module */ if (strcmp(libName, "vtkCommonCorePython") == 0 || strcmp(libName, "vtkCommonKitPython") == 0) { files[numFiles] = strdup("PyVTKExtras"); numFiles++; } CreateInitFile(libName, fout_init); CreateImplFile(libName, numFiles, files, fout_impl); fclose(fout_init); fclose(fout_impl); return 0; }