mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
*** empty log message ***
This commit is contained in:
parent
39dc3d9c3e
commit
f718170091
124
pandatool/src/mayaprogs/mayaWrapper.cxx
Normal file
124
pandatool/src/mayaprogs/mayaWrapper.cxx
Normal file
@ -0,0 +1,124 @@
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Under windows, when multiple versions of maya are installed,
|
||||
// maya2egg can accidentally use the wrong version of OpenMaya.dll.
|
||||
// This small wrapper program alters your PATH and MAYA_LOCATION
|
||||
// environment variables in order to ensure that maya2egg finds the
|
||||
// right DLLs.
|
||||
//
|
||||
// To use this wrapper, maya2egg.exe must be renamed to
|
||||
// maya2egg-wrapped.exe. Then, this wrapper program must be
|
||||
// installed as maya2egg.exe
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#ifndef MAYAVERSION
|
||||
#error You must define the symbol MAYAVERSION when compiling mayawrapper.
|
||||
#endif
|
||||
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
|
||||
#include <windows.h>
|
||||
#include <winuser.h>
|
||||
#include <stdlib.h>
|
||||
#include <process.h>
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#define PATH_MAX 1024
|
||||
|
||||
void getMayaLocation(int major, int minor, char *loc)
|
||||
{
|
||||
char key[1024]; HKEY hkey;
|
||||
DWORD size, dtype; LONG res; int retry;
|
||||
loc[0] = 0;
|
||||
|
||||
for (retry=0; retry<3; retry++) {
|
||||
char *developer;
|
||||
switch(retry) {
|
||||
case 0: developer = "Alias|Wavefront"; break;
|
||||
case 1: developer = "Alias"; break;
|
||||
case 2: developer = "Autodesk"; break;
|
||||
}
|
||||
|
||||
sprintf(key, "SOFTWARE\\%s\\Maya\\%d.%d\\Setup\\InstallPath", developer, major, minor);
|
||||
|
||||
res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hkey);
|
||||
if (res == ERROR_SUCCESS) {
|
||||
size=1024;
|
||||
res = RegQueryValueEx(hkey, "MAYA_INSTALL_LOCATION", NULL, &dtype, (LPBYTE)loc, &size);
|
||||
if ((res == ERROR_SUCCESS)&&(dtype == REG_SZ)) {
|
||||
loc[size] = 0;
|
||||
break;
|
||||
} else {
|
||||
loc[0] = 0;
|
||||
}
|
||||
RegCloseKey(hkey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void getWrapperName(char *prog)
|
||||
{
|
||||
DWORD res;
|
||||
res = GetModuleFileName(NULL, prog, 1000);
|
||||
if (res == 0) {
|
||||
prog[0] = 0;
|
||||
return;
|
||||
}
|
||||
int len = strlen(prog);
|
||||
if (_stricmp(prog+len-4, ".exe")) {
|
||||
prog[0] = 0;
|
||||
return;
|
||||
}
|
||||
prog[len-4] = 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int major = MAYAVERSION / 10;
|
||||
int minor = MAYAVERSION - major * 10;
|
||||
char loc[1024], prog[1024];
|
||||
char *cmd, *path, *env1, *env2; int len;
|
||||
STARTUPINFO si; PROCESS_INFORMATION pi;
|
||||
|
||||
if (major == 0) {
|
||||
major = minor;
|
||||
minor = 0;
|
||||
}
|
||||
|
||||
getMayaLocation(major, minor, loc);
|
||||
if (loc[0]==0) {
|
||||
printf("Cannot locate Maya %d.%d (registry key missing)\n", major, minor);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
getWrapperName(prog);
|
||||
if (prog[0]==0) {
|
||||
printf("mayaWrapper cannot determine its own filename (bug)\n");
|
||||
exit(1);
|
||||
}
|
||||
strcat(prog, "-wrapped.exe");
|
||||
|
||||
path = getenv("PATH");
|
||||
if (path == 0) path = "";
|
||||
env1 = (char*)malloc(100 + strlen(loc) + strlen(path));
|
||||
sprintf(env1, "PATH=%s\\bin;%s", loc, path);
|
||||
env2 = (char*)malloc(100 + strlen(loc));
|
||||
sprintf(env2, "MAYA_LOCATION=%s", loc);
|
||||
_putenv(env1);
|
||||
_putenv(env2);
|
||||
|
||||
cmd = GetCommandLine();
|
||||
memset(&si, 0, sizeof(si));
|
||||
si.cb = sizeof(STARTUPINFO);
|
||||
if (CreateProcess(prog, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
|
||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||
exit(0);
|
||||
} else {
|
||||
printf("Could not launch %s\n", prog);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user