You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.9 KiB
113 lines
2.9 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
/* warning this code is also in getclasses.cxx under pcmaker */
|
|
/* this roputine creates the init file */
|
|
static void CreateInitFile(const char *libName,
|
|
int numConcrete, char **concrete,
|
|
FILE *fout)
|
|
{
|
|
int i;
|
|
|
|
#if defined(_WIN32) && !defined(__CYGWIN__)
|
|
const char* prefix = "";
|
|
#else
|
|
const char* prefix = "lib";
|
|
#endif
|
|
|
|
#if defined(_WIN32)
|
|
const char* dllexp = "__declspec(dllexport) ";
|
|
#else
|
|
const char* dllexp = "";
|
|
#endif
|
|
|
|
fprintf(fout,"// Generated by vtkWrapPythonInit in VTK/Wrapping\n");
|
|
fprintf(fout,"#include \"vtkPython.h\"\n\n");
|
|
fprintf(fout,"#include \"vtkSystemIncludes.h\"\n");
|
|
fprintf(fout,"#include <string.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");
|
|
|
|
for (i = 0; i < numConcrete; i++)
|
|
{
|
|
fprintf(fout,"extern \"C\" {%sPyObject *PyVTKClass_%sNew(char *); }\n", dllexp, concrete[i]);
|
|
}
|
|
|
|
fprintf(fout,"\nstatic PyMethodDef Py%s_ClassMethods[] = {\n", libName);
|
|
fprintf(fout,"{NULL, NULL, 0, NULL}};\n\n");
|
|
|
|
fprintf(fout,"extern \"C\" {%svoid init%s%s();}\n\n", dllexp, prefix, libName);
|
|
fprintf(fout,"void init%s%s()\n{\n", prefix, libName);
|
|
|
|
/* module init function */
|
|
fprintf(fout," PyObject *m, *d, *c;\n\n");
|
|
fprintf(fout," static const char modulename[] = \"%s%s\";\n", prefix, libName);
|
|
fprintf(fout," m = Py_InitModule((char*)modulename, Py%s_ClassMethods);\n",
|
|
libName);
|
|
|
|
fprintf(fout," d = PyModule_GetDict(m);\n");
|
|
fprintf(fout," if (!d) Py_FatalError((char*)\"can't get dictionary for module %s!\");\n\n",
|
|
libName);
|
|
|
|
for (i = 0; i < numConcrete; i++)
|
|
{
|
|
fprintf(fout," if ((c = PyVTKClass_%sNew((char*)modulename)))\n",
|
|
concrete[i]);
|
|
fprintf(fout," if (-1 == PyDict_SetItemString(d, (char*)\"%s\", c))\n",
|
|
concrete[i]);
|
|
fprintf(fout," Py_FatalError((char*)\"can't add class %s to dictionary!\");\n\n",
|
|
concrete[i]);
|
|
}
|
|
fprintf(fout,"}\n\n");
|
|
}
|
|
|
|
|
|
int main(int argc,char *argv[])
|
|
{
|
|
FILE *file;
|
|
FILE *fout;
|
|
int numConcrete = 0;
|
|
char libName[250];
|
|
char tmpVal[250];
|
|
char *concrete[4000];
|
|
|
|
if (argc < 3)
|
|
{
|
|
fprintf(stderr,"Usage: %s input_file output_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;
|
|
}
|
|
|
|
fout = fopen(argv[2],"w");
|
|
if (!fout)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
/* read the info from the file */
|
|
fscanf(file,"%s",libName);
|
|
|
|
/* read in the classes */
|
|
while (fscanf(file,"%s",tmpVal) != EOF)
|
|
{
|
|
concrete[numConcrete] = strdup(tmpVal);
|
|
numConcrete++;
|
|
}
|
|
/* close the file */
|
|
fclose(file);
|
|
|
|
CreateInitFile(libName, numConcrete, concrete, fout);
|
|
fclose(fout);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|