// // main.m // MunkiStatus // // Created by Greg Neagle on 9/21/09. // Copyright 2009 Greg Neagle. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #import #import int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSBundle *mainBundle = [NSBundle mainBundle]; NSString *resourcePath = [mainBundle resourcePath]; NSArray *pythonPathArray = [NSArray arrayWithObjects: resourcePath, [resourcePath stringByAppendingPathComponent:@"PyObjC"], nil]; setenv("PYTHONPATH", [[pythonPathArray componentsJoinedByString:@":"] UTF8String], 1); NSArray *possibleMainExtensions = [NSArray arrayWithObjects: @"py", @"pyc", @"pyo", nil]; NSString *mainFilePath = nil; for (NSString *possibleMainExtension in possibleMainExtensions) { mainFilePath = [mainBundle pathForResource: @"main" ofType: possibleMainExtension]; if ( mainFilePath != nil ) break; } if ( !mainFilePath ) { [NSException raise: NSInternalInconsistencyException format: @"%s:%d main() Failed to find the Main.{py,pyc,pyo} file in the application wrapper's Resources directory.", __FILE__, __LINE__]; } Py_SetProgramName("/usr/bin/python"); Py_Initialize(); PySys_SetArgv(argc, (char **)argv); const char *mainFilePathPtr = [mainFilePath UTF8String]; FILE *mainFile = fopen(mainFilePathPtr, "r"); int result = PyRun_SimpleFile(mainFile, (char *)[[mainFilePath lastPathComponent] UTF8String]); if ( result != 0 ) [NSException raise: NSInternalInconsistencyException format: @"%s:%d main() PyRun_SimpleFile failed with file '%@'. See console for errors.", __FILE__, __LINE__, mainFilePath]; [pool drain]; return result; }