[57388] trunk/dports/lang/python25

jmr at macports.org jmr at macports.org
Thu Sep 10 06:23:43 PDT 2009


Revision: 57388
          http://trac.macports.org/changeset/57388
Author:   jmr at macports.org
Date:     2009-09-10 06:23:37 -0700 (Thu, 10 Sep 2009)
Log Message:
-----------
python25: backport enough 64-bit fixes from 2.6 to get a reasonable Mac build, fix curses module, re-enable parallel build, fix build/destroot arg quoting, remove darwin 7

Modified Paths:
--------------
    trunk/dports/lang/python25/Portfile
    trunk/dports/lang/python25/files/patch-setup.py.diff

Added Paths:
-----------
    trunk/dports/lang/python25/files/patch-64bit.diff

Modified: trunk/dports/lang/python25/Portfile
===================================================================
--- trunk/dports/lang/python25/Portfile	2009-09-10 11:54:16 UTC (rev 57387)
+++ trunk/dports/lang/python25/Portfile	2009-09-10 13:23:37 UTC (rev 57388)
@@ -5,7 +5,7 @@
 
 name                    python25
 version                 2.5.4
-revision                6
+revision                7
 set branch              [join [lrange [split ${version} .] 0 1] .]
 categories              lang
 platforms               darwin
@@ -30,7 +30,10 @@
 patchfiles              patch-Makefile.pre.in.diff \
                         patch-Lib-cgi.py.diff \
                         patch-Lib-distutils-dist.py.diff \
-                        patch-setup.py.diff
+                        patch-setup.py.diff \
+                        patch-configure-badcflags.diff \
+                        patch-configure-arch_only.diff \
+                        patch-64bit.diff
 
 depends_lib             port:gettext port:zlib port:openssl port:tk \
                         port:sqlite3 port:db46 port:bzip2 \
@@ -42,7 +45,7 @@
                         --enable-ipv6 \
                         --with-cxx=${configure.cxx}
 
-use_parallel_build      no
+configure.cppflags-append -I${prefix}/include/ncurses
 
 post-patch {
         reinplace "s|__PREFIX__|${prefix}|g" ${worksrcpath}/Lib/cgi.py \
@@ -73,23 +76,15 @@
 destroot.target         frameworkinstall maninstall
 
 # ensure that correct compiler is used
-build.args-append  MAKE="${build.cmd} CC=${configure.cc}"
-destroot.args-append  MAKE="${destroot.cmd} CC=${configure.cc}"
+build.args-append  MAKE="${build.cmd}" CC="${configure.cc}"
+destroot.args-append  MAKE="${destroot.cmd}" CC="${configure.cc}"
 
 select.group            python
 select.file             ${filespath}/python[string map {. {}} ${branch}]
 
 platform macosx {
 post-destroot {
-if ([variant_isset darwin_10]) {
-        file rename ${destroot}${prefix}/share/man/man1/python.1 ${destroot}${prefix}/share/man/man1/python${branch}.1
 
-        # delete symlinks without version suffix, use python_select instead to choose version
-        foreach bin { python pythonw idle pydoc smtpd.py python-config } {
-            file delete ${destroot}${prefix}/bin/${bin}
-        }
-} else {
-
         set framewpath ${frameworks_dir}/Python.framework
         set framewdir  ${framewpath}/Versions/${branch}
 
@@ -130,7 +125,6 @@
         ln -s ${framewdir}/Python ${python_staticlink}
 }
 }
-}
 
 post-activate {
     ui_msg "\nTo fully complete your installation and make python $branch the default, please run
@@ -138,31 +132,13 @@
 \n\tsudo python_select $name\n"
 }
 
-platform darwin 7 {
-        # there is no SystemStubs on 10.3
-        post-patch {
-                reinplace "s|-lSystemStubs||g" \
-                        configure configure.in
-        }
-        post-configure {
-                reinplace "s|-lSystemStubs||g" \
-                        Makefile.pre.in Makefile.pre Makefile
-        }
-        # To avoid GCC incompatibility issue. See http://nxg.me.uk/note/2004/restFP/ (by ebgssth at gmail.com, ticket #13322)
-        configure.ldflags-append "-lcc_dynamic"
-}
-
 platform darwin 9 {
         configure.cppflags-append       -D__DARWIN_UNIX03
 }
 
 platform darwin 10 {
-        configure.args-delete       --enable-framework=${frameworks_dir}
-        configure.args-append       --disable-toolbox-glue --disable-framework
         configure.cppflags-append   -D_DARWIN_C_SOURCE
-        patchfiles-append           patch-configure-badcflags.diff \
-                                    patch-configure-arch_only.diff \
-                                    patch-pyconfig.h.in.diff
+        patchfiles-append           patch-pyconfig.h.in.diff
 }
 
 platform puredarwin {

Added: trunk/dports/lang/python25/files/patch-64bit.diff
===================================================================
--- trunk/dports/lang/python25/files/patch-64bit.diff	                        (rev 0)
+++ trunk/dports/lang/python25/files/patch-64bit.diff	2009-09-10 13:23:37 UTC (rev 57388)
@@ -0,0 +1,1234 @@
+--- 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:

Modified: trunk/dports/lang/python25/files/patch-setup.py.diff
===================================================================
--- trunk/dports/lang/python25/files/patch-setup.py.diff	2009-09-10 11:54:16 UTC (rev 57387)
+++ trunk/dports/lang/python25/files/patch-setup.py.diff	2009-09-10 13:23:37 UTC (rev 57388)
@@ -39,3 +39,42 @@
  
          # Assume we haven't found any of the libraries or include files
          # The versions with dots are used on Unix, and the versions without
+--- setup.py.orig	2009-09-10 19:41:32.000000000 +1000
++++ setup.py	2009-09-10 19:48:30.000000000 +1000
+@@ -1197,7 +1197,7 @@
+         # For 8.4a2, the X11 headers are not included. Rather than include a
+         # complicated search, this is a hard-coded path. It could bail out
+         # if X11 libs are not found...
+-        include_dirs.append('/usr/X11R6/include')
++        #include_dirs.append('/usr/X11R6/include')
+         frameworks = ['-framework', 'Tcl', '-framework', 'Tk']
+ 
+         ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
+@@ -1262,17 +1262,17 @@
+         if platform == 'sunos5':
+             include_dirs.append('/usr/openwin/include')
+             added_lib_dirs.append('/usr/openwin/lib')
+-        elif os.path.exists('/usr/X11R6/include'):
+-            include_dirs.append('/usr/X11R6/include')
+-            added_lib_dirs.append('/usr/X11R6/lib64')
+-            added_lib_dirs.append('/usr/X11R6/lib')
+-        elif os.path.exists('/usr/X11R5/include'):
+-            include_dirs.append('/usr/X11R5/include')
+-            added_lib_dirs.append('/usr/X11R5/lib')
+-        else:
++        #elif os.path.exists('/usr/X11R6/include'):
++        #    include_dirs.append('/usr/X11R6/include')
++        #    added_lib_dirs.append('/usr/X11R6/lib64')
++        #    added_lib_dirs.append('/usr/X11R6/lib')
++        #elif os.path.exists('/usr/X11R5/include'):
++        #    include_dirs.append('/usr/X11R5/include')
++        #    added_lib_dirs.append('/usr/X11R5/lib')
++        #else:
+             # Assume default location for X11
+-            include_dirs.append('/usr/X11/include')
+-            added_lib_dirs.append('/usr/X11/lib')
++        #    include_dirs.append('/usr/X11/include')
++        #    added_lib_dirs.append('/usr/X11/lib')
+ 
+         # If Cygwin, then verify that X is installed before proceeding
+         if platform == 'cygwin':
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090910/09fccc39/attachment-0001.html>


More information about the macports-changes mailing list