//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #include "platformMacCarb/platformMacCarb.h" #include "macCarbUtil.h" //#include #include "console/console.h" //------------------------------------------------------------------------------- // Function name: LoadPrivateFrameworksBundle // Summary: Looks in the application's Frameworks folder for a framework, // and loads it if it finds it. // Adpoted from a forum post by David 'FenrirWolf' Grace. //------------------------------------------------------------------------------- bool LoadPrivateFrameworkBundle(CFStringRef framework, CFBundleRef *bundlePtr) { // Looks in the application bundle for a framework, and loads it if it finds it. CFURLRef privFrameworksURL, bundleURL; if(!( privFrameworksURL = CFBundleCopyPrivateFrameworksURL( CFBundleGetMainBundle() )) ) { return false; } if(!( bundleURL = CFURLCreateCopyAppendingPathComponent(NULL, privFrameworksURL, framework, false)) ) { CFRelease(privFrameworksURL); return false; } *bundlePtr = CFBundleCreate(NULL, bundleURL); if (*bundlePtr && CFBundleLoadExecutable( *bundlePtr ) ) { //found it under the apps private framework CFRelease(privFrameworksURL); CFRelease(bundleURL); return true; } CFRelease(privFrameworksURL); CFRelease(bundleURL); if(*bundlePtr != NULL) CFRelease(*bundlePtr); return false; } //------------------------------------------------------------------------------- // Function name: LoadFrameworksBundle // Summary: Looks for a framework first in the app then the system, // and loads it if it finds it. // Adopted from Apple "CallMachOFramework" sample application //------------------------------------------------------------------------------- bool LoadFrameworkBundle(CFStringRef framework, CFBundleRef *bundlePtr) { const int numLocs = 5; short vols[numLocs] = {kOnAppropriateDisk, kOnAppropriateDisk, kOnAppropriateDisk, kLocalDomain, kLocalDomain}; OSType folderType[numLocs] = {kPrivateFrameworksFolderType, kFrameworksFolderType, kApplicationSupportFolderType, kFrameworksFolderType, kDomainLibraryFolderType}; OSStatus err; FSRef frameworksFolderRef; CFURLRef baseURL; CFURLRef bundleURL; if (bundlePtr==NULL) return false; *bundlePtr = NULL; // Look in the application's Frameworks folder before looking in the system if( LoadPrivateFrameworkBundle(framework, bundlePtr) ) return true; // Yay! We found it, so return true... // Otherwise, fall through to Torques usual bundle load logic baseURL = NULL; bundleURL = NULL; for (int i = 0; i