--- Include/pymactoolbox.h.orig 2004-11-05 18:02:59.000000000 +1100 +++ Include/pymactoolbox.h 2009-09-10 18:08:58.000000000 +1000 @@ -8,7 +8,9 @@ #endif #include <Carbon/Carbon.h> +#ifndef __LP64__ #include <QuickTime/QuickTime.h> +#endif /* !__LP64__ */ /* ** Helper routines for error codes and such. @@ -18,8 +20,10 @@ PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ +#ifndef __LP64__ extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert fsspec->path */ +#endif /* !__LP64__ */ /* ** These conversion routines are defined in mactoolboxglue.c itself. */ @@ -83,9 +87,10 @@ #endif /* USE_TOOLBOX_OBJECT_GLUE */ /* macfs exports */ +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ - +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ @@ -101,39 +106,54 @@ extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); /* Ctl exports */ +#ifndef __LP64__ extern PyObject *CtlObj_New(ControlHandle); extern int CtlObj_Convert(PyObject *, ControlHandle *); +#endif /* !__LP64__ */ /* Dlg exports */ +#ifndef __LP64__ extern PyObject *DlgObj_New(DialogPtr); extern int DlgObj_Convert(PyObject *, DialogPtr *); extern PyObject *DlgObj_WhichDialog(DialogPtr); +#endif /* !__LP64__ */ /* Drag exports */ +#ifndef __LP64__ extern PyObject *DragObj_New(DragReference); extern int DragObj_Convert(PyObject *, DragReference *); +#endif /* !__LP64__ */ /* List exports */ +#ifndef __LP64__ extern PyObject *ListObj_New(ListHandle); extern int ListObj_Convert(PyObject *, ListHandle *); +#endif /* !__LP64__ */ /* Menu exports */ +#ifndef __LP64__ extern PyObject *MenuObj_New(MenuHandle); extern int MenuObj_Convert(PyObject *, MenuHandle *); +#endif /* !__LP64__ */ /* Qd exports */ +#ifndef __LP64__ extern PyObject *GrafObj_New(GrafPtr); extern int GrafObj_Convert(PyObject *, GrafPtr *); extern PyObject *BMObj_New(BitMapPtr); extern int BMObj_Convert(PyObject *, BitMapPtr *); extern PyObject *QdRGB_New(RGBColor *); extern int QdRGB_Convert(PyObject *, RGBColor *); +#endif /* !__LP64__ */ /* Qdoffs exports */ +#ifndef __LP64__ extern PyObject *GWorldObj_New(GWorldPtr); extern int GWorldObj_Convert(PyObject *, GWorldPtr *); +#endif /* !__LP64__ */ /* Qt exports */ +#ifndef __LP64__ extern PyObject *TrackObj_New(Track); extern int TrackObj_Convert(PyObject *, Track *); extern PyObject *MovieObj_New(Movie); @@ -146,6 +166,7 @@ extern int UserDataObj_Convert(PyObject *, UserData *); extern PyObject *MediaObj_New(Media); extern int MediaObj_Convert(PyObject *, Media *); +#endif /* !__LP64__ */ /* Res exports */ extern PyObject *ResObj_New(Handle); @@ -154,13 +175,17 @@ extern int OptResObj_Convert(PyObject *, Handle *); /* TE exports */ +#ifndef __LP64__ extern PyObject *TEObj_New(TEHandle); extern int TEObj_Convert(PyObject *, TEHandle *); +#endif /* !__LP64__ */ /* Win exports */ +#ifndef __LP64__ extern PyObject *WinObj_New(WindowPtr); extern int WinObj_Convert(PyObject *, WindowPtr *); extern PyObject *WinObj_WhichWindow(WindowPtr); +#endif /* !__LP64__ */ /* CF exports */ extern PyObject *CFObj_New(CFTypeRef); --- Python/mactoolboxglue.c.orig 2006-07-12 02:44:25.000000000 +1000 +++ Python/mactoolboxglue.c 2009-09-10 19:26:39.000000000 +1000 @@ -105,7 +105,7 @@ return PyErr_Mac(PyMac_GetOSErrException(), err); } - +#ifndef __LP64__ OSErr PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -153,6 +153,7 @@ Py_XDECREF(fs); return err; } +#endif /* !__LP64__ */ /* Convert a 4-char string object argument to an OSType value */ int @@ -417,6 +418,7 @@ GLUE_NEW(GWorldPtr, GWorldObj_New, "Carbon.Qdoffs") GLUE_CONVERT(GWorldPtr, GWorldObj_Convert, "Carbon.Qdoffs") +#ifndef __LP64__ GLUE_NEW(Track, TrackObj_New, "Carbon.Qt") GLUE_CONVERT(Track, TrackObj_Convert, "Carbon.Qt") GLUE_NEW(Movie, MovieObj_New, "Carbon.Qt") @@ -429,6 +431,7 @@ GLUE_CONVERT(UserData, UserDataObj_Convert, "Carbon.Qt") GLUE_NEW(Media, MediaObj_New, "Carbon.Qt") GLUE_CONVERT(Media, MediaObj_Convert, "Carbon.Qt") +#endif /* !__LP64__ */ GLUE_NEW(Handle, ResObj_New, "Carbon.Res") GLUE_CONVERT(Handle, ResObj_Convert, "Carbon.Res") --- Modules/_ctypes/libffi/src/darwin/ffitarget.h.orig 2006-05-26 07:58:05.000000000 +1000 +++ Modules/_ctypes/libffi/src/darwin/ffitarget.h 2009-09-10 20:15:39.000000000 +1000 @@ -4,7 +4,7 @@ * created by configure). This makes is possible to build a univeral binary * of ctypes in one go. */ -#if defined(__i386__) +#if defined(__i386__) || defined(__x86_64__) #ifndef X86_DARWIN #define X86_DARWIN @@ -13,7 +13,7 @@ #include "../src/x86/ffitarget.h" -#elif defined(__ppc__) +#elif defined(__ppc__) || defined(__ppc64__) #ifndef POWERPC_DARWIN #define POWERPC_DARWIN --- Mac/Modules/res/_Resmodule.c.orig 2005-07-04 06:59:44.000000000 +1000 +++ Mac/Modules/res/_Resmodule.c 2009-09-10 20:44:43.000000000 +1000 @@ -414,6 +414,7 @@ return _res; } +#ifndef __LP64__ static PyObject *ResObj_as_Control(ResourceObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -431,6 +432,7 @@ return _res; } +#endif /* !__LP64__ */ static PyObject *ResObj_LoadResource(ResourceObject *_self, PyObject *_args) { @@ -501,10 +503,12 @@ PyDoc_STR("(long newSize) -> None")}, {"GetNextFOND", (PyCFunction)ResObj_GetNextFOND, 1, PyDoc_STR("() -> (Handle _rv)")}, +#ifndef __LP64__ {"as_Control", (PyCFunction)ResObj_as_Control, 1, PyDoc_STR("Return this resource/handle as a Control")}, {"as_Menu", (PyCFunction)ResObj_as_Menu, 1, PyDoc_STR("Return this resource/handle as a Menu")}, +#endif /* !__LP64__ */ {"LoadResource", (PyCFunction)ResObj_LoadResource, 1, PyDoc_STR("() -> None")}, {"AutoDispose", (PyCFunction)ResObj_AutoDispose, 1, @@ -1152,6 +1156,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_OpenRFPerm(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1287,6 +1292,7 @@ _res = Py_None; return _res; } +#endif /* !__LP64__ */ static PyObject *Res_InsertResourceFile(PyObject *_self, PyObject *_args) { @@ -1327,6 +1333,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSpResourceFileAlreadyOpen(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1413,6 +1420,7 @@ nextRefNum); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args) { @@ -1438,6 +1446,7 @@ return _res; } +#ifndef __LP64__ static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -1534,6 +1543,7 @@ PyMac_BuildFSSpec, &newSpec); return _res; } +#endif /* !__LP64__ */ static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args) { @@ -1637,6 +1647,7 @@ PyDoc_STR("(short refNum) -> (short _rv)")}, {"SetResFileAttrs", (PyCFunction)Res_SetResFileAttrs, 1, PyDoc_STR("(short refNum, short attrs) -> None")}, +#ifndef __LP64__ {"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1, PyDoc_STR("(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)")}, {"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1, @@ -1647,10 +1658,12 @@ PyDoc_STR("(FSSpec spec, SignedByte permission) -> (short _rv)")}, {"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1, PyDoc_STR("(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None")}, +#endif /* !__LP64__ */ {"InsertResourceFile", (PyCFunction)Res_InsertResourceFile, 1, PyDoc_STR("(SInt16 refNum, RsrcChainLocation where) -> None")}, {"DetachResourceFile", (PyCFunction)Res_DetachResourceFile, 1, PyDoc_STR("(SInt16 refNum) -> None")}, +#ifndef __LP64__ {"FSpResourceFileAlreadyOpen", (PyCFunction)Res_FSpResourceFileAlreadyOpen, 1, PyDoc_STR("(FSSpec resourceFile) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSpOpenOrphanResFile", (PyCFunction)Res_FSpOpenOrphanResFile, 1, @@ -1659,14 +1672,17 @@ PyDoc_STR("() -> (SInt16 refNum)")}, {"GetNextResourceFile", (PyCFunction)Res_GetNextResourceFile, 1, PyDoc_STR("(SInt16 curRefNum) -> (SInt16 nextRefNum)")}, +#endif /* !__LP64__ */ {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1, PyDoc_STR("(FSRef ref, SignedByte permission) -> (short _rv)")}, +#ifndef __LP64__ {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)")}, {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1, PyDoc_STR("(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)")}, {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1, PyDoc_STR("(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (FSRef newRef, FSSpec newSpec)")}, +#endif /* !__LP64__ */ {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1, PyDoc_STR("(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (SInt16 refNum)")}, {"Handle", (PyCFunction)Res_Handle, 1, --- Mac/Modules/MacOS.c.orig 2006-07-26 05:20:54.000000000 +1000 +++ Mac/Modules/MacOS.c 2009-09-10 21:47:34.000000000 +1000 @@ -54,7 +54,7 @@ do_close(rfobject *self) { if (self->isclosed ) return; - (void)FSClose(self->fRefNum); + (void)FSCloseFork(self->fRefNum); self->isclosed = 1; } @@ -68,6 +68,7 @@ long n; PyObject *v; OSErr err; + ByteCount n2; if (self->isclosed) { PyErr_SetString(PyExc_ValueError, "Operation on closed file"); @@ -81,13 +82,13 @@ if (v == NULL) return NULL; - err = FSRead(self->fRefNum, &n, PyString_AsString(v)); + err = FSReadFork(self->fRefNum, fsAtMark, 0, n, PyString_AsString(v), &n2); if (err && err != eofErr) { PyMac_Error(err); Py_DECREF(v); return NULL; } - _PyString_Resize(&v, n); + _PyString_Resize(&v, n2); return v; } @@ -109,7 +110,7 @@ } if (!PyArg_ParseTuple(args, "s#", &buffer, &size)) return NULL; - err = FSWrite(self->fRefNum, &size, buffer); + err = FSWriteFork(self->fRefNum, fsAtMark, 0, size, buffer, NULL); if (err) { PyMac_Error(err); return NULL; @@ -126,9 +127,9 @@ static PyObject * rf_seek(rfobject *self, PyObject *args) { - long amount, pos; + long amount; int whence = SEEK_SET; - long eof; + int mode; OSErr err; if (self->isclosed) { @@ -138,35 +139,23 @@ if (!PyArg_ParseTuple(args, "l|i", &amount, &whence)) return NULL; - if ((err = GetEOF(self->fRefNum, &eof))) - goto ioerr; - switch (whence) { case SEEK_CUR: - if ((err = GetFPos(self->fRefNum, &pos))) - goto ioerr; + mode = fsFromMark; break; case SEEK_END: - pos = eof; + mode = fsFromLEOF; break; case SEEK_SET: - pos = 0; + mode = fsFromStart; break; default: PyErr_BadArgument(); return NULL; } - pos += amount; - - /* Don't bother implementing seek past EOF */ - if (pos > eof || pos < 0) { - PyErr_BadArgument(); - return NULL; - } - - if ((err = SetFPos(self->fRefNum, fsFromStart, pos)) ) { -ioerr: + err = FSSetForkPosition(self->fRefNum, mode, amount); + if (err != noErr) { PyMac_Error(err); return NULL; } @@ -182,7 +171,7 @@ static PyObject * rf_tell(rfobject *self, PyObject *args) { - long where; + long long where; OSErr err; if (self->isclosed) { @@ -191,11 +180,13 @@ } if (!PyArg_ParseTuple(args, "")) return NULL; - if ((err = GetFPos(self->fRefNum, &where)) ) { + + err = FSGetForkPosition(self->fRefNum, &where); + if (err != noErr) { PyMac_Error(err); return NULL; } - return PyInt_FromLong(where); + return PyLong_FromLongLong(where); } static char rf_close__doc__[] = @@ -292,17 +283,61 @@ static PyObject * MacOS_GetCreatorAndType(PyObject *self, PyObject *args) { - FSSpec fss; - FInfo info; PyObject *creator, *type, *res; OSErr err; - - if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) + FSRef ref; + FSCatalogInfo cataloginfo; + FileInfo* finfo; + + if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSRef, &ref)) { +#ifndef __LP64__ + /* This function is documented to take an FSSpec as well, + * which only works in 32-bit mode. + */ + PyErr_Clear(); + FSSpec fss; + FInfo info; + + if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) + return NULL; + + if ((err = FSpGetFInfo(&fss, &info)) != noErr) { + return PyErr_Mac(MacOS_Error, err); + } + creator = PyString_FromStringAndSize( + (char *)&info.fdCreator, 4); + type = PyString_FromStringAndSize((char *)&info.fdType, 4); + res = Py_BuildValue("OO", creator, type); + Py_DECREF(creator); + Py_DECREF(type); + return res; +#else /* __LP64__ */ + return NULL; +#endif /* __LP64__ */ + } + + err = FSGetCatalogInfo(&ref, + kFSCatInfoFinderInfo|kFSCatInfoNodeFlags, &cataloginfo, + NULL, NULL, NULL); + if (err != noErr) { + PyErr_Mac(MacOS_Error, err); return NULL; - if ((err = FSpGetFInfo(&fss, &info)) != noErr) - return PyErr_Mac(MacOS_Error, err); - creator = PyString_FromStringAndSize((char *)&info.fdCreator, 4); - type = PyString_FromStringAndSize((char *)&info.fdType, 4); + } + + if ((cataloginfo.nodeFlags & kFSNodeIsDirectoryMask) != 0) { + /* Directory: doesn't have type/creator info. + * + * The specific error code is for backward compatibility with + * earlier versions. + */ + PyErr_Mac(MacOS_Error, fnfErr); + return NULL; + + } + finfo = (FileInfo*)&(cataloginfo.finderInfo); + creator = PyString_FromStringAndSize((char*)&(finfo->fileCreator), 4); + type = PyString_FromStringAndSize((char*)&(finfo->fileType), 4); + res = Py_BuildValue("OO", creator, type); Py_DECREF(creator); Py_DECREF(type); @@ -314,20 +349,66 @@ static PyObject * MacOS_SetCreatorAndType(PyObject *self, PyObject *args) { - FSSpec fss; ResType creator, type; - FInfo info; + FSRef ref; + FileInfo* finfo; OSErr err; - + FSCatalogInfo cataloginfo; + if (!PyArg_ParseTuple(args, "O&O&O&", + PyMac_GetFSRef, &ref, PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) { +#ifndef __LP64__ + /* Try to handle FSSpec arguments, for backward compatibility */ + FSSpec fss; + FInfo info; + + if (!PyArg_ParseTuple(args, "O&O&O&", PyMac_GetFSSpec, &fss, PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) + return NULL; + + if ((err = FSpGetFInfo(&fss, &info)) != noErr) + return PyErr_Mac(MacOS_Error, err); + + info.fdCreator = creator; + info.fdType = type; + + if ((err = FSpSetFInfo(&fss, &info)) != noErr) + return PyErr_Mac(MacOS_Error, err); + Py_INCREF(Py_None); + return Py_None; +#else /* __LP64__ */ + return NULL; +#endif /* __LP64__ */ + } + + err = FSGetCatalogInfo(&ref, + kFSCatInfoFinderInfo|kFSCatInfoNodeFlags, &cataloginfo, + NULL, NULL, NULL); + if (err != noErr) { + PyErr_Mac(MacOS_Error, err); return NULL; - if ((err = FSpGetFInfo(&fss, &info)) != noErr) - return PyErr_Mac(MacOS_Error, err); - info.fdCreator = creator; - info.fdType = type; - if ((err = FSpSetFInfo(&fss, &info)) != noErr) - return PyErr_Mac(MacOS_Error, err); + } + + if ((cataloginfo.nodeFlags & kFSNodeIsDirectoryMask) != 0) { + /* Directory: doesn't have type/creator info. + * + * The specific error code is for backward compatibility with + * earlier versions. + */ + PyErr_Mac(MacOS_Error, fnfErr); + return NULL; + + } + finfo = (FileInfo*)&(cataloginfo.finderInfo); + finfo->fileCreator = creator; + finfo->fileType = type; + + err = FSSetCatalogInfo(&ref, kFSCatInfoFinderInfo, &cataloginfo); + if (err != noErr) { + PyErr_Mac(MacOS_Error, fnfErr); + return NULL; + } + Py_INCREF(Py_None); return Py_None; } @@ -399,6 +480,7 @@ return Py_BuildValue("s", buf); } +#ifndef __LP64__ static char splash_doc[] = "Open a splash-screen dialog by resource-id (0=close)"; static PyObject * @@ -470,6 +552,7 @@ Py_INCREF(Py_None); return Py_None; } +#endif /* !__LP64__ */ static char WMAvailable_doc[] = "True if this process can interact with the display." @@ -530,17 +613,18 @@ { OSErr err; char *mode = "r"; - FSSpec fss; - SignedByte permission = 1; + FSRef ref; + SInt8 permission = fsRdPerm; rfobject *fp; + HFSUniStr255 name; - if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSSpec, &fss, &mode)) + if (!PyArg_ParseTuple(args, "O&|s", PyMac_GetFSRef, &ref, &mode)) return NULL; while (*mode) { switch (*mode++) { case '*': break; - case 'r': permission = 1; break; - case 'w': permission = 2; break; + case 'r': permission = fsRdPerm; break; + case 'w': permission = fsWrPerm; break; case 'b': break; default: PyErr_BadArgument(); @@ -548,33 +632,18 @@ } } - if ( (fp = newrfobject()) == NULL ) + err = FSGetResourceForkName(&name); + if (err != noErr) { + PyMac_Error(err); return NULL; + } - err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum); + if ( (fp = newrfobject()) == NULL ) + return NULL; + - if ( err == fnfErr ) { - /* In stead of doing complicated things here to get creator/type - ** correct we let the standard i/o library handle it - */ - FILE *tfp; - char pathname[PATHNAMELEN]; - - if ( (err=PyMac_GetFullPathname(&fss, pathname, PATHNAMELEN)) ) { - PyMac_Error(err); - Py_DECREF(fp); - return NULL; - } - - if ( (tfp = fopen(pathname, "w")) == NULL ) { - PyMac_Error(fnfErr); /* What else... */ - Py_DECREF(fp); - return NULL; - } - fclose(tfp); - err = HOpenRF(fss.vRefNum, fss.parID, fss.name, permission, &fp->fRefNum); - } - if ( err ) { + err = FSOpenFork(&ref, name.length, name.unicode, permission, &fp->fRefNum); + if (err != noErr) { Py_DECREF(fp); PyMac_Error(err); return NULL; @@ -589,10 +658,12 @@ {"SetCreatorAndType", MacOS_SetCreatorAndType, 1, setcrtp_doc}, {"GetErrorString", MacOS_GetErrorString, 1, geterr_doc}, {"openrf", MacOS_openrf, 1, openrf_doc}, +#ifndef __LP64__ {"splash", MacOS_splash, 1, splash_doc}, {"DebugStr", MacOS_DebugStr, 1, DebugStr_doc}, - {"GetTicks", MacOS_GetTicks, 1, GetTicks_doc}, {"SysBeep", MacOS_SysBeep, 1, SysBeep_doc}, +#endif /* !__LP64__ */ + {"GetTicks", MacOS_GetTicks, 1, GetTicks_doc}, {"WMAvailable", MacOS_WMAvailable, 1, WMAvailable_doc}, {NULL, NULL} /* Sentinel */ }; --- Mac/Modules/file/_Filemodule.c.orig 2006-05-29 07:57:35.000000000 +1000 +++ Mac/Modules/file/_Filemodule.c 2009-09-10 22:48:47.000000000 +1000 @@ -18,9 +18,11 @@ #include <Carbon/Carbon.h> #ifdef USE_TOOLBOX_OBJECT_GLUE +#ifndef __LP64__ extern int _PyMac_GetFSSpec(PyObject *v, FSSpec *spec); -extern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr); extern PyObject *_PyMac_BuildFSSpec(FSSpec *spec); +#endif /* !__LP64__ */ +extern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr); extern PyObject *_PyMac_BuildFSRef(FSRef *spec); #define PyMac_GetFSSpec _PyMac_GetFSSpec @@ -28,20 +30,26 @@ #define PyMac_BuildFSSpec _PyMac_BuildFSSpec #define PyMac_BuildFSRef _PyMac_BuildFSRef #else +#ifndef __LP64__ extern int PyMac_GetFSSpec(PyObject *v, FSSpec *spec); -extern int PyMac_GetFSRef(PyObject *v, FSRef *fsr); extern PyObject *PyMac_BuildFSSpec(FSSpec *spec); +#endif /* !__LP64__ */ +extern int PyMac_GetFSRef(PyObject *v, FSRef *fsr); extern PyObject *PyMac_BuildFSRef(FSRef *spec); #endif /* Forward declarations */ +#ifndef __LP64__ static PyObject *FInfo_New(FInfo *itself); -static PyObject *FSRef_New(FSRef *itself); static PyObject *FSSpec_New(FSSpec *itself); +#define FSSpec_Convert PyMac_GetFSSpec +#endif /* !__LP64__ */ +static PyObject *FSRef_New(FSRef *itself); static PyObject *Alias_New(AliasHandle itself); +#ifndef __LP64__ static int FInfo_Convert(PyObject *v, FInfo *p_itself); +#endif /* !__LP64__ */ #define FSRef_Convert PyMac_GetFSRef -#define FSSpec_Convert PyMac_GetFSSpec static int Alias_Convert(PyObject *v, AliasHandle *p_itself); /* @@ -62,6 +70,7 @@ /* ** Optional fsspec and fsref pointers. None will pass NULL */ +#ifndef __LP64__ static int myPyMac_GetOptFSSpecPtr(PyObject *v, FSSpec **spec) { @@ -71,6 +80,7 @@ } return PyMac_GetFSSpec(v, *spec); } +#endif /* !__LP64__ */ static int myPyMac_GetOptFSRefPtr(PyObject *v, FSRef **ref) @@ -92,6 +102,7 @@ return Py_BuildValue("u#", itself->unicode, itself->length); } +#ifndef __LP64__ static OSErr _PyMac_GetFullPathname(FSSpec *fss, char *path, int len) { @@ -135,6 +146,7 @@ } return 0; } +#endif /* !__LP64__ */ static PyObject *File_Error; @@ -282,12 +294,28 @@ static PyObject *FSCatalogInfo_get_permissions(FSCatalogInfoObject *self, void *closure) { - return Py_BuildValue("(llll)", self->ob_itself.permissions[0], self->ob_itself.permissions[1], self->ob_itself.permissions[2], self->ob_itself.permissions[3]); + FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions); + return Py_BuildValue("(llll)", info->userID, info->groupID, info->userAccess, info->mode); } static int FSCatalogInfo_set_permissions(FSCatalogInfoObject *self, PyObject *v, void *closure) { - return PyArg_Parse(v, "(llll)", &self->ob_itself.permissions[0], &self->ob_itself.permissions[1], &self->ob_itself.permissions[2], &self->ob_itself.permissions[3])-1; + long userID; + long groupID; + long userAccess; + long mode; + int r; + + FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions); + + r = PyArg_Parse(v, "(llll)", &userID, &groupID, &userAccess, &mode); + if (!r) { + return -1; + } + info->userID = userID; + info->groupID = groupID; + info->userAccess = userAccess; + info->mode = mode; return 0; } @@ -501,6 +529,7 @@ /* ----------------------- Object type FInfo ------------------------ */ +#ifndef __LP64__ static PyTypeObject FInfo_Type; #define FInfo_Check(x) ((x)->ob_type == &FInfo_Type || PyObject_TypeCheck((x), &FInfo_Type)) @@ -682,6 +711,7 @@ FInfo_tp_free, /* tp_free */ }; +#endif /* !__LP64__ */ /* --------------------- End object type FInfo ---------------------- */ @@ -729,6 +759,7 @@ self->ob_type->tp_free((PyObject *)self); } +#ifndef __LP64__ static PyObject *Alias_ResolveAlias(AliasObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -818,6 +849,7 @@ wasChanged); return _res; } +#endif /* !__LP64__ */ static PyObject *Alias_FSResolveAliasWithMountFlags(AliasObject *_self, PyObject *_args) { @@ -891,6 +923,7 @@ } static PyMethodDef Alias_methods[] = { +#ifndef __LP64__ {"ResolveAlias", (PyCFunction)Alias_ResolveAlias, 1, PyDoc_STR("(FSSpec fromFile) -> (FSSpec target, Boolean wasChanged)")}, {"GetAliasInfo", (PyCFunction)Alias_GetAliasInfo, 1, @@ -899,6 +932,7 @@ PyDoc_STR("(FSSpec fromFile, unsigned long mountFlags) -> (FSSpec target, Boolean wasChanged)")}, {"FollowFinderAlias", (PyCFunction)Alias_FollowFinderAlias, 1, PyDoc_STR("(FSSpec fromFile, Boolean logon) -> (FSSpec target, Boolean wasChanged)")}, +#endif /* !__LP64__ */ {"FSResolveAliasWithMountFlags", (PyCFunction)Alias_FSResolveAliasWithMountFlags, 1, PyDoc_STR("(FSRef fromFile, unsigned long mountFlags) -> (FSRef target, Boolean wasChanged)")}, {"FSResolveAlias", (PyCFunction)Alias_FSResolveAlias, 1, @@ -1033,6 +1067,7 @@ /* ----------------------- Object type FSSpec ----------------------- */ +#ifndef __LP64__ static PyTypeObject FSSpec_Type; @@ -1488,6 +1523,7 @@ FSSpec_tp_free, /* tp_free */ }; +#endif /* !__LP64__ */ /* --------------------- End object type FSSpec --------------------- */ @@ -1568,7 +1604,9 @@ FSCatalogInfoBitmap whichInfo; FSCatalogInfo catalogInfo; FSRef newRef; +#ifndef __LP64__ FSSpec newSpec; +#endif /* !__LP64__ */ if (!PyArg_ParseTuple(_args, "u#lO&", &nameLength__in__, &nameLength__in_len__, &whichInfo, @@ -1580,11 +1618,20 @@ whichInfo, &catalogInfo, &newRef, - &newSpec); +#ifndef __LP64__ + &newSpec +#else + NULL +#endif /* !__LP64__ */ + ); if (_err != noErr) return PyMac_Error(_err); +#ifndef __LP64__ _res = Py_BuildValue("O&O&", FSRef_New, &newRef, FSSpec_New, &newSpec); +#else + _res = Py_BuildValue("O&O", FSRef_New, &newRef, Py_None); +#endif /* !__LP64__ */ return _res; } @@ -1598,7 +1645,9 @@ FSCatalogInfoBitmap whichInfo; FSCatalogInfo catalogInfo; FSRef newRef; +#ifndef __LP64__ FSSpec newSpec; +#endif /* !__LP64__ */ UInt32 newDirID; if (!PyArg_ParseTuple(_args, "u#lO&", &nameLength__in__, &nameLength__in_len__, @@ -1611,13 +1660,25 @@ whichInfo, &catalogInfo, &newRef, +#ifndef __LP64__ &newSpec, +#else + NULL, +#endif /* !__LP64__ */ &newDirID); if (_err != noErr) return PyMac_Error(_err); + +#ifndef __LP64__ _res = Py_BuildValue("O&O&l", FSRef_New, &newRef, FSSpec_New, &newSpec, newDirID); +#else + _res = Py_BuildValue("O&Ol", + FSRef_New, &newRef, + Py_None, + newDirID); +#endif /* !__LP64__ */ return _res; } @@ -1699,7 +1760,9 @@ FSCatalogInfoBitmap whichInfo; FSCatalogInfo catalogInfo; HFSUniStr255 outName; +#ifndef __LP64__ FSSpec fsSpec; +#endif /* !__LP64__ */ FSRef parentRef; if (!PyArg_ParseTuple(_args, "l", &whichInfo)) @@ -1708,14 +1771,26 @@ whichInfo, &catalogInfo, &outName, +#ifndef __LP64__ &fsSpec, +#else + NULL, +#endif /* !__LP64__ */ &parentRef); if (_err != noErr) return PyMac_Error(_err); +#ifndef __LP64__ _res = Py_BuildValue("O&O&O&O&", FSCatalogInfo_New, &catalogInfo, PyMac_BuildHFSUniStr255, &outName, FSSpec_New, &fsSpec, FSRef_New, &parentRef); +#else + _res = Py_BuildValue("O&O&OO&", + FSCatalogInfo_New, &catalogInfo, + PyMac_BuildHFSUniStr255, &outName, + Py_None, + FSRef_New, &parentRef); +#endif /* !__LP64__ */ return _res; } @@ -1784,7 +1859,7 @@ UniCharCount forkNameLength__len__; int forkNameLength__in_len__; SInt8 permissions; - SInt16 forkRefNum; + FSIORefNum forkRefNum; if (!PyArg_ParseTuple(_args, "u#b", &forkNameLength__in__, &forkNameLength__in_len__, &permissions)) @@ -2034,7 +2109,7 @@ /* --------------------- End object type FSRef ---------------------- */ - +#ifndef __LP64__ static PyObject *File_UnmountVol(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -2562,6 +2637,7 @@ FSSpec_New, &spec); return _res; } +#endif /* !__LP64__ */ static PyObject *File_FSGetForkPosition(PyObject *_self, PyObject *_args) { @@ -2785,6 +2861,7 @@ return _res; } +#ifndef __LP64__ static PyObject *File_NewAlias(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; @@ -2933,6 +3010,7 @@ wasAliased); return _res; } +#endif /* !__LP64__ */ static PyObject *File_FSNewAlias(PyObject *_self, PyObject *_args) { @@ -3050,6 +3128,7 @@ } static PyMethodDef File_methods[] = { +#ifndef __LP64__ {"UnmountVol", (PyCFunction)File_UnmountVol, 1, PyDoc_STR("(Str63 volName, short vRefNum) -> None")}, {"FlushVol", (PyCFunction)File_FlushVol, 1, @@ -3100,6 +3179,7 @@ PyDoc_STR("(short vRefNum, long dirID, Str255 oldName, long newDirID, Str255 newName) -> None")}, {"FSMakeFSSpec", (PyCFunction)File_FSMakeFSSpec, 1, PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> (FSSpec spec)")}, +#endif /* !__LP64__ */ {"FSGetForkPosition", (PyCFunction)File_FSGetForkPosition, 1, PyDoc_STR("(SInt16 forkRefNum) -> (SInt64 position)")}, {"FSSetForkPosition", (PyCFunction)File_FSSetForkPosition, 1, @@ -3124,6 +3204,7 @@ PyDoc_STR("(UInt8 * path, FNMessage message, OptionBits flags) -> None")}, {"FNNotifyAll", (PyCFunction)File_FNNotifyAll, 1, PyDoc_STR("(FNMessage message, OptionBits flags) -> None")}, +#ifndef __LP64__ {"NewAlias", (PyCFunction)File_NewAlias, 1, PyDoc_STR("(FSSpec fromFile, FSSpec target) -> (AliasHandle alias)")}, {"NewAliasMinimalFromFullPath", (PyCFunction)File_NewAliasMinimalFromFullPath, 1, @@ -3136,6 +3217,7 @@ PyDoc_STR("(FSSpec fromFile, FSSpec target, AliasHandle alias) -> (Boolean wasChanged)")}, {"ResolveAliasFileWithMountFlagsNoUI", (PyCFunction)File_ResolveAliasFileWithMountFlagsNoUI, 1, PyDoc_STR("(FSSpec theSpec, Boolean resolveAliasChains, unsigned long mountFlags) -> (FSSpec theSpec, Boolean targetIsFolder, Boolean wasAliased)")}, +#endif /* !__LP64__ */ {"FSNewAlias", (PyCFunction)File_FSNewAlias, 1, PyDoc_STR("(FSRef fromFile, FSRef target) -> (AliasHandle inAlias)")}, {"FSResolveAliasFileWithMountFlags", (PyCFunction)File_FSResolveAliasFileWithMountFlags, 1, @@ -3150,7 +3232,7 @@ }; - +#ifndef __LP64__ int PyMac_GetFSSpec(PyObject *v, FSSpec *spec) { @@ -3188,12 +3270,15 @@ } return 0; } +#endif /* !__LP64__ */ int PyMac_GetFSRef(PyObject *v, FSRef *fsr) { OSStatus err; +#ifndef __LP64__ FSSpec fss; +#endif /* !__LP64__ */ if (FSRef_Check(v)) { *fsr = ((FSRefObject *)v)->ob_itself; @@ -3211,6 +3296,7 @@ return !err; } /* XXXX Should try unicode here too */ +#ifndef __LP64__ /* Otherwise we try to go via an FSSpec */ if (FSSpec_Check(v)) { fss = ((FSSpecObject *)v)->ob_itself; @@ -3219,15 +3305,18 @@ PyMac_Error(err); return 0; } +#endif /* !__LP64__ */ PyErr_SetString(PyExc_TypeError, "FSRef, FSSpec or pathname required"); return 0; } +#ifndef __LP64__ extern PyObject * PyMac_BuildFSSpec(FSSpec *spec) { return FSSpec_New(spec); } +#endif /* !__LP64__ */ extern PyObject * PyMac_BuildFSRef(FSRef *spec) @@ -3242,10 +3331,11 @@ PyObject *d; - +#ifndef __LP64__ PyMac_INIT_TOOLBOX_OBJECT_NEW(FSSpec *, PyMac_BuildFSSpec); - PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef); PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSSpec, PyMac_GetFSSpec); +#endif /* !__LP64__ */ + PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef); PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSRef, PyMac_GetFSRef); @@ -3262,6 +3352,7 @@ /* Backward-compatible name */ Py_INCREF(&FSCatalogInfo_Type); PyModule_AddObject(m, "FSCatalogInfoType", (PyObject *)&FSCatalogInfo_Type); +#ifndef __LP64__ FInfo_Type.ob_type = &PyType_Type; if (PyType_Ready(&FInfo_Type) < 0) return; Py_INCREF(&FInfo_Type); @@ -3269,6 +3360,7 @@ /* Backward-compatible name */ Py_INCREF(&FInfo_Type); PyModule_AddObject(m, "FInfoType", (PyObject *)&FInfo_Type); +#endif /* !__LP64__ */ Alias_Type.ob_type = &PyType_Type; if (PyType_Ready(&Alias_Type) < 0) return; Py_INCREF(&Alias_Type); @@ -3276,6 +3368,7 @@ /* Backward-compatible name */ Py_INCREF(&Alias_Type); PyModule_AddObject(m, "AliasType", (PyObject *)&Alias_Type); +#ifndef __LP64__ FSSpec_Type.ob_type = &PyType_Type; if (PyType_Ready(&FSSpec_Type) < 0) return; Py_INCREF(&FSSpec_Type); @@ -3283,6 +3376,7 @@ /* Backward-compatible name */ Py_INCREF(&FSSpec_Type); PyModule_AddObject(m, "FSSpecType", (PyObject *)&FSSpec_Type); +#endif /* !__LP64__ */ FSRef_Type.ob_type = &PyType_Type; if (PyType_Ready(&FSRef_Type) < 0) return; Py_INCREF(&FSRef_Type); Index: Lib/plat-mac/macresource.py =================================================================== --- Lib/plat-mac/macresource.py (revision 74680) +++ Lib/plat-mac/macresource.py (revision 74681) @@ -79,8 +79,8 @@ AppleSingle file""" try: refno = Res.FSpOpenResFile(pathname, 1) - except Res.Error, arg: - if arg[0] in (-37, -39): + except (AttributeError, Res.Error), arg: + if isinstance(arg, AttributeError) or arg[0] in (-37, -39): # No resource fork. We may be on OSX, and this may be either # a data-fork based resource file or a AppleSingle file # from the CVS repository. @@ -106,8 +106,8 @@ try: refno = Res.FSpOpenResFile(pathname, 1) Res.CloseResFile(refno) - except Res.Error, arg: - if arg[0] in (-37, -39): + except (AttributeError, Res.Error), arg: + if isinstance(arg, AttributeError) or arg[0] in (-37, -39): # No resource fork. We may be on OSX, and this may be either # a data-fork based resource file or a AppleSingle file # from the CVS repository. Index: Lib/plat-mac/applesingle.py =================================================================== --- Lib/plat-mac/applesingle.py (revision 74680) +++ Lib/plat-mac/applesingle.py (revision 74681) @@ -119,8 +119,13 @@ if not hasattr(infile, 'read'): if isinstance(infile, Carbon.File.Alias): infile = infile.ResolveAlias()[0] - if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): - infile = infile.as_pathname() + + if hasattr(Carbon.File, "FSSpec"): + if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): + infile = infile.as_pathname() + else: + if isinstance(infile, Carbon.File.FSRef): + infile = infile.as_pathname() infile = open(infile, 'rb') asfile = AppleSingle(infile, verbose=verbose) Index: Mac/scripts/BuildApplet.py =================================================================== --- Mac/scripts/BuildApplet.py (revision 74680) +++ Mac/scripts/BuildApplet.py (revision 74681) @@ -12,7 +12,10 @@ import os import MacOS -import EasyDialogs +try: + import EasyDialogs +except ImportError: + EasyDialogs = None import buildtools import getopt @@ -32,7 +35,10 @@ try: buildapplet() except buildtools.BuildError, detail: - EasyDialogs.Message(detail) + if EasyDialogs is None: + print detail + else: + EasyDialogs.Message(detail) def buildapplet(): @@ -46,6 +52,10 @@ # Ask for source text if not specified in sys.argv[1:] if not sys.argv[1:]: + if EasyDialogs is None: + usage() + sys.exit(1) + filename = EasyDialogs.AskFileForOpen(message='Select Python source or applet:', typeList=('TEXT', 'APPL')) if not filename: Index: Lib/plat-mac/buildtools.py =================================================================== --- Lib/plat-mac/buildtools.py (revision 74680) +++ Lib/plat-mac/buildtools.py (revision 74681) @@ -15,7 +15,10 @@ import MacOS import macostools import macresource -import EasyDialogs +try: + import EasyDialogs +except ImportError: + EasyDialogs = None import shutil @@ -67,9 +70,13 @@ rsrcname=None, others=[], raw=0, progress="default", destroot=""): if progress == "default": - progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) - progress.label("Compiling...") - progress.inc(0) + if EasyDialogs is None: + print "Compiling %s"%(os.path.split(filename)[1],) + process = None + else: + progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) + progress.label("Compiling...") + progress.inc(0) # check for the script name being longer than 32 chars. This may trigger a bug # on OSX that can destroy your sourcefile. if '#' in os.path.split(filename)[1]: @@ -119,7 +126,11 @@ if MacOS.runtimemodel == 'macho': raise BuildError, "No updating yet for MachO applets" if progress: - progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) + if EasyDialogs is None: + print "Updating %s"%(os.path.split(filename)[1],) + progress = None + else: + progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) else: progress = None if not output: