Cloned library of VTK-5.0.0 with extra build files for internal package management.
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.
 
 
 
 
 
 

195 lines
5.0 KiB

/* this is a CMake loadable command to wrap vtk objects into Java */
#include "cmCPluginAPI.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define SINGLE_FILE_BUILD
/* do almost everything in the initial pass */
static int InitialPass(void *inf, void *mf, int argc, char *argv[])
{
cmLoadedCommandInfo *info = (cmLoadedCommandInfo *)inf;
int i;
int newArgc;
int msize;
int estimated;
char **newArgv;
int numClasses = 0;
char **classes = 0;
char **dependencies = 0;
int numDep = 0;
int numWrapped = 0;
const char *cdir = info->CAPI->GetCurrentDirectory(mf);
const char *def = 0;
char *newName;
char *target = 0;
const char *javac = info->CAPI->GetDefinition(mf,"JAVA_COMPILE");
const char *jar = info->CAPI->GetDefinition(mf,"JAVA_ARCHIVE");
void *cfile = 0;
char *args[5];
char *jargs[5];
int depends = 0;
char **sargs = 0;
int sargsCnt = 0;
char **srcList = 0;
int srcCnt = 0;
char* javaPath = 0;
const char *libpath = info->CAPI->GetDefinition(mf,"LIBRARY_OUTPUT_PATH");
const char *vtkpath = info->CAPI->GetDefinition(mf,"VTK_BINARY_DIR");
const char *userjavapath = info->CAPI->GetDefinition(mf,"USER_JAVA_CLASSPATH");
const char *startTempFile;
const char *endTempFile;
FILE* outfile = 0;
const char* filename = 0;
if(argc < 2 )
{
info->CAPI->SetError(info, "called with incorrect number of arguments");
return 0;
}
/* Now check and see if the value has been stored in the cache */
/* already, if so use that value and don't look for the program */
if(!info->CAPI->IsOn(mf,"VTK_WRAP_JAVA"))
{
info->CAPI->FreeArguments(newArgc, newArgv);
return 1;
}
info->CAPI->ExpandSourceListArguments(mf, argc, (const char**)argv,
&newArgc, &newArgv, 2);
/* keep the library name */
target = strdup(newArgv[0]);
if (userjavapath)
{
javaPath = (char *)malloc(strlen(vtkpath) + 20 + strlen(userjavapath));
sprintf(javaPath, "%s;%s/java", userjavapath, vtkpath);
}
else
{
javaPath = (char *)malloc(strlen(vtkpath) + 20);
sprintf(javaPath, "%s/java", vtkpath);
}
args[0] = strdup("-classpath");
args[1] = strdup(javaPath);
classes = (char**) malloc( newArgc * sizeof(char*));
numClasses = 0;
filename = (char*) malloc( strlen(vtkpath) + strlen("/java/vtk/") + strlen(target) + 100 );
sprintf(filename, "%s/java/vtk/vtk%sDriver.java", vtkpath, target);
outfile = fopen(filename, "w");
if ( !outfile )
{
char buffer[1024];
sprintf(buffer, "cannot generate output file: %s", filename);
info->CAPI->SetError(info, buffer);
return 0;
}
fprintf(outfile,
"// Do not edit\n"
"// This file is generated by cmVTKGenerateJavaDependencies.c in VTK\n"
"package vtk;\n"
"import vtk.*;\n"
"\n"
"public class vtk%sDriver\n"
"{\n"
" public static void Initialize(String[] args)\n"
" {\n"
" Object dummy;\n", target);
/* get the classes for this lib */
for(i = 1; i < newArgc; ++i)
{
const char *srcName = newArgv[i];
char *className = 0;
char *srcNameWe;
char *srcPath;
srcNameWe = info->CAPI->GetFilenameWithoutExtension(srcName);
srcPath = info->CAPI->GetFilenamePath(srcName);
className = (char *)malloc(strlen(srcPath) + strlen(srcNameWe) + 20);
sprintf(className,"%s/%s.class",srcPath,srcNameWe);
fprintf(outfile,
" dummy = new %s();\n", srcNameWe);
args[2] = (char*) malloc(strlen(srcName) + strlen(target) + 20);
/* On Unix we can just call javac ... *.java */
sprintf(args[2], "%s/vtk%sDriver.java", srcPath, target);
info->CAPI->AddCustomCommand(mf, srcName, javac, 3, (const char**)args,
0, 0, 1, (const char**)&className, target);
free(args[2]);
info->CAPI->Free(srcNameWe);
info->CAPI->Free(srcPath);
classes[numClasses++] = strdup(className);
free(className);
}
free(args[0]);
free(args[1]);
info->CAPI->AddCustomCommand(mf, target, "", 0, 0,
numClasses, (const char**)classes, 0, 0, target);
for (i = 0; i < numClasses; i ++ )
{
free(classes[i]);
}
free(classes);
free(javaPath);
free(target);
fprintf(outfile,
" }\n"
" }\n");
fclose(outfile);
info->CAPI->FreeArguments(newArgc, newArgv);
return 1;
}
static void FinalPass(void *inf, void *mf)
{
}
static void Destructor(void *inf)
{
}
static const char* GetTerseDocumentation()
{
return "Create Java Archive.";
}
static const char* GetFullDocumentation()
{
return
"VTK_WRAP_JAVA(target SourceLists ...)";
}
void CM_PLUGIN_EXPORT VTK_GENERATE_JAVA_DEPENDENCIESInit(cmLoadedCommandInfo *info)
{
info->InitialPass = InitialPass;
info->FinalPass = FinalPass;
info->Destructor = Destructor;
info->GetTerseDocumentation = GetTerseDocumentation;
info->GetFullDocumentation = GetFullDocumentation;
info->m_Inherited = 0;
info->Name = "VTK_GENERATE_JAVA_DEPENDENCIES";
}