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