]> code.delx.au - notipod/blob - main.m
Initial checkin
[notipod] / main.m
1 /* Copyright 2009 James Bunton <jamesbunton@fastmail.fm>
2 * Licensed for distribution under the GPL version 2.
3 */
4
5 #import <Python/Python.h>
6 #import <Cocoa/Cocoa.h>
7
8 int
9 main(int argc, char** argv)
10 {
11 NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
12
13 NSBundle* mainBundle = [NSBundle mainBundle];
14 NSString* resourcePath = [mainBundle resourcePath];
15 NSArray* pythonPathArray = [NSArray arrayWithObjects: resourcePath, [resourcePath stringByAppendingPathComponent:@"PyObjC"], nil];
16
17 setenv("PYTHONPATH", [[pythonPathArray componentsJoinedByString:@":"] UTF8String], 1);
18
19 NSArray* possibleMainExtensions = [NSArray arrayWithObjects: @"py", @"pyc", @"pyo", nil];
20 NSString* mainFilePath = nil;
21
22 for(NSString* possibleMainExtension in possibleMainExtensions) {
23 mainFilePath = [mainBundle pathForResource: @"main" ofType: possibleMainExtension];
24 if(mainFilePath != nil) break;
25 }
26
27 if(!mainFilePath) {
28 [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__];
29 }
30
31 Py_SetProgramName("/usr/bin/python");
32 Py_Initialize();
33 PySys_SetArgv(argc, (char**)argv);
34
35 const char* mainFilePathPtr = [mainFilePath UTF8String];
36 FILE* mainFile = fopen(mainFilePathPtr, "r");
37 int result = PyRun_SimpleFile(mainFile, (char*)[[mainFilePath lastPathComponent] UTF8String]);
38
39 if(result != 0)
40 [NSException raise: NSInternalInconsistencyException
41 format: @"%s:%d main() PyRun_SimpleFile failed with file '%@'. See console for errors.", __FILE__, __LINE__, mainFilePath];
42
43 [pool drain];
44
45 return result;
46 }
47