*** empty log message ***

This commit is contained in:
Josh Yelon 2007-06-06 21:09:01 +00:00
parent 39dc3d9c3e
commit f718170091

View 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);
}
}