6841644 OpenSolaris Python should support gdbm
authorNorm Jacobs <Norm.Jacobs@Oracle.COM>
Wed, 23 Feb 2011 10:37:11 -0800
changeset 99 c15c9099bb44
parent 98 7eea11439375
child 100 385905d9554d
6841644 OpenSolaris Python should support gdbm 6991811 Migrate Mercurial (Hg) to Python 2.6 7009592 PyOpenSSL should be updated from 0.8 to 0.11 7016735 move mercurial from sfw to userland 7018363 Userland LD_OPTIONS should include non-executable data mapfiles as well 7019410 python 2.6 should move to userland 7020772 userland build should provide more macros for common flags 7021204 userland runpath checking should relax slightly.
components/Makefile
components/bzip2/Makefile
components/ggrep/Makefile
components/lua/Makefile
components/mercurial/Makefile
components/mercurial/SUNWmercurial.p5m
components/mercurial/demo-transform
components/mercurial/manpages.patch
components/mercurial/mercurial.copyright
components/mercurial/mercurial.p5m
components/python/pyopenssl/Makefile
components/python/pyopenssl/SUNWpython26-pyopenssl.p5m
components/python/pyopenssl/no-zip_safe.patch
components/python/pyopenssl/pyOpenSSL.txt
components/python/pyopenssl/pyopenssl-26.p5m
components/python/pyopenssl/pyopenssl.copyright
components/python/python26/Makefile
components/python/python26/Python26-00-filemagic.patch
components/python/python26/Python26-01-solaris-lib-dirs.patch
components/python/python26/Python26-02-pycc.patch
components/python/python26/Python26-03-distutils-pycc.patch
components/python/python26/Python26-04-distutils-log.patch
components/python/python26/Python26-05-isalibs.patch
components/python/python26/Python26-06-write_compiled_module-atomic.patch
components/python/python26/Python26-07-dtrace.patch
components/python/python26/Python26-08-ctypes.patch
components/python/python26/Python26-09-ucred.patch
components/python/python26/Python26-10-gethostname.patch
components/python/python26/Python26-11-dlpi.patch
components/python/python26/Python26-12-encoding-alias.patch
components/python/python26/Python26-13-cflags.patch
components/python/python26/Python26-14-ctypes-util-find-library.patch
components/python/python26/Python26-15-getcwd.patch
components/python/python26/Python26-16-privrbac.patch
components/python/python26/Python26-17-netpacket-packet-h.patch
components/python/python26/Python26-18-readline.patch
components/python/python26/Python26-19-ext-stdio.patch
components/python/python26/Python26-20-py_db.patch
components/python/python26/Python26-21-getpass.patch
components/python/python26/Python26-22-bindir.patch
components/python/python26/SUNWPython26.p5m
components/python/python26/python-26.p5m
components/python/python26/python26.license
components/tcsh/Makefile
components/zsh/Makefile
make-rules/ips.mk
make-rules/setup.py.mk
make-rules/shared-macros.mk
tools/python/pkglint/userland.py
transforms/comparison-cleanup
--- a/components/Makefile	Tue Feb 22 10:12:42 2011 -0800
+++ b/components/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -50,7 +50,7 @@
 clobber:		TARGET = clobber
 test:			TARGET = test
 prep build install publish test:	TEMPLATE_ZONE=$(ZONE)
-prep build install publish test:	LOG = >$(WS_LOGS)/$@.$(TARGET).log 2>&1
+prep build install publish test:	LOG = >$(WS_LOGS)/$(@F).$(TARGET).log 2>&1
 
 # turn off pkglint for the individual component builds.
 publish:		MAKEFLAGS += PKGLINT=/bin/true
--- a/components/bzip2/Makefile	Tue Feb 22 10:12:42 2011 -0800
+++ b/components/bzip2/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -41,9 +41,8 @@
 LINTFLAGS=	-nsvx -I. $(BITS32)
 LINTFLAGS64=	-nsvx -I. $(BITS64)
 
-
-CFLAGS += -KPIC -D_FILE_OFFSET_BITS=64
-CFLAGS += $(XREGSFLAG)
+# we need to enable large file support and build PIC for our shared libraries
+CFLAGS += $(CPP_LARGEFILE) $(CC_PIC)
 
 COMPONENT_BUILD_ENV += CC="$(CC)"
 COMPONENT_BUILD_TARGETS += CC="$(CC)"
--- a/components/ggrep/Makefile	Tue Feb 22 10:12:42 2011 -0800
+++ b/components/ggrep/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -33,7 +33,8 @@
 include ../../make-rules/configure.mk
 include ../../make-rules/ips.mk
 
-CFLAGS	+=			$(FEATURES_EXTENSIONS)
+# We need to be able to return from void functions
+CFLAGS	+=			$(studio_FEATURES_EXTENSIONS)
 
 CONFIGURE_OPTIONS  +=		CFLAGS="$(CFLAGS)"
 CONFIGURE_OPTIONS  +=		--prefix=/usr
--- a/components/lua/Makefile	Tue Feb 22 10:12:42 2011 -0800
+++ b/components/lua/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -33,11 +33,14 @@
 include ../../make-rules/justmake.mk
 include ../../make-rules/ips.mk
 
-CFLAGS +=-KPIC -D_FILE_OFFSET_BITS=64 
+# This is because lua uses $(CC) to build it's shared libraries.
+CC +=		$(CC_BITS)
 
-COMPONENT_BUILD_ENV += CC="$(CC)"
+CFLAGS +=	$(CC_PIC) $(CPP_LARGEFILES)
+
 COMPONENT_BUILD_TARGETS += CC="$(CC)"
 COMPONENT_BUILD_TARGETS += CFLAGS="$(CFLAGS)"
+COMPONENT_INSTALL_TARGETS += INSTALL=$(INSTALL)
 COMPONENT_INSTALL_TARGETS += INSTALL_TOP=$(PROTOUSRDIR)
 
 include ../../make-rules/shared-targets.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/mercurial/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,59 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+include $(WS_TOP)/make-rules/shared-macros.mk
+
+PATH=/usr/bin:/usr/gnu/bin:/usr/sbin
+
+COMPONENT_NAME=		mercurial
+COMPONENT_VERSION=	1.3.1
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	sha1:a9537fab7c7ead501a6414d1900f46e0ae3e48b8
+COMPONENT_ARCHIVE_URL=	http://www.selenic.com/mercurial/release/$(COMPONENT_ARCHIVE)
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+PYTHON_ENV += CC="$(CC)"
+PYTHON_ENV += CFLAGS="-m$(BITS) $(CFLAGS)"
+
+PKG_PROTO_DIRS +=	$(COMPONENT_SRC)/contrib
+PKG_PROTO_DIRS +=	$(COMPONENT_SRC)/doc
+PUBLISH_TRANSFORMS +=	demo-transform
+
+# common targets
+build:		$(BUILD_32)
+
+install:	$(INSTALL_32)
+	(cd $(COMPONENT_SRC)/doc ; $(MAKE) INSTALL=$(INSTALL) \
+			PREFIX=/usr DESTDIR=$(PROTO_DIR) install)
+
+test:	$(INSTALL_32)
+	(cd $(COMPONENT_SRC)/tests ; \
+	 PYTHONPATH=$(PROTOUSRLIBDIR)/python$(PYTHON_VERSION)/vendor-packages \
+	 $(PYTHON) ./run-tests.py)
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/mercurial/SUNWmercurial.p5m	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,29 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+set name=pkg.fmri value=pkg:/[email protected],5.11-0.133
+set name=pkg.renamed value=true
+
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+depend fmri=developer/versioning/[email protected] type=require
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/mercurial/demo-transform	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,27 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+
+# These are not installed, but can be found in the source contrib
+# directory.
+<transform file path=usr/demo/mercurial/(.+)$ -> \
+	set action.hash %<\1> >
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/mercurial/manpages.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,181 @@
+--- mercurial-1.3.1/doc/hg.1	Thu Jul 23 10:58:26 2009
++++ /usr/share/man/man1/hg.1	Tue Feb 19 05:28:30 2002
+@@ -1,4 +1,9 @@
+ '\" t
++.\"
++.\" Modified for Solaris to to add the Solaris stability classification,
++.\" and to add a note about source availability.
++.\"
++'\" t
+ .\"     Title: hg
+ .\"    Author: [see the "AUTHOR" section]
+ .\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+@@ -757,7 +762,7 @@
+ .RS 4
+ .\}
+ .nf
+-$ cp \-al REPO REPOCLONE
++$ /usr/gnu/bin/cp \-al REPO REPOCLONE
+ .fi
+ .if n \{\
+ .RE
+@@ -4331,6 +4336,12 @@
+ .RE
+ .sp
+ Some commands (e\&.g\&. revert) produce backup files ending in \&.orig, if the \&.orig file already exists and is not tracked by Mercurial, it will be overwritten\&.
++.TP
++/usr/demo/mercurial
++This directory contains assorted files which are part of the Mercurial
++distribution, but not core to its functionality&.  They will generally
++need to be copied elsewhere to be of use.
++
+ .SH "BUGS"
+ .sp
+ Probably lots, please post them to the mailing list (See Resources below) when you find them\&.
+@@ -4376,3 +4387,23 @@
+ .RS 4
+ \%http://selenic.com/mailman/listinfo/mercurial
+ .RE
++.\" Begin Sun update
++.SH ATTRIBUTES
++See
++.BR attributes (5)
++for descriptions of the following attributes:
++.sp
++.TS
++box;
++cbp-1 | cbp-1
++l | l .
++ATTRIBUTE TYPE	ATTRIBUTE VALUE
++=
++Availability	developer/versioning/mercurial
++=
++Interface Stability	Volatile
++.TE
++.PP
++.SH NOTES
++Source for Mercurial is available on http://opensolaris.org.
++.\" End Sun update
+--- mercurial-1.3.1/doc/hgrc.5	Thu Jul 23 10:58:38 2009
++++ /usr/share/man/man5/hgrc.5	Tue Feb 19 05:28:30 2002
+@@ -1,4 +1,9 @@
+ '\" t
++.\"
++.\" Modified for Solaris to to add the Solaris stability classification,
++.\" and to add a note about source availability.
++.\"
++'\" t
+ .\"     Title: hgrc
+ .\"    Author: [see the "AUTHOR" section]
+ .\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+@@ -27,7 +32,7 @@
+ .sp
+ Mercurial reads configuration data from several files, if they exist\&. The names of these files depend on the system on which Mercurial is installed\&. *\&.rc files from a single directory are read in alphabetical order, later ones overriding earlier ones\&. Where multiple paths are given below, settings from later paths override earlier ones\&.
+ .PP
+-(Unix) <install\-root>/etc/mercurial/hgrc\&.d/*\&.rc, (Unix) <install\-root>/etc/mercurial/hgrc
++<install\-root>/etc/mercurial/hgrc\&.d/*\&.rc, <install\-root>/etc/mercurial/hgrc
+ .RS 4
+ Per\-installation configuration files, searched for in the directory where Mercurial is installed\&.
+ <install\-root>
+@@ -36,12 +41,12 @@
+ /shared/tools/etc/mercurial/hgrc\&. Options in these files apply to all Mercurial commands executed by any user in any directory\&.
+ .RE
+ .PP
+-(Unix) /etc/mercurial/hgrc\&.d/*\&.rc, (Unix) /etc/mercurial/hgrc
++/etc/mercurial/hgrc\&.d/*\&.rc, /etc/mercurial/hgrc
+ .RS 4
+ Per\-system configuration files, for the system on which Mercurial is running\&. Options in these files apply to all Mercurial commands executed by any user in any directory\&. Options in these files override per\-installation options\&.
+ .RE
+ .PP
+-(Windows) <install\-dir>\eMercurial\&.ini, or else, (Windows) HKEY_LOCAL_MACHINE\eSOFTWARE\eMercurial, or else, (Windows) C:\eMercurial\eMercurial\&.ini
++(Windows) <install\-dir>\eMercurial\&.ini, or else
+ .RS 4
+ Per\-installation/system configuration files, for the system on which Mercurial is running\&. Options in these files apply to all Mercurial commands executed by any user in any directory\&. Registry keys contain PATH\-like strings, every part of which must reference a
+ Mercurial\&.ini
+@@ -50,7 +55,7 @@
+ files will be read\&.
+ .RE
+ .PP
+-(Unix) $HOME/\&.hgrc, (Windows) %HOME%\eMercurial\&.ini, (Windows) %HOME%\e\&.hgrc, (Windows) %USERPROFILE%\eMercurial\&.ini, (Windows) %USERPROFILE%\e\&.hgrc
++$HOME/\&.hgrc
+ .RS 4
+ Per\-user configuration file(s), for the user running Mercurial\&. On Windows 9x,
+ %HOME%
+@@ -58,7 +63,7 @@
+ %APPDATA%\&. Options in these files apply to all Mercurial commands executed by this user in any directory\&. Options in these files override per\-installation and per\-system options\&.
+ .RE
+ .PP
+-(Unix, Windows) <repo>/\&.hg/hgrc
++<repo>/\&.hg/hgrc
+ .RS 4
+ Per\-repository configuration options that only apply in a particular repository\&. This file is not version\-controlled, and will not get transferred during a "clone" operation\&. Options in this file override options in all other configuration files\&. On Unix, most of this file will be ignored if it doesn\(cqt belong to a trusted user or to a trusted group\&. See the documentation for the trusted section below for more details\&.
+ .RE
+@@ -874,7 +879,7 @@
+ patch content and patched files end of lines are preserved\&. When set to
+ \fIlf\fR
+ or
+-\fIcrlf\fR, both files end of lines are ignored when patching and the result line endings are normalized to either LF (Unix) or CRLF (Windows)\&. Default: strict\&.
++\fIcrlf\fR, both files end of lines are ignored when patching and the result line endings are normalized to either LF or CRLF (Windows)\&. Default: strict\&.
+ .RE
+ .RE
+ .PP
+@@ -1275,3 +1280,23 @@
+ .RS 4
+ \%mailto:[email protected]
+ .RE
++.\" Begin Sun update
++.SH ATTRIBUTES
++See
++.BR attributes (5)
++for descriptions of the following attributes:
++.sp
++.TS
++box;
++cbp-1 | cbp-1
++l | l .
++ATTRIBUTE TYPE	ATTRIBUTE VALUE
++=
++Availability	developer/versioning/mercurial
++=
++Interface Stability	Volatile
++.TE
++.PP
++.SH NOTES
++Source for Mercurial is available on http://opensolaris.org.
++.\" End Sun update
+--- mercurial-1.3.1/doc/hgignore.5	Thu Jul 23 10:58:30 2009
++++ /usr/share/man/man5/hgignore.5	Tue Feb 19 05:28:30 2002
+@@ -1,4 +1,9 @@
+ '\" t
++.\"
++.\" Modified for Solaris to to add the Solaris stability classification,
++.\" and to add a note about source availability.
++.\"
++'\" t
+ .\"     Title: hgignore
+ .\"    Author: [see the "AUTHOR" section]
+ .\" Generator: DocBook XSL Stylesheets v1.75.1 <http://docbook.sf.net/>
+@@ -119,3 +124,23 @@
+ .RS 4
+ \%mailto:[email protected]
+ .RE
++.\" Begin Sun update
++.SH ATTRIBUTES
++See
++.BR attributes (5)
++for descriptions of the following attributes:
++.sp
++.TS
++box;
++cbp-1 | cbp-1
++l | l .
++ATTRIBUTE TYPE	ATTRIBUTE VALUE
++=
++Availability	developer/versioning/mercurial
++=
++Interface Stability	Volatile
++.TE
++.PP
++.SH NOTES
++Source for Mercurial is available on http://opensolaris.org.
++.\" End Sun update
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/mercurial/mercurial.copyright	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,379 @@
+Oracle elects to use only the GNU Lesser General Public License version
+2.1 (LGPL)/GNU General Public License version 2 (GPL) for any software
+where a choice of LGPL/GPL license versions are made available with the
+language indicating that LGPLv2.1/GPLv2 or any later version may be
+used, or where a choice of which version of the LGPL/GPL is applied is
+unspecified.  Unless specifically stated otherwise, where a choice
+exists between another license and either the GPL or the LGPL, Oracle
+chooses the other license.
+--------------------------------------------------------------------
+Copyright (C) 2004, 2005 Canonical Ltd
+Copyright (C) 2005 Paul Mackerras.  All rights reserved.
+Copyright (C) 2005 Steve Borho
+Copyright (C) 2005 TK Soh.
+Copyright (C) 2005-2008 by Intevation GmbH <[email protected]>
+Copyright (C) 2006 Marco Barisione <[email protected]>
+Copyright (C) 2006-2008 Brendan Cully <[email protected]>
+Copyright (C) 2006 Jelmer Vernooij <[email protected]>
+Copyright (C) 2007 Alexis S. L. Carvalho <[email protected]>
+Copyright (C) 2007 Daniel Holth <[email protected]>
+Copyright (C) 2007 Kevin Christen <[email protected]>
+Copyright (c) 2008 Shun-ichi Goto <[email protected]>
+Copyright 2001 Gareth Rees.  All rights reserved.
+Copyright (C) 2002-2004 Michael D. Stenner, Ryan Tomayko
+Copyright 2004-2007 Ned Batchelder.  All rights reserved.
+Copyright 2005-2008 Matt Mackall <[email protected]>
+Copyright 2005-2007 Benoit Boissinot <[email protected]>
+Copyright 2005-2007 Chris Mason <[email protected]>
+Copyright 2005-2008 Bryan O'Sullivan <[email protected]>
+Copyright 2006 Eric Hopper <[email protected]>
+Copyright 2006 Josef "Jeff" Sipek <[email protected]>
+Copyright 2006 Vadim Gelfer <[email protected]>
+Copyright 2007 Joel Rosdahl <[email protected]>
+Copyright 2007 OHASHI Hideya <[email protected]>
+Copyright 2007, 2008 Christian Ebert <[email protected]>
+Copyright 2008 David Soria Parra <[email protected]>
+Copyright 21 May 2005 - (c) 2005 Jake Edge <[email protected]>
+Copyright (C) 2006 by Manpreet Singh
+Copyright 2005 K. Thananchayan <[email protected]>
+--------------------------------------------------------------------
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/mercurial/mercurial.p5m	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,633 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri value=pkg:/developer/versioning/mercurial@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="The Mercurial Source Control Management System"
+set name=pkg.description value="A fast, lightweight source control management system designed for efficient handling of very large distributed projects."
+set name=info.classification value="org.opensolaris.category.2008:Development/Source Code Management"
+set name=info.upstream_url value="http://www.selenic.com/mercurial/wiki/index.cgi/Mercurial"
+set name=info.source_url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+license mercurial.copyright license='GPLv2'
+
+dir path=usr
+dir path=usr/bin
+dir path=usr/demo
+dir path=usr/demo/mercurial
+dir path=usr/demo/mercurial/git-viz
+dir path=usr/demo/mercurial/hgsh
+dir path=usr/demo/mercurial/vim
+dir path=usr/lib
+dir path=usr/lib/python2.6
+dir path=usr/lib/python2.6/vendor-packages
+dir path=usr/lib/python2.6/vendor-packages/hgext
+dir path=usr/lib/python2.6/vendor-packages/hgext/convert
+dir path=usr/lib/python2.6/vendor-packages/hgext/highlight
+dir path=usr/lib/python2.6/vendor-packages/hgext/zeroconf
+dir path=usr/lib/python2.6/vendor-packages/mercurial
+dir path=usr/lib/python2.6/vendor-packages/mercurial/hgweb
+dir path=usr/lib/python2.6/vendor-packages/mercurial/i18n
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/da
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/da/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/de
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/de/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/el
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/el/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/fr
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/fr/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/it
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/it/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/ja
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/ja/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/pt_BR
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/pt_BR/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/zh_CN
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/zh_CN/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/zh_TW
+dir path=usr/lib/python2.6/vendor-packages/mercurial/locale/zh_TW/LC_MESSAGES
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/coal
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan
+dir path=usr/lib/python2.6/vendor-packages/mercurial/templates/static
+dir path=usr/share
+dir path=usr/share/man
+dir path=usr/share/man/man1
+dir path=usr/share/man/man5
+file path=usr/bin/hg
+file path=usr/lib/python2.6/vendor-packages/hgext/__init__.py
+file path=usr/lib/python2.6/vendor-packages/hgext/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/acl.py
+file path=usr/lib/python2.6/vendor-packages/hgext/acl.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/bookmarks.py
+file path=usr/lib/python2.6/vendor-packages/hgext/bookmarks.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/bugzilla.py
+file path=usr/lib/python2.6/vendor-packages/hgext/bugzilla.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/children.py
+file path=usr/lib/python2.6/vendor-packages/hgext/children.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/churn.py
+file path=usr/lib/python2.6/vendor-packages/hgext/churn.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/color.py
+file path=usr/lib/python2.6/vendor-packages/hgext/color.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/__init__.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/bzr.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/bzr.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/common.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/common.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/convcmd.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/convcmd.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/cvs.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/cvs.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/cvsps.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/cvsps.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/darcs.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/darcs.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/filemap.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/filemap.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/git.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/git.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/gnuarch.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/gnuarch.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/hg.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/hg.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/monotone.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/monotone.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/p4.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/p4.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/subversion.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/subversion.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/transport.py
+file path=usr/lib/python2.6/vendor-packages/hgext/convert/transport.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/extdiff.py
+file path=usr/lib/python2.6/vendor-packages/hgext/extdiff.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/fetch.py
+file path=usr/lib/python2.6/vendor-packages/hgext/fetch.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/gpg.py
+file path=usr/lib/python2.6/vendor-packages/hgext/gpg.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/graphlog.py
+file path=usr/lib/python2.6/vendor-packages/hgext/graphlog.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/hgcia.py
+file path=usr/lib/python2.6/vendor-packages/hgext/hgcia.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/hgk.py
+file path=usr/lib/python2.6/vendor-packages/hgext/hgk.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/highlight/__init__.py
+file path=usr/lib/python2.6/vendor-packages/hgext/highlight/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/highlight/highlight.py
+file path=usr/lib/python2.6/vendor-packages/hgext/highlight/highlight.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/interhg.py
+file path=usr/lib/python2.6/vendor-packages/hgext/interhg.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/keyword.py
+file path=usr/lib/python2.6/vendor-packages/hgext/keyword.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/mq.py
+file path=usr/lib/python2.6/vendor-packages/hgext/mq.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/notify.py
+file path=usr/lib/python2.6/vendor-packages/hgext/notify.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/pager.py
+file path=usr/lib/python2.6/vendor-packages/hgext/pager.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/parentrevspec.py
+file path=usr/lib/python2.6/vendor-packages/hgext/parentrevspec.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/patchbomb.py
+file path=usr/lib/python2.6/vendor-packages/hgext/patchbomb.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/purge.py
+file path=usr/lib/python2.6/vendor-packages/hgext/purge.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/rebase.py
+file path=usr/lib/python2.6/vendor-packages/hgext/rebase.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/record.py
+file path=usr/lib/python2.6/vendor-packages/hgext/record.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/share.py
+file path=usr/lib/python2.6/vendor-packages/hgext/share.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/transplant.py
+file path=usr/lib/python2.6/vendor-packages/hgext/transplant.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/win32mbcs.py
+file path=usr/lib/python2.6/vendor-packages/hgext/win32mbcs.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/win32text.py
+file path=usr/lib/python2.6/vendor-packages/hgext/win32text.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/zeroconf/Zeroconf.py
+file path=usr/lib/python2.6/vendor-packages/hgext/zeroconf/Zeroconf.pyc
+file path=usr/lib/python2.6/vendor-packages/hgext/zeroconf/__init__.py
+file path=usr/lib/python2.6/vendor-packages/hgext/zeroconf/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/__init__.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/__version__.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/__version__.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/ancestor.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/ancestor.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/archival.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/archival.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/base85.so
+file path=usr/lib/python2.6/vendor-packages/mercurial/bdiff.so
+file path=usr/lib/python2.6/vendor-packages/mercurial/bundlerepo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/bundlerepo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/byterange.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/byterange.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/changegroup.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/changegroup.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/changelog.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/changelog.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/cmdutil.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/cmdutil.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/commands.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/commands.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/config.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/config.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/context.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/context.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/copies.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/copies.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/demandimport.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/demandimport.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/diffhelpers.so
+file path=usr/lib/python2.6/vendor-packages/mercurial/dirstate.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/dirstate.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/dispatch.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/dispatch.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/encoding.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/encoding.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/error.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/error.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/extensions.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/extensions.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/fancyopts.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/fancyopts.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/filelog.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/filelog.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/filemerge.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/filemerge.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/graphmod.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/graphmod.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hbisect.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hbisect.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/help.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/help.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hg.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hg.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/__init__.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/common.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/common.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/hgweb_mod.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/hgweb_mod.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/hgwebdir_mod.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/hgwebdir_mod.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/protocol.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/protocol.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/request.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/request.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/server.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/server.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/webcommands.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/webcommands.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/webutil.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/webutil.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/wsgicgi.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hgweb/wsgicgi.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/hook.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/hook.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/httprepo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/httprepo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/da.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/de.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/el.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/fr.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/hggettext
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/it.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/ja.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/pt_BR.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/zh_CN.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/i18n/zh_TW.po
+file path=usr/lib/python2.6/vendor-packages/mercurial/ignore.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/ignore.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/keepalive.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/keepalive.pyc
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/da/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/de/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/el/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/fr/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/it/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/ja/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/pt_BR/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/zh_CN/LC_MESSAGES/hg.mo
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/locale/zh_TW/LC_MESSAGES/hg.mo
+file path=usr/lib/python2.6/vendor-packages/mercurial/localrepo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/localrepo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/lock.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/lock.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/lsprof.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/lsprof.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/lsprofcalltree.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/lsprofcalltree.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/mail.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/mail.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/manifest.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/manifest.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/match.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/match.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/mdiff.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/mdiff.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/merge.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/merge.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/mpatch.so
+file path=usr/lib/python2.6/vendor-packages/mercurial/node.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/node.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/osutil.so
+file path=usr/lib/python2.6/vendor-packages/mercurial/parsers.so
+file path=usr/lib/python2.6/vendor-packages/mercurial/patch.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/patch.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/posix.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/posix.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/repair.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/repair.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/repo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/repo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/revlog.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/revlog.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/simplemerge.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/simplemerge.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/sshrepo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/sshrepo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/sshserver.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/sshserver.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/statichttprepo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/statichttprepo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/store.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/store.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/streamclone.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/streamclone.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/strutil.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/strutil.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/subrepo.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/subrepo.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/templatefilters.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/templatefilters.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/templater.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/templater.pyc
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/changelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/changelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/filelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/header.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/tagentry.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/atom/tags.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/coal/header.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/coal/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/branches.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/changelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/changelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/changeset.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/fileannotate.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/filediff.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/filelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/filerevision.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/footer.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/graph.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/header.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/index.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/manifest.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/notfound.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/search.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/shortlog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/summary.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/gitweb/tags.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/map-cmdline.changelog
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/map-cmdline.compact
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/map-cmdline.default
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/branches.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/changelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/changelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/changeset.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/fileannotate.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/filediff.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/filelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/filerevision.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/footer.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/graph.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/header.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/index.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/manifest.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/notfound.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/search.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/shortlog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/summary.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/monoblue/tags.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/branches.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/changeset.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/fileannotate.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/filediff.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/filelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/filelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/filerevision.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/footer.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/graph.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/header.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/index.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/manifest.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/notfound.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/search.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/shortlog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/shortlogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/paper/tags.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/changeset.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/fileannotate.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/filediff.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/index.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/manifest.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/raw/notfound.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/changelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/changelogentry.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/filelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/filelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/header.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/tagentry.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/rss/tags.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/branches.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/changelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/changelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/changeset.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/error.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/fileannotate.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/filediff.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/filelog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/filelogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/filerevision.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/footer.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/graph.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/header.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/index.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/manifest.tmpl
+file path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/map
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/notfound.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/search.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/shortlog.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/shortlogentry.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/spartan/tags.tmpl
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/background.png
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/coal-file.png
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/coal-folder.png
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/excanvas.js
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/graph.js
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/hgicon.png
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/hglogo.png
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/style-coal.css
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/style-gitweb.css
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/style-monoblue.css
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/style-paper.css
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/static/style.css
+file \
+    path=usr/lib/python2.6/vendor-packages/mercurial/templates/template-vars.txt
+file path=usr/lib/python2.6/vendor-packages/mercurial/transaction.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/transaction.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/ui.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/ui.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/url.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/url.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/util.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/util.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/verify.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/verify.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/win32.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/win32.pyc
+file path=usr/lib/python2.6/vendor-packages/mercurial/windows.py
+file path=usr/lib/python2.6/vendor-packages/mercurial/windows.pyc
+
+file path=usr/demo/mercurial/bash_completion
+file path=usr/demo/mercurial/convert-repo
+file path=usr/demo/mercurial/dumprevlog
+file path=usr/demo/mercurial/git-viz/git-cat-file
+file path=usr/demo/mercurial/git-viz/git-diff-tree
+file path=usr/demo/mercurial/git-viz/git-rev-list
+file path=usr/demo/mercurial/git-viz/git-rev-tree
+file path=usr/demo/mercurial/git-viz/hg-viz
+file path=usr/demo/mercurial/hg-relink
+file path=usr/demo/mercurial/hg-ssh
+file path=usr/demo/mercurial/hgdiff
+file path=usr/demo/mercurial/hgk
+file path=usr/demo/mercurial/hgsh/hgsh.c
+file path=usr/demo/mercurial/hgsh/Makefile
+file path=usr/demo/mercurial/hgwebdir.fcgi
+file path=usr/demo/mercurial/hgwebdir.wsgi
+file path=usr/demo/mercurial/logo-droplets.svg
+file path=usr/demo/mercurial/mercurial.el
+file path=usr/demo/mercurial/mergetools.hgrc
+file path=usr/demo/mercurial/mq.el
+file path=usr/demo/mercurial/perf.py
+file path=usr/demo/mercurial/python-hook-examples.py
+file path=usr/demo/mercurial/rewrite-log
+file path=usr/demo/mercurial/sample.hgrc
+file path=usr/demo/mercurial/simplemerge
+file path=usr/demo/mercurial/tcsh_completion
+file path=usr/demo/mercurial/tcsh_completion_build.sh
+file path=usr/demo/mercurial/tmplrewrite.py
+file path=usr/demo/mercurial/undumprevlog
+file path=usr/demo/mercurial/vim/hg-menu.vim
+file path=usr/demo/mercurial/vim/HGAnnotate.vim
+file path=usr/demo/mercurial/vim/hgcommand.vim
+file path=usr/demo/mercurial/vim/patchreview.txt
+file path=usr/demo/mercurial/vim/patchreview.vim
+file path=usr/demo/mercurial/zsh_completion
+
+file path=usr/share/man/man1/hg.1
+file path=usr/share/man/man5/hgignore.5
+file path=usr/share/man/man5/hgrc.5
+
+legacy pkg=SUNWmercurial \
+    desc="A fast, lightweight source control management system designed for efficient handling of very large distributed projects." \
+    name="The Mercurial Source Control Management System"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyopenssl/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,48 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+include $(WS_TOP)/make-rules/shared-macros.mk
+
+PATH=/usr/bin:/usr/gnu/bin:/usr/sbin
+
+COMPONENT_NAME=		pyOpenSSL
+COMPONENT_VERSION=	0.11
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	sha1:92b550853626d2959c44abb72944b83403427497
+COMPONENT_ARCHIVE_URL=	http://launchpad.net/pyopenssl/main/0.11/+download/$(COMPONENT_ARCHIVE)
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/setup.py.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+# common targets
+build:		$(BUILD_32_and_64)
+
+install:	$(INSTALL_32_and_64)
+
+test:
+	@echo "no tests available"
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyopenssl/SUNWpython26-pyopenssl.p5m	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,29 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+set name=pkg.fmri value=pkg:/[email protected],5.11-0.133
+set name=pkg.renamed value=true
+
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+depend fmri=library/python-2/[email protected] type=require
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyopenssl/no-zip_safe.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,10 @@
+--- pyOpenSSL-0.11/setup.py.orig	Mon Feb 14 23:17:02 2011
++++ pyOpenSSL-0.11/setup.py	Mon Feb 14 23:17:31 2011
+@@ -203,7 +203,6 @@
+                      'OpenSSL.test.test_crypto',
+                      'OpenSSL.test.test_rand',
+                      'OpenSSL.test.test_ssl'],
+-      zip_safe = False,
+       cmdclass = {"build_ext": BuildExtension},
+       description = 'Python wrapper module around the OpenSSL library',
+       author = 'Martin Sjögren, AB Strakt',
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyopenssl/pyOpenSSL.txt	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,1013 @@
+                            Python OpenSSL Manual
+     __________________________________________________________________
+
+                            Python OpenSSL Manual
+
+                               Martin Sj�gren
+
+                              [email protected]
+
+  Abstract:
+
+   This module is a rather thin wrapper around (a subset of) the OpenSSL
+   library. With thin wrapper I mean that a lot of the object methods do
+   nothing more than calling a corresponding function in the OpenSSL
+   library.
+
+Contents
+
+     * 1 Introduction
+     * 2 Building and Installing
+          + 2.1 Building the Module on a Unix System
+          + 2.2 Building the Module on a Windows System
+     * 3 OpenSSL -- Python interface to OpenSSL
+          + 3.1 crypto -- Generic cryptographic module
+          + 3.2 rand -- An interface to the OpenSSL pseudo random number
+            generator
+          + 3.3 SSL -- An interface to the SSL-specific parts of OpenSSL
+     * 4 Internals
+          + 4.1 Exceptions
+          + 4.2 Callbacks
+          + 4.3 Acessing Socket Methods
+
+
+                                 1 Introduction
+
+   The reason pyOpenSSL was created is that the SSL support in the socket
+   module in Python 2.1 (the contemporary version of Python when the
+   pyOpenSSL project was begun) was severely limited. Other OpenSSL
+   wrappers for Python at the time were also limited, though in different
+   ways. Unfortunately, Python's standard library SSL support has remained
+   weak, although other packages (such as M2Crypto^1) have made great
+   advances and now equal or exceed pyOpenSSL's functionality.
+
+   The reason pyOpenSSL continues to be maintained is that there is a
+   significant user community around it, as well as a large amount of
+   software which depends on it. It is a great benefit to many people for
+   pyOpenSSL to continue to exist and advance.
+
+
+                           2 Building and Installing
+
+   These instructions can also be found in the file INSTALL.
+
+   I have tested this on Debian Linux systems (woody and sid), Solaris 2.6
+   and 2.7. Others have successfully compiled it on Windows and NT.
+
+
+2.1 Building the Module on a Unix System
+
+   pyOpenSSL uses distutils, so there really shouldn't be any problems. To
+   build the library:
+
+python setup.py build
+
+   If your OpenSSL header files aren't in /usr/include, you may need to
+   supply the -I flag to let the setup script know where to look. The same
+   goes for the libraries of course, use the -L flag. Note that build
+   won't accept these flags, so you have to run first build_ext and then
+   build! Example:
+
+python setup.py build_ext -I/usr/local/ssl/include -L/usr/local/ssl/lib
+python setup.py build
+
+   Now you should have a directory called OpenSSL that contains e.g.
+   SSL.so and __init__.py somewhere in the build dicrectory, so just:
+
+python setup.py install
+
+   If you, for some arcane reason, don't want the module to appear in the
+   site-packages directory, use the --prefix option.
+
+   You can, of course, do
+
+python setup.py --help
+
+   to find out more about how to use the script.
+
+
+2.2 Building the Module on a Windows System
+
+   Big thanks to Itamar Shtull-Trauring and Oleg Orlov for their help with
+   Windows build instructions. Same as for Unix systems, we have to
+   separate the build_ext and the build.
+
+   Building the library:
+
+setup.py build_ext -I ...\openssl\inc32 -L ...\openssl\out32dll
+setup.py build
+
+   Where ...\openssl is of course the location of your OpenSSL
+   installation.
+
+   Installation is the same as for Unix systems:
+
+setup.py install
+
+   And similarily, you can do
+
+setup.py --help
+
+   to get more information.
+
+
+                    3 OpenSSL -- Python interface to OpenSSL
+
+   This package provides a high-level interface to the functions in the
+   OpenSSL library. The following modules are defined:
+
+   crypto
+          Generic cryptographic module. Note that if anything is
+          incomplete, this module is!
+
+   rand
+          An interface to the OpenSSL pseudo random number generator.
+
+   SSL
+          An interface to the SSL-specific parts of OpenSSL.
+
+
+3.1 crypto -- Generic cryptographic module
+
+   X509Type
+          A Python type object representing the X509 object type.
+
+   X509()
+          Factory function that creates an X509 object.
+
+   X509NameType
+          A Python type object representing the X509Name object type.
+
+   X509Name(x509name)
+          Factory function that creates a copy of x509name.
+
+   X509ReqType
+          A Python type object representing the X509Req object type.
+
+   X509Req()
+          Factory function that creates an X509Req object.
+
+   X509StoreType
+          A Python type object representing the X509Store object type.
+
+   PKeyType
+          A Python type object representing the PKey object type.
+
+   PKey()
+          Factory function that creates a PKey object.
+
+   PKCS7Type
+          A Python type object representing the PKCS7 object type.
+
+   PKCS12Type
+          A Python type object representing the PKCS12 object type.
+
+   X509ExtensionType
+          A Python type object representing the X509Extension object type.
+
+   X509Extension(typename, critical, value)
+          Factory function that creates a X509Extension object.
+
+   NetscapeSPKIType
+          A Python type object representing the NetscapeSPKI object type.
+
+   NetscapeSPKI([enc])
+          Factory function that creates a NetscapeSPKI object. If the enc
+          argument is present, it should be a base64-encoded string
+          representing a NetscapeSPKI object, as returned by the
+          b64_encode method.
+
+   FILETYPE_PEM
+
+   FILETYPE_ASN1
+          File type constants.
+
+   TYPE_RSA
+
+   TYPE_DSA
+          Key type constants.
+
+   exception Error
+          Generic exception used in the crypto module.
+
+   dump_certificate(type, cert)
+          Dump the certificate cert into a buffer string encoded with the
+          type type.
+
+   dump_certificate_request(type, req)
+          Dump the certificate request req into a buffer string encoded
+          with the type type.
+
+   dump_privatekey(type, pkey[, cipher, passphrase])
+          Dump the private key pkey into a buffer string encoded with the
+          type type, optionally (if type is FILETYPE_PEM) encrypting it
+          using cipher and passphrase.
+
+          passphrase must be either a string or a callback for providing
+          the pass phrase.
+
+   load_certificate(type, buffer)
+          Load a certificate (X509) from the string buffer encoded with
+          the type type.
+
+   load_certificate_request(type, buffer)
+          Load a certificate request (X509Req) from the string buffer
+          encoded with the type type.
+
+   load_privatekey(type, buffer[, passphrase])
+          Load a private key (PKey) from the string buffer encoded with
+          the type type (must be one of FILETYPE_PEM and FILETYPE_ASN1).
+
+          passphrase must be either a string or a callback for providing
+          the pass phrase.
+
+   load_pkcs7_data(type, buffer)
+          Load pkcs7 data from the string buffer encoded with the type
+          type.
+
+   load_pkcs12(buffer[, passphrase])
+          Load pkcs12 data from the string buffer. If the pkcs12 structure
+          is encrypted, a passphrase must be included.
+
+
+  3.1.1 X509 objects
+
+   X509 objects have the following methods:
+
+   get_issuer()
+          Return an X509Name object representing the issuer of the
+          certificate.
+
+   get_pubkey()
+          Return a PKey object representing the public key of the
+          certificate.
+
+   get_serial_number()
+          Return the certificate serial number.
+
+   get_subject()
+          Return an X509Name object representing the subject of the
+          certificate.
+
+   get_version()
+          Return the certificate version.
+
+   get_notBefore()
+          Return a string giving the time before which the certificate is
+          not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
+
+                 YYYYMMDDhhmmssZ
+                 YYYYMMDDhhmmss+hhmm
+                 YYYYMMDDhhmmss-hhmm
+
+          If no value exists for this field, None is returned.
+
+   get_notAfter()
+          Return a string giving the time after which the certificate is
+          not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
+
+                 YYYYMMDDhhmmssZ
+                 YYYYMMDDhhmmss+hhmm
+                 YYYYMMDDhhmmss-hhmm
+
+          If no value exists for this field, None is returned.
+
+   set_notBefore(when)
+          Change the time before which the certificate is not valid. when
+          is a string formatted as an ASN1 GENERALIZEDTIME:
+
+                 YYYYMMDDhhmmssZ
+                 YYYYMMDDhhmmss+hhmm
+                 YYYYMMDDhhmmss-hhmm
+
+   set_notAfter(when)
+          Change the time after which the certificate is not valid. when
+          is a string formatted as an ASN1 GENERALIZEDTIME:
+
+                 YYYYMMDDhhmmssZ
+                 YYYYMMDDhhmmss+hhmm
+                 YYYYMMDDhhmmss-hhmm
+
+   gmtime_adj_notBefore(time)
+          Adjust the timestamp (in GMT) when the certificate starts being
+          valid.
+
+   gmtime_adj_notAfter(time)
+          Adjust the timestamp (in GMT) when the certificate stops being
+          valid.
+
+   has_expired()
+          Checks the certificate's time stamp against current time.
+          Returns true if the certificate has expired and false otherwise.
+
+   set_issuer(issuer)
+          Set the issuer of the certificate to issuer.
+
+   set_pubkey(pkey)
+          Set the public key of the certificate to pkey.
+
+   set_serial_number(serialno)
+          Set the serial number of the certificate to serialno.
+
+   set_subject(subject)
+          Set the subject of the certificate to subject.
+
+   set_version(version)
+          Set the certificate version to version.
+
+   sign(pkey, digest)
+          Sign the certificate, using the key pkey and the message digest
+          algorithm identified by the string digest.
+
+   subject_name_hash()
+          Return the hash of the certificate subject.
+
+   digest(digest_name)
+          Return a digest of the certificate, using the digest_name
+          method.
+
+   add_extensions(extensions)
+          Add the extensions in the sequence extensions to the
+          certificate.
+
+
+  3.1.2 X509Name objects
+
+   X509Name objects have the following methods:
+
+   hash()
+          Return an integer giving the first four bytes of the MD5 digest
+          of the DER representation of the name.
+
+   der()
+          Return a string giving the DER representation of the name.
+
+   get_components()
+          Return a list of two-tuples of strings giving the components of
+          the name.
+
+   X509Name objects have the following members:
+
+   countryName
+          The country of the entity. C may be used as an alias for
+          countryName.
+
+   stateOrProvinceName
+          The state or province of the entity. ST may be used as an alias
+          for stateOrProvinceName�
+
+   localityName
+          The locality of the entity. L may be used as an alias for
+          localityName.
+
+   organizationName
+          The organization name of the entity. O may be used as an alias
+          for organizationName.
+
+   organizationalUnitName
+          The organizational unit of the entity. OU may be used as an
+          alias for organizationalUnitName.
+
+   commonName
+          The common name of the entity. CN may be used as an alias for
+          commonName.
+
+   emailAddress
+          The e-mail address of the entity.
+
+
+  3.1.3 X509Req objects
+
+   X509Req objects have the following methods:
+
+   get_pubkey()
+          Return a PKey object representing the public key of the
+          certificate request.
+
+   get_subject()
+          Return an X509Name object representing the subject of the
+          certificate.
+
+   set_pubkey(pkey)
+          Set the public key of the certificate request to pkey.
+
+   sign(pkey, digest)
+          Sign the certificate request, using the key pkey and the message
+          digest algorithm identified by the string digest.
+
+   verify(pkey)
+          Verify a certificate request using the public key pkey.
+
+
+  3.1.4 X509Store objects
+
+   The X509Store object has currently just one method:
+
+   add_cert(cert)
+          Add the certificate cert to the certificate store.
+
+
+  3.1.5 PKey objects
+
+   The PKey object has the following methods:
+
+   bits()
+          Return the number of bits of the key.
+
+   generate_key(type, bits)
+          Generate a public/private key pair of the type type (one of
+          TYPE_RSA and TYPE_DSA) with the size bits.
+
+   type()
+          Return the type of the key.
+
+
+  3.1.6 PKCS7 objects
+
+   PKCS7 objects have the following methods:
+
+   type_is_signed()
+          FIXME
+
+   type_is_enveloped()
+          FIXME
+
+   type_is_signedAndEnveloped()
+          FIXME
+
+   type_is_data()
+          FIXME
+
+   get_type_name()
+          Get the type name of the PKCS7.
+
+
+  3.1.7 PKCS12 objects
+
+   PKCS12 objects have the following methods:
+
+   get_certificate()
+          Return certificate portion of the PKCS12 structure.
+
+   get_privatekey()
+          Return private key portion of the PKCS12 structure
+
+   get_ca_certificates()
+          Return CA certificates within the PKCS12 object as a tuple.
+          Returns None if no CA certificates are present.
+
+
+  3.1.8 X509Extension objects
+
+   X509Extension objects currently only have one method:
+
+   get_critical()
+          Return the critical field of the extension object.
+
+
+  3.1.9 NetscapeSPKI objects
+
+   NetscapeSPKI objects have the following methods:
+
+   b64_encode()
+          Return a base64-encoded string representation of the object.
+
+   get_pubkey()
+          Return the public key of object.
+
+   set_pubkey(key)
+          Set the public key of the object to key.
+
+   sign(key, digest_name)
+          Sign the NetscapeSPKI object using the given key and
+          digest_name.
+
+   verify(key)
+          Verify the NetscapeSPKI object using the given key.
+
+
+3.2 rand -- An interface to the OpenSSL pseudo random number generator
+
+   This module handles the OpenSSL pseudo random number generator (PRNG)
+   and declares the following:
+
+   add(string, entropy)
+          Mix bytes from string into the PRNG state. The entropy argument
+          is (the lower bound of) an estimate of how much randomness is
+          contained in string, measured in bytes. For more information,
+          see e.g. RFC 1750.
+
+   egd(path[, bytes])
+          Query the Entropy Gathering Daemon^2 on socket path for bytes
+          bytes of random data and and uses add to seed the PRNG. The
+          default value of bytes is 255.
+
+   load_file(path[, bytes])
+          Read bytes bytes (or all of it, if bytes is negative) of data
+          from the file path to seed the PRNG. The default value of bytes
+          is -1.
+
+   screen()
+          Add the current contents of the screen to the PRNG state.
+          Availability: Windows.
+
+   seed(string)
+          This is equivalent to calling add with entropy as the length of
+          the string.
+
+   status()
+          Returns true if the PRNG has been seeded with enough data, and
+          false otherwise.
+
+   write_file(path)
+          Write a number of random bytes (currently 1024) to the file
+          path. This file can then be used with load_file to seed the PRNG
+          again.
+
+
+3.3 SSL -- An interface to the SSL-specific parts of OpenSSL
+
+   This module handles things specific to SSL. There are two objects
+   defined: Context, Connection.
+
+   SSLv2_METHOD
+
+   SSLv3_METHOD
+
+   SSLv23_METHOD
+
+   TLSv1_METHOD
+          These constants represent the different SSL methods to use when
+          creating a context object.
+
+   VERIFY_NONE
+
+   VERIFY_PEER
+
+   VERIFY_FAIL_IF_NO_PEER_CERT
+          These constants represent the verification mode used by the
+          Context object's set_verify method.
+
+   FILETYPE_PEM
+
+   FILETYPE_ASN1
+          File type constants used with the use_certificate_file and
+          use_privatekey_file methods of Context objects.
+
+   OP_SINGLE_DH_USE
+
+   OP_EPHEMERAL_RSA
+
+   OP_NO_SSLv2
+
+   OP_NO_SSLv3
+
+   OP_NO_TLSv1
+          Constants used with set_options of Context objects.
+          OP_SINGLE_DH_USE means to always create a new key when using
+          ephemeral Diffie-Hellman. OP_EPHEMERAL_RSA means to always use
+          ephemeral RSA keys when doing RSA operations. OP_NO_SSLv2,
+          OP_NO_SSLv3 and OP_NO_TLSv1 means to disable those specific
+          protocols. This is interesting if you're using e.g.
+          SSLv23_METHOD to get an SSLv2-compatible handshake, but don't
+          want to use SSLv2.
+
+   ContextType
+          A Python type object representing the Context object type.
+
+   Context(method)
+          Factory function that creates a new Context object given an SSL
+          method. The method should be SSLv2_METHOD, SSLv3_METHOD,
+          SSLv23_METHOD or TLSv1_METHOD.
+
+   ConnectionType
+          A Python type object representing the Connection object type.
+
+   Connection(context, socket)
+          Factory fucnction that creates a new Connection object given an
+          SSL context and a socket ^3 object.
+
+   exception Error
+          This exception is used as a base class for the other SSL-related
+          exceptions, but may also be raised directly.
+
+          Whenever this exception is raised directly, it has a list of
+          error messages from the OpenSSL error queue, where each item is
+          a tuple (lib, function, reason). Here lib, function and reason
+          are all strings, describing where and what the problem is. See
+          err(3) for more information.
+
+   exception ZeroReturnError
+          This exception matches the error return code
+          SSL_ERROR_ZERO_RETURN, and is raised when the SSL Connection has
+          been closed. In SSL 3.0 and TLS 1.0, this only occurs if a
+          closure alert has occurred in the protocol, i.e. the connection
+          has been closed cleanly. Note that this does not necessarily
+          mean that the transport layer (e.g. a socket) has been closed.
+
+          It may seem a little strange that this is an exception, but it
+          does match an SSL_ERROR code, and is very convenient.
+
+   exception WantReadError
+          The operation did not complete; the same I/O method should be
+          called again later, with the same arguments. Any I/O method can
+          lead to this since new handshakes can occur at any time.
+
+   exception WantWriteError
+          See WantReadError.
+
+   exception WantX509LookupError
+          The operation did not complete because an application callback
+          has asked to be called again. The I/O method should be called
+          again later, with the same arguments. Note: This won't occur in
+          this version, as there are no such callbacks in this version.
+
+   exception SysCallError
+          The SysCallError occurs when there's an I/O error and OpenSSL's
+          error queue does not contain any information. This can mean two
+          things: An error in the transport protocol, or an end of file
+          that violates the protocol. The parameter to the exception is
+          always a pair (errnum, errstr).
+
+
+  3.3.1 Context objects
+
+   Context objects have the following methods:
+
+   check_privatekey()
+          Check if the private key (loaded with use_privatekey[_file])
+          matches the certificate (loaded with use_certificate[_file]).
+          Returns None if they match, raises Error otherwise.
+
+   get_app_data()
+          Retrieve application data as set by set_app_data.
+
+   get_cert_store()
+          Retrieve the certificate store (a X509Store object) that the
+          context uses. This can be used to add "trusted" certificates
+          without using the. load_verify_locations() method.
+
+   get_timeout()
+          Retrieve session timeout, as set by set_timeout. The default is
+          300 seconds.
+
+   get_verify_depth()
+          Retrieve the Context object's verify depth, as set by
+          set_verify_depth.
+
+   get_verify_mode()
+          Retrieve the Context object's verify mode, as set by
+          set_verify_mode.
+
+   load_client_ca(pemfile)
+          Read a file with PEM-formatted certificates that will be sent to
+          the client when requesting a client certificate.
+
+   load_verify_locations(pemfile)
+          Specify where CA certificates for verification purposes are
+          located. These are trusted certificates. Note that the
+          certificates have to be in PEM format.
+
+   load_tmp_dh(dhfile)
+          Load parameters for Ephemeral Diffie-Hellman from dhfile.
+
+   set_app_data(data)
+          Associate data with this Context object. data can be retrieved
+          later using the get_app_data method.
+
+   set_cipher_list(ciphers)
+          Set the list of ciphers to be used in this context. See the
+          OpenSSL manual for more information (e.g. ciphers(1))
+
+   set_info_callback(callback)
+          Set the information callback to callback. This function will be
+          called from time to time during SSL handshakes. callback should
+          take three arguments: a Connection object and two integers. The
+          first integer specifies where in the SSL handshake the function
+          was called, and the other the return code from a (possibly
+          failed) internal function call.
+
+   set_options(options)
+          Add SSL options. Options you have set before are not cleared!
+          This method should be used with the OP_* constants.
+
+   set_passwd_cb(callback[, userdata])
+          Set the passphrase callback to callback. This function will be
+          called when a private key with a passphrase is loaded. callback
+          must accept three positional arguments. First, an integer giving
+          the maximum length of the passphrase it may return. If the
+          returned passphrase is longer than this, it will be truncated.
+          Second, a boolean value which will be true if the user should be
+          prompted for the passphrase twice and the callback should verify
+          that the two values supplied are equal. Third, the value given
+          as the userdata parameter to set_passwd_cb. If an error occurs,
+          callback should return a false value (e.g. an empty string).
+
+   set_session_id(name)
+          Set the context name within which a session can be reused for
+          this Context object. This is needed when doing session
+          resumption, because there is no way for a stored session to know
+          which Context object it is associated with. name may be any
+          binary data.
+
+   set_timeout(timeout)
+          Set the timeout for newly created sessions for this Context
+          object to timeout. timeout must be given in (whole) seconds. The
+          default value is 300 seconds. See the OpenSSL manual for more
+          information (e.g. SSL_CTX_set_timeout(3)).
+
+   set_verify(mode, callback)
+          Set the verification flags for this Context object to mode and
+          specify that callback should be used for verification callbacks.
+          mode should be one of VERIFY_NONE and VERIFY_PEER. If
+          VERIFY_PEER is used, mode can be OR:ed with
+          VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
+          control the behaviour. callback should take five arguments: A
+          Connection object, an X509 object, and three integer variables,
+          which are in turn potential error number, error depth and return
+          code. callback should return true if verification passes and
+          false otherwise.
+
+   set_verify_depth(depth)
+          Set the maximum depth for the certificate chain verification
+          that shall be allowed for this Context object.
+
+   use_certificate(cert)
+          Use the certificate cert which has to be a X509 object.
+
+   add_extra_chain_cert(cert)
+          Adds the certificate cert, which has to be a X509 object, to the
+          certificate chain presented together with the certificate.
+
+   use_certificate_chain_file(file)
+          Load a certificate chain from file which must be PEM encoded.
+
+   use_privatekey(pkey)
+          Use the private key pkey which has to be a PKey object.
+
+   use_certificate_file(file[, format])
+          Load the first certificate found in file. The certificate must
+          be in the format specified by format, which is either
+          FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
+
+   use_privatekey_file(file[, format])
+          Load the first private key found in file. The private key must
+          be in the format specified by format, which is either
+          FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
+
+
+  3.3.2 Connection objects
+
+   Connection objects have the following methods:
+
+   accept()
+          Call the accept method of the underlying socket and set up SSL
+          on the returned socket, using the Context object supplied to
+          this Connection object at creation. Returns a pair (conn,
+          address). where conn is the new Connection object created, and
+          address is as returned by the socket's accept.
+
+   bind(address)
+          Call the bind method of the underlying socket.
+
+   close()
+          Call the close method of the underlying socket. Note: If you
+          want correct SSL closure, you need to call the shutdown method
+          first.
+
+   connect(address)
+          Call the connect method of the underlying socket and set up SSL
+          on the socket, using the Context object supplied to this
+          Connection object at creation.
+
+   connect_ex(address)
+          Call the connect_ex method of the underlying socket and set up
+          SSL on the socket, using the Context object supplied to this
+          Connection object at creation. Note that if the connect_ex
+          method of the socket doesn't return 0, SSL won't be initialized.
+
+   do_handshake()
+          Perform an SSL handshake (usually called after renegotiate or
+          one of set_accept_state or set_accept_state). This can raise the
+          same exceptions as send and recv.
+
+   fileno()
+          Retrieve the file descriptor number for the underlying socket.
+
+   listen(backlog)
+          Call the listen method of the underlying socket.
+
+   get_app_data()
+          Retrieve application data as set by set_app_data.
+
+   get_cipher_list()
+          Retrieve the list of ciphers used by the Connection object.
+          WARNING: This API has changed. It used to take an optional
+          parameter and just return a string, but not it returns the
+          entire list in one go.
+
+   get_context()
+          Retrieve the Context object associated with this Connection.
+
+   get_peer_certificate()
+          Retrieve the other side's certificate (if any)
+
+   getpeername()
+          Call the getpeername method of the underlying socket.
+
+   getsockname()
+          Call the getsockname method of the underlying socket.
+
+   getsockopt(level, optname[, buflen])
+          Call the getsockopt method of the underlying socket.
+
+   pending()
+          Retrieve the number of bytes that can be safely read from the
+          SSL buffer (not the underlying transport buffer).
+
+   recv(bufsize)
+          Receive data from the Connection. The return value is a string
+          representing the data received. The maximum amount of data to be
+          received at once, is specified by bufsize.
+
+   renegotiate()
+          Renegotiate the SSL session. Call this if you wish to change
+          cipher suites or anything like that.
+
+   send(string)
+          Send the string data to the Connection.
+
+   sendall(string)
+          Send all of the string data to the Connection. This calls send
+          repeatedly until all data is sent. If an error occurs, it's
+          impossible to tell how much data has been sent.
+
+   set_accept_state()
+          Set the connection to work in server mode. The handshake will be
+          handled automatically by read/write.
+
+   set_app_data(data)
+          Associate data with this Connection object. data can be
+          retrieved later using the get_app_data method.
+
+   set_connect_state()
+          Set the connection to work in client mode. The handshake will be
+          handled automatically by read/write.
+
+   setblocking(flag)
+          Call the setblocking method of the underlying socket.
+
+   setsockopt(level, optname, value)
+          Call the setsockopt method of the underlying socket.
+
+   shutdown()
+          Send the shutdown message to the Connection. Returns true if the
+          shutdown message exchange is completed and false otherwise (in
+          which case you call recv() or send() when the connection becomes
+          readable/writeable.
+
+   get_shutdown()
+          Get the shutdown state of the Connection. Returns a bitvector of
+          either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
+
+   set_shutdown(state)
+          Set the shutdown state of the Connection. state is a bitvector
+          of either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
+
+   sock_shutdown(how)
+          Call the shutdown method of the underlying socket.
+
+   state_string()
+          Retrieve a verbose string detailing the state of the Connection.
+
+   want_read()
+          Checks if more data has to be read from the transport layer to
+          complete an operation.
+
+   want_write()
+          Checks if there is data to write to the transport layer to
+          complete an operation.
+
+
+                                  4 Internals
+
+   We ran into three main problems developing this: Exceptions, callbacks
+   and accessing socket methods. This is what this chapter is about.
+
+
+4.1 Exceptions
+
+   We realized early that most of the exceptions would be raised by the
+   I/O functions of OpenSSL, so it felt natural to mimic OpenSSL's error
+   code system, translating them into Python exceptions. This naturally
+   gives us the exceptions SSL.ZeroReturnError, SSL.WantReadError,
+   SSL.WantWriteError, SSL.WantX509LookupError and SSL.SysCallError.
+
+   For more information about this, see section 3.3.
+
+
+4.2 Callbacks
+
+   There are a number of problems with callbacks. First of all, OpenSSL is
+   written as a C library, it's not meant to have Python callbacks, so a
+   way around that is needed. Another problem is thread support. A lot of
+   the OpenSSL I/O functions can block if the socket is in blocking mode,
+   and then you want other Python threads to be able to do other things.
+   The real trouble is if you've released the global CPython interpreter
+   lock to do a potentially blocking operation, and the operation calls a
+   callback. Then we must take the GIL back, since calling Python APIs
+   without holding it is not allowed.
+
+   There are two solutions to the first problem, both of which are
+   necessary. The first solution to use is if the C callback allows
+   ''userdata'' to be passed to it (an arbitrary pointer normally). This
+   is great! We can set our Python function object as the real userdata
+   and emulate userdata for the Python function in another way. The other
+   solution can be used if an object with an ''app_data'' system always is
+   passed to the callback. For example, the SSL object in OpenSSL has
+   app_data functions and in e.g. the verification callbacks, you can
+   retrieve the related SSL object. What we do is to set our wrapper
+   Connection object as app_data for the SSL object, and we can easily
+   find the Python callback.
+
+   The other problem is solved using thread local variables. Whenever the
+   GIL is released before calling into an OpenSSL API, the PyThreadState
+   pointer returned by PyEval_SaveState is stored in a global thread local
+   variable (using Python's own TLS API, PyThread_set_key_value). When it
+   is necessary to re-acquire the GIL, either after the OpenSSL API
+   returns or in a C callback invoked by that OpenSSL API, the value of
+   the thread local variable is retrieved (PyThread_get_key_value) and
+   used to re-acquire the GIL. This allows Python threads to execute while
+   OpenSSL APIs are running and allows use of any particular pyOpenSSL
+   object from any Python thread, since there is no per-thread state
+   associated with any of these objects and since OpenSSL is threadsafe
+   (as long as properly initialized, as pyOpenSSL initializes it).
+
+
+4.3 Acessing Socket Methods
+
+   We quickly saw the benefit of wrapping socket methods in the
+   SSL.Connection class, for an easy transition into using SSL. The
+   problem here is that the socket module lacks a C API, and all the
+   methods are declared static. One approach would be to have OpenSSL as a
+   submodule to the socket module, placing all the code in socketmodule.c,
+   but this is obviously not a good solution, since you might not want to
+   import tonnes of extra stuff you're not going to use when importing the
+   socket module. The other approach is to somehow get a pointer to the
+   method to be called, either the C function, or a callable Python
+   object. This is not really a good solution either, since there's a lot
+   of lookups involved.
+
+   The way it works is that you have to supply a ``socket-like'' transport
+   object to the SSL.Connection. The only requirement of this object is
+   that it has a fileno() method that returns a file descriptor that's
+   valid at the C level (i.e. you can use the system calls read and
+   write). If you want to use the connect() or accept() methods of the
+   SSL.Connection object, the transport object has to supply such methods
+   too. Apart from them, any method lookups in the SSL.Connection object
+   that fail are passed on to the underlying transport object.
+
+   Future changes might be to allow Python-level transport objects, that
+   instead of having fileno() methods, have read() and write() methods, so
+   more advanced features of Python can be used. This would probably
+   entail some sort of OpenSSL ``BIOs'', but converting Python strings
+   back and forth is expensive, so this shouldn't be used unless
+   necessary. Other nice things would be to be able to pass in different
+   transport objects for reading and writing, but then the fileno() method
+   of SSL.Connection becomes virtually useless. Also, should the method
+   resolution be used on the read-transport or the write-transport?
+
+                            About this document ...
+
+   Python OpenSSL Manual
+
+   This document was generated using the LaTeX2HTML translator.
+
+   LaTeX2HTML is Copyright � 1993, 1994, 1995, 1996, 1997, Nikos Drakos,
+   Computer Based Learning Unit, University of Leeds, and Copyright �
+   1997, 1998, Ross Moore, Mathematics Department, Macquarie University,
+   Sydney.
+
+   The application of LaTeX2HTML to the Python documentation has been
+   heavily tailored by Fred L. Drake, Jr. Original navigation icons were
+   contributed by Christopher Petrilli.
+     __________________________________________________________________
+
+    Footnotes
+
+   ... M2Crypto^1
+          See http://chandlerproject.org/Projects/MeTooCrypto
+
+   ... Daemon^2
+          See http://www.lothar.com/tech/crypto/
+
+   ... socket^3
+          Actually, all that is required is an object that behaves like a
+          socket, you could even use files, even though it'd be tricky to
+          get the handshakes right!
+     __________________________________________________________________
+
+                            Python OpenSSL Manual
+     __________________________________________________________________
+
+   Release 0.8.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyopenssl/pyopenssl-26.p5m	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,70 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri value=pkg:/library/python-2/pyopenssl-26@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Python interface to the OpenSSL library"
+set name=info.classification value="org.opensolaris.category.2008:Development/Python"
+set name=info.upstream_url value="http://pyopenssl.sourceforge.net"
+set name=info.source_url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+license pyopenssl.copyright license='LGPLv2.1'
+
+dir path=usr
+dir path=usr/lib
+dir path=usr/lib/python2.6
+dir path=usr/lib/python2.6/vendor-packages
+dir path=usr/lib/python2.6/vendor-packages/OpenSSL
+dir path=usr/lib/python2.6/vendor-packages/OpenSSL/64
+dir path=usr/lib/python2.6/vendor-packages/OpenSSL/test
+dir path=usr/share
+dir path=usr/share/doc
+dir path=usr/share/doc/pyOpenSSL
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/64/SSL.so
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/64/crypto.so
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/64/rand.so
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/SSL.so
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/__init__.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/crypto.so
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/rand.so
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/__init__.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/__init__.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/test_crypto.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/test_crypto.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/test_rand.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/test_rand.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/test_ssl.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/test_ssl.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/util.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/test/util.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/tsafe.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/tsafe.pyc
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/version.py
+file path=usr/lib/python2.6/vendor-packages/OpenSSL/version.pyc
+file path=usr/lib/python2.6/vendor-packages/pyOpenSSL-0.11-py2.6.egg-info
+file pyOpenSSL.txt path=usr/share/doc/pyOpenSSL/pyOpenSSL.txt
+
+legacy pkg=SUNWpython26-openssl \
+	name="pyOpenSSL - Python interface to the OpenSSL library for Python 2.6" \
+	desc="pyOpenSSL - Python interface to the OpenSSL library"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/pyopenssl/pyopenssl.copyright	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,523 @@
+Oracle elects to use only the GNU Lesser General Public License version
+2.1 (LGPL)/GNU General Public License version 2 (GPL) for any software
+where a choice of LGPL/GPL license versions are made available with the
+language indicating that LGPLv2.1/GPLv2 or any later version may be
+used, or where a choice of which version of the LGPL/GPL is applied is
+unspecified.  Unless specifically stated otherwise, where a choice
+exists between another license and either the GPL or the LGPL, Oracle
+chooses the other license.
+
+--------------------------------------------------------------------
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+^L
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+^L
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+    <one line to give the library's name and a brief idea of what it
+does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+
+Also add information on how to contact you by electronic and paper
+mail.
+
+You should also get your employer (if you work as a programmer) or
+your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James
+Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,85 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+include $(WS_TOP)/make-rules/shared-macros.mk
+
+PATH=/usr/bin:/usr/gnu/bin:/usr/sbin
+
+COMPONENT_NAME=		Python
+COMPONENT_VERSION=	2.6.4
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.bz2
+COMPONENT_ARCHIVE_HASH=	sha1:bee572680d1966501247cb2b26e0e51f94d1cd13
+COMPONENT_ARCHIVE_URL=	http://python.org/ftp/python/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
+
+include $(WS_TOP)/make-rules/prep.mk
+include $(WS_TOP)/make-rules/configure.mk
+include $(WS_TOP)/make-rules/ips.mk
+
+#
+# Until the fix for "17858 pkgdepend generate hurls on some python modules" is
+# generally installed on our build systems, we need to skip the dependency
+# generation step.  see https://defect.opensolaris.org/bz/show_bug.cgi?id=17858
+# When this is fixed, we need to remove the static dependencies from the
+# manifest.
+#
+$(MANIFEST_BASE)-python-26.depend:	PKGDEPEND = /bin/true
+
+# we don't want to leak $(CC_BITS) into BASECFLAGS as it causes problems with
+# python-config
+CC +=	$(CC_BITS)
+
+C99MODE=
+CPPFLAGS +=	-IPython
+
+# libffi for _ctypes
+CPPFLAGS +=	$(shell pkg-config --cflags-only-I libffi)
+
+CONFIGURE_OPTIONS  +=		--infodir=$(CONFIGURE_INFODIR)
+CONFIGURE_OPTIONS  +=		--enable-shared
+CONFIGURE_OPTIONS  +=		--disable-static
+CONFIGURE_OPTIONS  +=		--with-system-ffi
+CONFIGURE_OPTIONS  +=		--without-gcc
+CONFIGURE_OPTIONS  +=		ac_cv_opt_olimit_ok=no
+CONFIGURE_OPTIONS  +=		ac_cv_olimit_ok=no
+CONFIGURE_OPTIONS  +=		CPPFLAGS="$(CPPFLAGS)"
+CONFIGURE_OPTIONS  +=		DFLAGS="-$(BITS)"
+COMPONENT_BUILD_ENV  +=		DFLAGS="-$(BITS)"
+
+# 64 bit shared objects need to go in a 64-bit directory
+COMPONENT_INSTALL_ARGS.64 += DESTSHARED=$(CONFIGURE_PREFIX)/lib/python2.6/lib-dynload
+
+# common targets
+build:		$(BUILD_32_and_64)
+
+$(INSTALL_32):	$(INSTALL_64)
+
+install:	$(INSTALL_32_and_64)
+
+test:	$(TEST_32_and_64)
+
+$(BUILD_DIR)/%/.tested:	$(BUILD_DIR)/%/.built
+	(cd $(@D) ; gmake test || exit 0) 
+
+BUILD_PKG_DEPENDENCIES =	$(BUILD_TOOLS)
+
+include $(WS_TOP)/make-rules/depend.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-00-filemagic.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,2232 @@
+diff -u Python-2.6.4/Lib/platform.py.orig Python-2.6.4/Lib/platform.py
+--- Python-2.6.4/Lib/platform.py.orig	Mon Feb 21 10:46:30 2011
++++ Python-2.6.4/Lib/platform.py	Mon Feb 21 10:46:30 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """ This module tries to retrieve as much platform-identifying data as
+     possible. It makes this information available via function APIs.
+diff -u Python-2.6.4/Lib/profile.py.orig Python-2.6.4/Lib/profile.py
+--- Python-2.6.4/Lib/profile.py.orig	Mon Feb 21 10:46:25 2011
++++ Python-2.6.4/Lib/profile.py	Mon Feb 21 10:46:25 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # Class for profiling python code. rev 1.0  6/2/94
+ #
+diff -u Python-2.6.4/Lib/trace.py.orig Python-2.6.4/Lib/trace.py
+--- Python-2.6.4/Lib/trace.py.orig	Mon Feb 21 10:46:29 2011
++++ Python-2.6.4/Lib/trace.py	Mon Feb 21 10:46:29 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # portions copyright 2001, Autonomous Zones Industries, Inc., all rights...
+ # err...  reserved and offered to the public under the terms of the
+diff -u Python-2.6.4/Lib/cProfile.py.orig Python-2.6.4/Lib/cProfile.py
+--- Python-2.6.4/Lib/cProfile.py.orig	Mon Feb 21 10:46:29 2011
++++ Python-2.6.4/Lib/cProfile.py	Mon Feb 21 10:46:29 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Python interface for the 'lsprof' profiler.
+    Compatible with the 'profile' module.
+diff -u Python-2.6.4/Lib/idlelib/PyShell.py.orig Python-2.6.4/Lib/idlelib/PyShell.py
+--- Python-2.6.4/Lib/idlelib/PyShell.py.orig	Mon Feb 21 10:46:23 2011
++++ Python-2.6.4/Lib/idlelib/PyShell.py	Mon Feb 21 10:46:23 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import os
+ import os.path
+diff -u Python-2.6.4/Lib/UserString.py.orig Python-2.6.4/Lib/UserString.py
+--- Python-2.6.4/Lib/UserString.py.orig	Mon Feb 21 10:46:27 2011
++++ Python-2.6.4/Lib/UserString.py	Mon Feb 21 10:46:27 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ ## vim:ts=4:et:nowrap
+ """A user-defined wrapper around string objects
+ 
+diff -u Python-2.6.4/Lib/lib2to3/tests/pytree_idempotency.py.orig Python-2.6.4/Lib/lib2to3/tests/pytree_idempotency.py
+--- Python-2.6.4/Lib/lib2to3/tests/pytree_idempotency.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/tests/pytree_idempotency.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ # Copyright 2006 Google, Inc. All Rights Reserved.
+ # Licensed to PSF under a Contributor Agreement.
+ 
+diff -u Python-2.6.4/Lib/lib2to3/tests/test_all_fixers.py.orig Python-2.6.4/Lib/lib2to3/tests/test_all_fixers.py
+--- Python-2.6.4/Lib/lib2to3/tests/test_all_fixers.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/tests/test_all_fixers.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ """Tests that run all fixer modules over an input stream.
+ 
+ This has been broken out into its own test module because of its
+diff -u Python-2.6.4/Lib/lib2to3/tests/test_util.py.orig Python-2.6.4/Lib/lib2to3/tests/test_util.py
+--- Python-2.6.4/Lib/lib2to3/tests/test_util.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/tests/test_util.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ """ Test suite for the code in fixes.util """
+ # Author: Collin Winter
+ 
+diff -u Python-2.6.4/Lib/lib2to3/tests/test_parser.py.orig Python-2.6.4/Lib/lib2to3/tests/test_parser.py
+--- Python-2.6.4/Lib/lib2to3/tests/test_parser.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/tests/test_parser.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ """Test suite for 2to3's parser and grammar files.
+ 
+ This is the place to add tests for changes to 2to3's grammar, such as those
+diff -u Python-2.6.4/Lib/lib2to3/tests/test_pytree.py.orig Python-2.6.4/Lib/lib2to3/tests/test_pytree.py
+--- Python-2.6.4/Lib/lib2to3/tests/test_pytree.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/tests/test_pytree.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ # Copyright 2006 Google, Inc. All Rights Reserved.
+ # Licensed to PSF under a Contributor Agreement.
+ 
+diff -u Python-2.6.4/Lib/lib2to3/tests/test_fixers.py.orig Python-2.6.4/Lib/lib2to3/tests/test_fixers.py
+--- Python-2.6.4/Lib/lib2to3/tests/test_fixers.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/tests/test_fixers.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ """ Test suite for the fixer modules """
+ # Author: Collin Winter
+ 
+diff -u Python-2.6.4/Lib/lib2to3/refactor.py.orig Python-2.6.4/Lib/lib2to3/refactor.py
+--- Python-2.6.4/Lib/lib2to3/refactor.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/lib2to3/refactor.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python2.5
++#!/usr/bin/python2.6
+ # Copyright 2006 Google, Inc. All Rights Reserved.
+ # Licensed to PSF under a Contributor Agreement.
+ 
+diff -u Python-2.6.4/Lib/lib2to3/pgen2/token.py.orig Python-2.6.4/Lib/lib2to3/pgen2/token.py
+--- Python-2.6.4/Lib/lib2to3/pgen2/token.py.orig	Mon Feb 21 10:46:25 2011
++++ Python-2.6.4/Lib/lib2to3/pgen2/token.py	Mon Feb 21 10:46:25 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Token constants (from "token.h")."""
+ 
+diff -u Python-2.6.4/Lib/cgi.py.orig Python-2.6.4/Lib/cgi.py
+--- Python-2.6.4/Lib/cgi.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/cgi.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#! /usr/local/bin/python
++#!/usr/bin/python2.6
+ 
+ # NOTE: the above "/usr/local/bin/python" is NOT a mistake.  It is
+ # intentionally NOT "/usr/bin/env python".  On many systems
+diff -u Python-2.6.4/Lib/base64.py.orig Python-2.6.4/Lib/base64.py
+--- Python-2.6.4/Lib/base64.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/base64.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """RFC 3548: Base16, Base32, Base64 Data Encodings"""
+ 
+diff -u Python-2.6.4/Lib/encodings/rot_13.py.orig Python-2.6.4/Lib/encodings/rot_13.py
+--- Python-2.6.4/Lib/encodings/rot_13.py.orig	Mon Feb 21 10:46:26 2011
++++ Python-2.6.4/Lib/encodings/rot_13.py	Mon Feb 21 10:46:26 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ """ Python Character Mapping Codec for ROT13.
+ 
+     See http://ucsub.colorado.edu/~kominek/rot13/ for details.
+diff -u Python-2.6.4/Lib/tabnanny.py.orig Python-2.6.4/Lib/tabnanny.py
+--- Python-2.6.4/Lib/tabnanny.py.orig	Mon Feb 21 10:46:27 2011
++++ Python-2.6.4/Lib/tabnanny.py	Mon Feb 21 10:46:27 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """The Tab Nanny despises ambiguous indentation.  She knows no mercy.
+ 
+diff -u Python-2.6.4/Lib/timeit.py.orig Python-2.6.4/Lib/timeit.py
+--- Python-2.6.4/Lib/timeit.py.orig	Mon Feb 21 10:46:23 2011
++++ Python-2.6.4/Lib/timeit.py	Mon Feb 21 10:46:23 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Tool for measuring execution time of small code snippets.
+ 
+diff -u Python-2.6.4/Lib/pydoc.py.orig Python-2.6.4/Lib/pydoc.py
+--- Python-2.6.4/Lib/pydoc.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/pydoc.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: latin-1 -*-
+ """Generate Python documentation in HTML or text for interactive use.
+ 
+diff -u Python-2.6.4/Lib/quopri.py.orig Python-2.6.4/Lib/quopri.py
+--- Python-2.6.4/Lib/quopri.py.orig	Mon Feb 21 10:46:29 2011
++++ Python-2.6.4/Lib/quopri.py	Mon Feb 21 10:46:29 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Conversions to/from quoted-printable transport encoding as per RFC 1521."""
+ 
+diff -u Python-2.6.4/Lib/keyword.py.orig Python-2.6.4/Lib/keyword.py
+--- Python-2.6.4/Lib/keyword.py.orig	Mon Feb 21 10:46:24 2011
++++ Python-2.6.4/Lib/keyword.py	Mon Feb 21 10:46:24 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Keywords (from "graminit.c")
+ 
+diff -u Python-2.6.4/Lib/mailbox.py.orig Python-2.6.4/Lib/mailbox.py
+--- Python-2.6.4/Lib/mailbox.py.orig	Mon Feb 21 10:46:27 2011
++++ Python-2.6.4/Lib/mailbox.py	Mon Feb 21 10:46:27 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Read/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes."""
+ 
+diff -u Python-2.6.4/Lib/difflib.py.orig Python-2.6.4/Lib/difflib.py
+--- Python-2.6.4/Lib/difflib.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/difflib.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ Module difflib -- helpers for computing deltas between objects.
+diff -u Python-2.6.4/Lib/webbrowser.py.orig Python-2.6.4/Lib/webbrowser.py
+--- Python-2.6.4/Lib/webbrowser.py.orig	Mon Feb 21 10:46:26 2011
++++ Python-2.6.4/Lib/webbrowser.py	Mon Feb 21 10:46:26 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Interfaces for launching and remotely controlling Web browsers."""
+ # Maintained by Georg Brandl.
+ 
+diff -u Python-2.6.4/Lib/unittest.py.orig Python-2.6.4/Lib/unittest.py
+--- Python-2.6.4/Lib/unittest.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/unittest.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ '''
+ Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's
+ Smalltalk testing framework.
+diff -u Python-2.6.4/Lib/bsddb/test/test_dbtables.py.orig Python-2.6.4/Lib/bsddb/test/test_dbtables.py
+--- Python-2.6.4/Lib/bsddb/test/test_dbtables.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/bsddb/test/test_dbtables.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ #-----------------------------------------------------------------------
+ # A test suite for the table interface built on bsddb.db
+diff -u Python-2.6.4/Lib/bsddb/dbshelve.py.orig Python-2.6.4/Lib/bsddb/dbshelve.py
+--- Python-2.6.4/Lib/bsddb/dbshelve.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/bsddb/dbshelve.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#!/bin/env python
++#!/usr/bin/python2.6
+ #------------------------------------------------------------------------
+ #           Copyright (c) 1997-2001 by Total Control Software
+ #                         All Rights Reserved
+diff -u Python-2.6.4/Lib/token.py.orig Python-2.6.4/Lib/token.py
+--- Python-2.6.4/Lib/token.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/token.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Token constants (from "token.h")."""
+ 
+diff -u Python-2.6.4/Lib/Cookie.py.orig Python-2.6.4/Lib/Cookie.py
+--- Python-2.6.4/Lib/Cookie.py.orig	Mon Feb 21 10:46:25 2011
++++ Python-2.6.4/Lib/Cookie.py	Mon Feb 21 10:46:25 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ 
+ ####
+diff -u Python-2.6.4/Lib/smtplib.py.orig Python-2.6.4/Lib/smtplib.py
+--- Python-2.6.4/Lib/smtplib.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/smtplib.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ '''SMTP/ESMTP client class.
+ 
+diff -u Python-2.6.4/Lib/smtpd.py.orig Python-2.6.4/Lib/smtpd.py
+--- Python-2.6.4/Lib/smtpd.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/smtpd.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """An RFC 2821 smtp proxy.
+ 
+ Usage: %(program)s [options] [localhost:localport [remotehost:remoteport]]
+diff -u Python-2.6.4/Lib/test/regrtest.py.orig Python-2.6.4/Lib/test/regrtest.py
+--- Python-2.6.4/Lib/test/regrtest.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/regrtest.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Regression test.
+ 
+diff -u Python-2.6.4/Lib/test/test_sets.py.orig Python-2.6.4/Lib/test/test_sets.py
+--- Python-2.6.4/Lib/test/test_sets.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_sets.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import warnings
+ warnings.filterwarnings("ignore", "the sets module is deprecated",
+diff -u Python-2.6.4/Lib/test/test_dl.py.orig Python-2.6.4/Lib/test/test_dl.py
+--- Python-2.6.4/Lib/test/test_dl.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_dl.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test dlmodule.c
+    Roger E. Masse  revised strategy by Barry Warsaw
+ """
+diff -u Python-2.6.4/Lib/test/test_multiprocessing.py.orig Python-2.6.4/Lib/test/test_multiprocessing.py
+--- Python-2.6.4/Lib/test/test_multiprocessing.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_multiprocessing.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ #
+ # Unit tests for the multiprocessing package
+diff -u Python-2.6.4/Lib/test/test_cmd.py.orig Python-2.6.4/Lib/test/test_cmd.py
+--- Python-2.6.4/Lib/test/test_cmd.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/test/test_cmd.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ """
+ Test script for the 'cmd' module
+ Original by Michael Schneider
+diff -u Python-2.6.4/Lib/test/test_userstring.py.orig Python-2.6.4/Lib/test/test_userstring.py
+--- Python-2.6.4/Lib/test/test_userstring.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_userstring.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # UserString is a wrapper around the native builtin string type.
+ # UserString instances should behave similar to builtin string objects.
+ 
+diff -u Python-2.6.4/Lib/test/test_popen.py.orig Python-2.6.4/Lib/test/test_popen.py
+--- Python-2.6.4/Lib/test/test_popen.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_popen.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Basic tests for os.popen()
+ 
+   Particularly useful for platforms that fake popen.
+diff -u Python-2.6.4/Lib/test/test_cd.py.orig Python-2.6.4/Lib/test/test_cd.py
+--- Python-2.6.4/Lib/test/test_cd.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_cd.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Whimpy test script for the cd module
+    Roger E. Masse
+ """
+diff -u Python-2.6.4/Lib/test/test_cl.py.orig Python-2.6.4/Lib/test/test_cl.py
+--- Python-2.6.4/Lib/test/test_cl.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_cl.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Whimpy test script for the cl module
+    Roger E. Masse
+ """
+diff -u Python-2.6.4/Lib/test/test_imgfile.py.orig Python-2.6.4/Lib/test/test_imgfile.py
+--- Python-2.6.4/Lib/test/test_imgfile.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_imgfile.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Simple test script for imgfile.c
+    Roger E. Masse
+diff -u Python-2.6.4/Lib/test/test_random.py.orig Python-2.6.4/Lib/test/test_random.py
+--- Python-2.6.4/Lib/test/test_random.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_random.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import unittest
+ import random
+diff -u Python-2.6.4/Lib/test/curses_tests.py.orig Python-2.6.4/Lib/test/curses_tests.py
+--- Python-2.6.4/Lib/test/curses_tests.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/curses_tests.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # $Id: ncurses.py 36559 2004-07-18 05:56:09Z tim_one $
+ #
+diff -u Python-2.6.4/Lib/test/test_codecmaps_cn.py.orig Python-2.6.4/Lib/test/test_codecmaps_cn.py
+--- Python-2.6.4/Lib/test/test_codecmaps_cn.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_codecmaps_cn.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecmaps_cn.py
+ #   Codec mapping tests for PRC encodings
+diff -u Python-2.6.4/Lib/test/test_whichdb.py.orig Python-2.6.4/Lib/test/test_whichdb.py
+--- Python-2.6.4/Lib/test/test_whichdb.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/test/test_whichdb.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for the whichdb module
+    based on test_anydbm.py
+ """
+diff -u Python-2.6.4/Lib/test/test_eof.py.orig Python-2.6.4/Lib/test/test_eof.py
+--- Python-2.6.4/Lib/test/test_eof.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_eof.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """test script for a few new invalid token catches"""
+ 
+ import unittest
+diff -u Python-2.6.4/Lib/test/test_imageop.py.orig Python-2.6.4/Lib/test/test_imageop.py
+--- Python-2.6.4/Lib/test/test_imageop.py.orig	Mon Feb 21 10:46:31 2011
++++ Python-2.6.4/Lib/test/test_imageop.py	Mon Feb 21 10:46:31 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Test script for the imageop module.  This has the side
+    effect of partially testing the imgfile module as well.
+diff -u Python-2.6.4/Lib/test/test_codecmaps_tw.py.orig Python-2.6.4/Lib/test/test_codecmaps_tw.py
+--- Python-2.6.4/Lib/test/test_codecmaps_tw.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_codecmaps_tw.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecmaps_tw.py
+ #   Codec mapping tests for ROC encodings
+diff -u Python-2.6.4/Lib/test/test_codecencodings_hk.py.orig Python-2.6.4/Lib/test/test_codecencodings_hk.py
+--- Python-2.6.4/Lib/test/test_codecencodings_hk.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_codecencodings_hk.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecencodings_hk.py
+ #   Codec encoding tests for HongKong encodings.
+diff -u Python-2.6.4/Lib/test/test_codecencodings_jp.py.orig Python-2.6.4/Lib/test/test_codecencodings_jp.py
+--- Python-2.6.4/Lib/test/test_codecencodings_jp.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_codecencodings_jp.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecencodings_jp.py
+ #   Codec encoding tests for Japanese encodings.
+diff -u Python-2.6.4/Lib/test/test_with.py.orig Python-2.6.4/Lib/test/test_with.py
+--- Python-2.6.4/Lib/test/test_with.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_with.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Unit tests for the with statement specified in PEP 343."""
+ 
+diff -u Python-2.6.4/Lib/test/crashers/recursive_call.py.orig Python-2.6.4/Lib/test/crashers/recursive_call.py
+--- Python-2.6.4/Lib/test/crashers/recursive_call.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/crashers/recursive_call.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # No bug report AFAIK, mail on python-dev on 2006-01-10
+ 
+diff -u Python-2.6.4/Lib/test/test_codecmaps_kr.py.orig Python-2.6.4/Lib/test/test_codecmaps_kr.py
+--- Python-2.6.4/Lib/test/test_codecmaps_kr.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_codecmaps_kr.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecmaps_kr.py
+ #   Codec mapping tests for ROK encodings
+diff -u Python-2.6.4/Lib/test/test_array.py.orig Python-2.6.4/Lib/test/test_array.py
+--- Python-2.6.4/Lib/test/test_array.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_array.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test the arraymodule.
+    Roger E. Masse
+ """
+diff -u Python-2.6.4/Lib/test/test_pep263.py.orig Python-2.6.4/Lib/test/test_pep263.py
+--- Python-2.6.4/Lib/test/test_pep263.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_pep263.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#! -*- coding: koi8-r -*-
++#!/usr/bin/python2.6
+ # This file is marked as binary in SVN, to prevent MacCVS from recoding it.
+ 
+ import unittest
+diff -u Python-2.6.4/Lib/test/test_anydbm.py.orig Python-2.6.4/Lib/test/test_anydbm.py
+--- Python-2.6.4/Lib/test/test_anydbm.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_anydbm.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for the anydbm module
+    based on testdumbdbm.py
+ """
+diff -u Python-2.6.4/Lib/test/test_smtpnet.py.orig Python-2.6.4/Lib/test/test_smtpnet.py
+--- Python-2.6.4/Lib/test/test_smtpnet.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_smtpnet.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import unittest
+ from test import test_support
+diff -u Python-2.6.4/Lib/test/test_al.py.orig Python-2.6.4/Lib/test/test_al.py
+--- Python-2.6.4/Lib/test/test_al.py.orig	Mon Feb 21 10:46:31 2011
++++ Python-2.6.4/Lib/test/test_al.py	Mon Feb 21 10:46:31 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Whimpy test script for the al module
+    Roger E. Masse
+ """
+diff -u Python-2.6.4/Lib/test/test_urllib2net.py.orig Python-2.6.4/Lib/test/test_urllib2net.py
+--- Python-2.6.4/Lib/test/test_urllib2net.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_urllib2net.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import unittest
+ from test import test_support
+diff -u Python-2.6.4/Lib/test/test_marshal.py.orig Python-2.6.4/Lib/test/test_marshal.py
+--- Python-2.6.4/Lib/test/test_marshal.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_marshal.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: iso-8859-1 -*-
+ 
+ from test import test_support
+diff -u Python-2.6.4/Lib/test/test_urlparse.py.orig Python-2.6.4/Lib/test/test_urlparse.py
+--- Python-2.6.4/Lib/test/test_urlparse.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_urlparse.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ from test import test_support
+ import unittest
+diff -u Python-2.6.4/Lib/test/test_bz2.py.orig Python-2.6.4/Lib/test/test_bz2.py
+--- Python-2.6.4/Lib/test/test_bz2.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_bz2.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ from test import test_support
+ from test.test_support import TESTFN
+ 
+diff -u Python-2.6.4/Lib/test/test_urllibnet.py.orig Python-2.6.4/Lib/test/test_urllibnet.py
+--- Python-2.6.4/Lib/test/test_urllibnet.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_urllibnet.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import unittest
+ from test import test_support
+diff -u Python-2.6.4/Lib/test/test_logging.py.orig Python-2.6.4/Lib/test/test_logging.py
+--- Python-2.6.4/Lib/test/test_logging.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_logging.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # Copyright 2001-2004 by Vinay Sajip. All Rights Reserved.
+ #
+diff -u Python-2.6.4/Lib/test/test_socket.py.orig Python-2.6.4/Lib/test/test_socket.py
+--- Python-2.6.4/Lib/test/test_socket.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_socket.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import unittest
+ from test import test_support
+diff -u Python-2.6.4/Lib/test/pystone.py.orig Python-2.6.4/Lib/test/pystone.py
+--- Python-2.6.4/Lib/test/pystone.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/pystone.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ "PYSTONE" Benchmark Program
+diff -u Python-2.6.4/Lib/test/test_multibytecodec.py.orig Python-2.6.4/Lib/test/test_multibytecodec.py
+--- Python-2.6.4/Lib/test/test_multibytecodec.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_multibytecodec.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_multibytecodec.py
+ #   Unit test for multibytecodec itself
+diff -u Python-2.6.4/Lib/test/test_popen2.py.orig Python-2.6.4/Lib/test/test_popen2.py
+--- Python-2.6.4/Lib/test/test_popen2.py.orig	Mon Feb 21 10:46:33 2011
++++ Python-2.6.4/Lib/test/test_popen2.py	Mon Feb 21 10:46:33 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for popen2.py"""
+ 
+ import warnings
+diff -u Python-2.6.4/Lib/test/test_binhex.py.orig Python-2.6.4/Lib/test/test_binhex.py
+--- Python-2.6.4/Lib/test/test_binhex.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_binhex.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for the binhex C module
+ 
+    Uses the mechanism of the python binhex module
+diff -u Python-2.6.4/Lib/test/test_gzip.py.orig Python-2.6.4/Lib/test/test_gzip.py
+--- Python-2.6.4/Lib/test/test_gzip.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/test/test_gzip.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for the gzip module.
+ """
+ 
+diff -u Python-2.6.4/Lib/test/re_tests.py.orig Python-2.6.4/Lib/test/re_tests.py
+--- Python-2.6.4/Lib/test/re_tests.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/re_tests.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- mode: python -*-
+ 
+ # Re test suite and benchmark suite v1.5
+diff -u Python-2.6.4/Lib/test/test_urllib2_localnet.py.orig Python-2.6.4/Lib/test/test_urllib2_localnet.py
+--- Python-2.6.4/Lib/test/test_urllib2_localnet.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_urllib2_localnet.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import mimetools
+ import threading
+diff -u Python-2.6.4/Lib/test/test_codecencodings_kr.py.orig Python-2.6.4/Lib/test/test_codecencodings_kr.py
+--- Python-2.6.4/Lib/test/test_codecencodings_kr.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_codecencodings_kr.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecencodings_kr.py
+ #   Codec encoding tests for ROK encodings.
+diff -u Python-2.6.4/Lib/test/test_multibytecodec_support.py.orig Python-2.6.4/Lib/test/test_multibytecodec_support.py
+--- Python-2.6.4/Lib/test/test_multibytecodec_support.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_multibytecodec_support.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_multibytecodec_support.py
+ #   Common Unittest Routines for CJK codecs
+diff -u Python-2.6.4/Lib/test/test_tcl.py.orig Python-2.6.4/Lib/test/test_tcl.py
+--- Python-2.6.4/Lib/test/test_tcl.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/test/test_tcl.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import unittest
+ import os
+diff -u Python-2.6.4/Lib/test/test_codecencodings_cn.py.orig Python-2.6.4/Lib/test/test_codecencodings_cn.py
+--- Python-2.6.4/Lib/test/test_codecencodings_cn.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_codecencodings_cn.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecencodings_cn.py
+ #   Codec encoding tests for PRC encodings.
+diff -u Python-2.6.4/Lib/test/test_gl.py.orig Python-2.6.4/Lib/test/test_gl.py
+--- Python-2.6.4/Lib/test/test_gl.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_gl.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Very simple test script for the SGI gl library extension module
+     taken mostly from the documentation.
+     Roger E. Masse
+diff -u Python-2.6.4/Lib/test/test___future__.py.orig Python-2.6.4/Lib/test/test___future__.py
+--- Python-2.6.4/Lib/test/test___future__.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test___future__.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ import unittest
+ from test import test_support
+ import __future__
+diff -u Python-2.6.4/Lib/test/test_bsddb.py.orig Python-2.6.4/Lib/test/test_bsddb.py
+--- Python-2.6.4/Lib/test/test_bsddb.py.orig	Mon Feb 21 10:46:36 2011
++++ Python-2.6.4/Lib/test/test_bsddb.py	Mon Feb 21 10:46:36 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for the bsddb C module by Roger E. Masse
+    Adapted to unittest format and expanded scope by Raymond Hettinger
+ """
+diff -u Python-2.6.4/Lib/test/test_errno.py.orig Python-2.6.4/Lib/test/test_errno.py
+--- Python-2.6.4/Lib/test/test_errno.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_errno.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test the errno module
+    Roger E. Masse
+ """
+diff -u Python-2.6.4/Lib/test/test_optparse.py.orig Python-2.6.4/Lib/test/test_optparse.py
+--- Python-2.6.4/Lib/test/test_optparse.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_optparse.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ 
+ #
+ # Test suite for Optik.  Supplied by Johannes Gijsbers
+diff -u Python-2.6.4/Lib/test/test_codecencodings_tw.py.orig Python-2.6.4/Lib/test/test_codecencodings_tw.py
+--- Python-2.6.4/Lib/test/test_codecencodings_tw.py.orig	Mon Feb 21 10:46:35 2011
++++ Python-2.6.4/Lib/test/test_codecencodings_tw.py	Mon Feb 21 10:46:35 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecencodings_tw.py
+ #   Codec encoding tests for ROC encodings.
+diff -u Python-2.6.4/Lib/test/test_codecmaps_jp.py.orig Python-2.6.4/Lib/test/test_codecmaps_jp.py
+--- Python-2.6.4/Lib/test/test_codecmaps_jp.py.orig	Mon Feb 21 10:46:32 2011
++++ Python-2.6.4/Lib/test/test_codecmaps_jp.py	Mon Feb 21 10:46:32 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecmaps_jp.py
+ #   Codec mapping tests for Japanese encodings
+diff -u Python-2.6.4/Lib/test/test_codecmaps_hk.py.orig Python-2.6.4/Lib/test/test_codecmaps_hk.py
+--- Python-2.6.4/Lib/test/test_codecmaps_hk.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_codecmaps_hk.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # test_codecmaps_hk.py
+ #   Codec mapping tests for HongKong encodings
+diff -u Python-2.6.4/Lib/test/test_dumbdbm.py.orig Python-2.6.4/Lib/test/test_dumbdbm.py
+--- Python-2.6.4/Lib/test/test_dumbdbm.py.orig	Mon Feb 21 10:46:34 2011
++++ Python-2.6.4/Lib/test/test_dumbdbm.py	Mon Feb 21 10:46:34 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Test script for the dumbdbm module
+    Original by Roger E. Masse
+ """
+diff -u Python-2.6.4/Lib/tarfile.py.orig Python-2.6.4/Lib/tarfile.py
+--- Python-2.6.4/Lib/tarfile.py.orig	Mon Feb 21 10:46:38 2011
++++ Python-2.6.4/Lib/tarfile.py	Mon Feb 21 10:46:38 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: iso-8859-1 -*-
+ #-------------------------------------------------------------------
+ # tarfile.py
+diff -u Python-2.6.4/Lib/uu.py.orig Python-2.6.4/Lib/uu.py
+--- Python-2.6.4/Lib/uu.py.orig	Mon Feb 21 10:46:25 2011
++++ Python-2.6.4/Lib/uu.py	Mon Feb 21 10:46:25 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Copyright 1994 by Lance Ellinghouse
+ # Cathedral City, California Republic, United States of America.
+diff -u Python-2.6.4/Lib/symbol.py.orig Python-2.6.4/Lib/symbol.py
+--- Python-2.6.4/Lib/symbol.py.orig	Mon Feb 21 10:46:27 2011
++++ Python-2.6.4/Lib/symbol.py	Mon Feb 21 10:46:27 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Non-terminal symbols of Python grammar (from "graminit.h")."""
+ 
+diff -u Python-2.6.4/Lib/mimify.py.orig Python-2.6.4/Lib/mimify.py
+--- Python-2.6.4/Lib/mimify.py.orig	Mon Feb 21 10:46:28 2011
++++ Python-2.6.4/Lib/mimify.py	Mon Feb 21 10:46:28 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Mimification and unmimification of mail messages.
+ 
+diff -u Python-2.6.4/Lib/pdb.py.orig Python-2.6.4/Lib/pdb.py
+--- Python-2.6.4/Lib/pdb.py.orig	Mon Feb 21 10:46:38 2011
++++ Python-2.6.4/Lib/pdb.py	Mon Feb 21 10:46:38 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """A Python debugger."""
+ 
+diff -u Python-2.6.4/Lib/plat-mac/bundlebuilder.py.orig Python-2.6.4/Lib/plat-mac/bundlebuilder.py
+--- Python-2.6.4/Lib/plat-mac/bundlebuilder.py.orig	Mon Feb 21 10:46:38 2011
++++ Python-2.6.4/Lib/plat-mac/bundlebuilder.py	Mon Feb 21 10:46:38 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """\
+ bundlebuilder.py -- Tools to assemble MacOS X (application) bundles.
+diff -u Python-2.6.4/Lib/plat-mac/appletrunner.py.orig Python-2.6.4/Lib/plat-mac/appletrunner.py
+--- Python-2.6.4/Lib/plat-mac/appletrunner.py.orig	Mon Feb 21 10:46:38 2011
++++ Python-2.6.4/Lib/plat-mac/appletrunner.py	Mon Feb 21 10:46:38 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # This file is meant as an executable script for running applets.
+ # BuildApplet will use it as the main executable in the .app bundle if
+ # we are not running in a framework build.
+diff -u Python-2.6.4/Demo/scripts/primes.py.orig Python-2.6.4/Demo/scripts/primes.py
+--- Python-2.6.4/Demo/scripts/primes.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/primes.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Print prime numbers in a given range
+ 
+diff -u Python-2.6.4/Demo/scripts/mkrcs.py.orig Python-2.6.4/Demo/scripts/mkrcs.py
+--- Python-2.6.4/Demo/scripts/mkrcs.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/mkrcs.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # A rather specialized script to make sure that a symbolic link named
+ # RCS exists pointing to a real RCS directory in a parallel tree
+diff -u Python-2.6.4/Demo/scripts/queens.py.orig Python-2.6.4/Demo/scripts/queens.py
+--- Python-2.6.4/Demo/scripts/queens.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/queens.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """N queens problem.
+ 
+diff -u Python-2.6.4/Demo/scripts/pi.py.orig Python-2.6.4/Demo/scripts/pi.py
+--- Python-2.6.4/Demo/scripts/pi.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/pi.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Print digits of pi forever.
+ #
+diff -u Python-2.6.4/Demo/scripts/mboxconvert.py.orig Python-2.6.4/Demo/scripts/mboxconvert.py
+--- Python-2.6.4/Demo/scripts/mboxconvert.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/mboxconvert.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Convert  MH directories (1 message per file) or MMDF mailboxes (4x^A
+ # delimited) to unix mailbox (From ... delimited) on stdout.
+diff -u Python-2.6.4/Demo/scripts/eqfix.py.orig Python-2.6.4/Demo/scripts/eqfix.py
+--- Python-2.6.4/Demo/scripts/eqfix.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/eqfix.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Fix Python source files to use the new equality test operator, i.e.,
+ #       if x = y: ...
+diff -u Python-2.6.4/Demo/scripts/find-uname.py.orig Python-2.6.4/Demo/scripts/find-uname.py
+--- Python-2.6.4/Demo/scripts/find-uname.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/find-uname.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ For each argument on the command line, look for it in the set of all Unicode
+diff -u Python-2.6.4/Demo/scripts/pp.py.orig Python-2.6.4/Demo/scripts/pp.py
+--- Python-2.6.4/Demo/scripts/pp.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/pp.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Emulate some Perl command line options.
+ # Usage: pp [-a] [-c] [-d] [-e scriptline] [-F fieldsep] [-n] [-p] [file] ...
+diff -u Python-2.6.4/Demo/scripts/unbirthday.py.orig Python-2.6.4/Demo/scripts/unbirthday.py
+--- Python-2.6.4/Demo/scripts/unbirthday.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/unbirthday.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Calculate your unbirthday count (see Alice in Wonderland).
+ # This is defined as the number of days from your birth until today
+diff -u Python-2.6.4/Demo/scripts/update.py.orig Python-2.6.4/Demo/scripts/update.py
+--- Python-2.6.4/Demo/scripts/update.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/update.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Update a bunch of files according to a script.
+ # The input file contains lines of the form <filename>:<lineno>:<text>,
+diff -u Python-2.6.4/Demo/scripts/markov.py.orig Python-2.6.4/Demo/scripts/markov.py
+--- Python-2.6.4/Demo/scripts/markov.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/markov.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ class Markov:
+     def __init__(self, histsize, choice):
+diff -u Python-2.6.4/Demo/scripts/from.py.orig Python-2.6.4/Demo/scripts/from.py
+--- Python-2.6.4/Demo/scripts/from.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/from.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Print From and Subject of messages in $MAIL.
+ # Extension to multiple mailboxes and other bells & whistles are left
+diff -u Python-2.6.4/Demo/scripts/script.py.orig Python-2.6.4/Demo/scripts/script.py
+--- Python-2.6.4/Demo/scripts/script.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/script.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # script.py -- Make typescript of terminal session.
+ # Usage:
+ #       -a      Append to typescript.
+diff -u Python-2.6.4/Demo/scripts/lpwatch.py.orig Python-2.6.4/Demo/scripts/lpwatch.py
+--- Python-2.6.4/Demo/scripts/lpwatch.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/lpwatch.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Watch line printer queue(s).
+ # Intended for BSD 4.3 lpq.
+diff -u Python-2.6.4/Demo/scripts/fact.py.orig Python-2.6.4/Demo/scripts/fact.py
+--- Python-2.6.4/Demo/scripts/fact.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/fact.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Factorize numbers.
+ # The algorithm is not efficient, but easy to understand.
+diff -u Python-2.6.4/Demo/scripts/beer.py.orig Python-2.6.4/Demo/scripts/beer.py
+--- Python-2.6.4/Demo/scripts/beer.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/beer.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # By GvR, demystified after a version by Fredrik Lundh.
+ import sys
+ n = 100
+diff -u Python-2.6.4/Demo/scripts/newslist.py.orig Python-2.6.4/Demo/scripts/newslist.py
+--- Python-2.6.4/Demo/scripts/newslist.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/newslist.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ #######################################################################
+ # Newslist  $Revision: 66429 $
+ #
+diff -u Python-2.6.4/Demo/scripts/ftpstats.py.orig Python-2.6.4/Demo/scripts/ftpstats.py
+--- Python-2.6.4/Demo/scripts/ftpstats.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/ftpstats.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Extract statistics from ftp daemon log.
+ 
+diff -u Python-2.6.4/Demo/scripts/makedir.py.orig Python-2.6.4/Demo/scripts/makedir.py
+--- Python-2.6.4/Demo/scripts/makedir.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/scripts/makedir.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Like mkdir, but also make intermediate directories if necessary.
+ # It is not an error if the given directory already exists (as long
+diff -u Python-2.6.4/Demo/turtle/tdemo_clock.py.orig Python-2.6.4/Demo/turtle/tdemo_clock.py
+--- Python-2.6.4/Demo/turtle/tdemo_clock.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_clock.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ # -*- coding: cp1252 -*-
+ """       turtle-example-suite:
+ 
+diff -u Python-2.6.4/Demo/turtle/tdemo_planet_and_moon.py.orig Python-2.6.4/Demo/turtle/tdemo_planet_and_moon.py
+--- Python-2.6.4/Demo/turtle/tdemo_planet_and_moon.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_planet_and_moon.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+         tdemo_planets_and_moon.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_lindenmayer_indian.py.orig Python-2.6.4/Demo/turtle/tdemo_lindenmayer_indian.py
+--- Python-2.6.4/Demo/turtle/tdemo_lindenmayer_indian.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_lindenmayer_indian.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+         xtx_lindenmayer_indian.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_penrose.py.orig Python-2.6.4/Demo/turtle/tdemo_penrose.py
+--- Python-2.6.4/Demo/turtle/tdemo_penrose.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_penrose.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       xturtle-example-suite:
+ 
+           xtx_kites_and_darts.py
+diff -u Python-2.6.4/Demo/turtle/turtleDemo.py.orig Python-2.6.4/Demo/turtle/turtleDemo.py
+--- Python-2.6.4/Demo/turtle/turtleDemo.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/turtleDemo.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ import sys
+ import os
+ 
+diff -u Python-2.6.4/Demo/turtle/tdemo_yinyang.py.orig Python-2.6.4/Demo/turtle/tdemo_yinyang.py
+--- Python-2.6.4/Demo/turtle/tdemo_yinyang.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_yinyang.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+             tdemo_yinyang.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_tree.py.orig Python-2.6.4/Demo/turtle/tdemo_tree.py
+--- Python-2.6.4/Demo/turtle/tdemo_tree.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_tree.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """      turtle-example-suite:
+ 
+              tdemo_tree.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_fractalcurves.py.orig Python-2.6.4/Demo/turtle/tdemo_fractalcurves.py
+--- Python-2.6.4/Demo/turtle/tdemo_fractalcurves.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_fractalcurves.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """      turtle-example-suite:
+ 
+         tdemo_fractalCurves.py
+diff -u Python-2.6.4/Demo/turtle/turtledemo_two_canvases.py.orig Python-2.6.4/Demo/turtle/turtledemo_two_canvases.py
+--- Python-2.6.4/Demo/turtle/turtledemo_two_canvases.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/turtledemo_two_canvases.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ ## DEMONSTRATES USE OF 2 CANVASES, SO CANNOT BE RUN IN DEMOVIEWER!
+ """turtle example: Using TurtleScreen and RawTurtle
+ for drawing on two distinct canvases.
+diff -u Python-2.6.4/Demo/turtle/tdemo_minimal_hanoi.py.orig Python-2.6.4/Demo/turtle/tdemo_minimal_hanoi.py
+--- Python-2.6.4/Demo/turtle/tdemo_minimal_hanoi.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_minimal_hanoi.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+          tdemo_minimal_hanoi.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_peace.py.orig Python-2.6.4/Demo/turtle/tdemo_peace.py
+--- Python-2.6.4/Demo/turtle/tdemo_peace.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_peace.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+               tdemo_peace.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_bytedesign.py.orig Python-2.6.4/Demo/turtle/tdemo_bytedesign.py
+--- Python-2.6.4/Demo/turtle/tdemo_bytedesign.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_bytedesign.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """      turtle-example-suite:
+ 
+         tdemo_bytedesign.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_paint.py.orig Python-2.6.4/Demo/turtle/tdemo_paint.py
+--- Python-2.6.4/Demo/turtle/tdemo_paint.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_paint.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+             tdemo_paint.py
+diff -u Python-2.6.4/Demo/turtle/tdemo_I_dontlike_tiltdemo.py.orig Python-2.6.4/Demo/turtle/tdemo_I_dontlike_tiltdemo.py
+--- Python-2.6.4/Demo/turtle/tdemo_I_dontlike_tiltdemo.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/turtle/tdemo_I_dontlike_tiltdemo.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """       turtle-example-suite:
+ 
+      tdemo-I_dont_like_tiltdemo.py
+diff -u Python-2.6.4/Demo/cgi/cgi1.py.orig Python-2.6.4/Demo/cgi/cgi1.py
+--- Python-2.6.4/Demo/cgi/cgi1.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/cgi/cgi1.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python
++#!/usr/bin/python2.6
+ 
+ """CGI test 1 - check server setup."""
+ 
+diff -u Python-2.6.4/Demo/cgi/cgi3.py.orig Python-2.6.4/Demo/cgi/cgi3.py
+--- Python-2.6.4/Demo/cgi/cgi3.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/cgi/cgi3.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python
++#!/usr/bin/python2.6
+ 
+ """CGI test 3 (persistent data)."""
+ 
+diff -u Python-2.6.4/Demo/cgi/cgi2.py.orig Python-2.6.4/Demo/cgi/cgi2.py
+--- Python-2.6.4/Demo/cgi/cgi2.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/cgi/cgi2.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python
++#!/usr/bin/python2.6
+ 
+ """CGI test 2 - basic use of cgi module."""
+ 
+diff -u Python-2.6.4/Demo/comparisons/sortingtest.py.orig Python-2.6.4/Demo/comparisons/sortingtest.py
+--- Python-2.6.4/Demo/comparisons/sortingtest.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/comparisons/sortingtest.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # 2)  Sorting Test
+ #
+diff -u Python-2.6.4/Demo/comparisons/regextest.py.orig Python-2.6.4/Demo/comparisons/regextest.py
+--- Python-2.6.4/Demo/comparisons/regextest.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/comparisons/regextest.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # 1)  Regular Expressions Test
+ #
+diff -u Python-2.6.4/Demo/comparisons/systemtest.py.orig Python-2.6.4/Demo/comparisons/systemtest.py
+--- Python-2.6.4/Demo/comparisons/systemtest.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/comparisons/systemtest.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # 3)  System Test
+ #
+diff -u Python-2.6.4/Demo/pysvr/pysvr.py.orig Python-2.6.4/Demo/pysvr/pysvr.py
+--- Python-2.6.4/Demo/pysvr/pysvr.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/pysvr/pysvr.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """A multi-threaded telnet-like server that gives a Python prompt.
+ 
+diff -u Python-2.6.4/Demo/tkinter/guido/sortvisu.py.orig Python-2.6.4/Demo/tkinter/guido/sortvisu.py
+--- Python-2.6.4/Demo/tkinter/guido/sortvisu.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/sortvisu.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Sorting algorithms visualizer using Tkinter.
+ 
+diff -u Python-2.6.4/Demo/tkinter/guido/dialog.py.orig Python-2.6.4/Demo/tkinter/guido/dialog.py
+--- Python-2.6.4/Demo/tkinter/guido/dialog.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/dialog.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # A Python function that generates dialog boxes with a text message,
+ # optional bitmap, and any number of buttons.
+diff -u Python-2.6.4/Demo/tkinter/guido/electrons.py.orig Python-2.6.4/Demo/tkinter/guido/electrons.py
+--- Python-2.6.4/Demo/tkinter/guido/electrons.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/electrons.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Simulate "electrons" migrating across the screen.
+ # An optional bitmap file in can be in the background.
+diff -u Python-2.6.4/Demo/tkinter/guido/newmenubardemo.py.orig Python-2.6.4/Demo/tkinter/guido/newmenubardemo.py
+--- Python-2.6.4/Demo/tkinter/guido/newmenubardemo.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/newmenubardemo.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Play with the new Tk 8.0 toplevel menu option."""
+ 
+diff -u Python-2.6.4/Demo/tkinter/guido/canvasevents.py.orig Python-2.6.4/Demo/tkinter/guido/canvasevents.py
+--- Python-2.6.4/Demo/tkinter/guido/canvasevents.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/canvasevents.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ from Tkinter import *
+ from Canvas import Oval, Group, CanvasText
+diff -u Python-2.6.4/Demo/tkinter/guido/tkman.py.orig Python-2.6.4/Demo/tkinter/guido/tkman.py
+--- Python-2.6.4/Demo/tkinter/guido/tkman.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/tkman.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Tk man page browser -- currently only shows the Tcl/Tk man pages
+ 
+diff -u Python-2.6.4/Demo/tkinter/guido/solitaire.py.orig Python-2.6.4/Demo/tkinter/guido/solitaire.py
+--- Python-2.6.4/Demo/tkinter/guido/solitaire.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/solitaire.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Solitaire game, much like the one that comes with MS Windows.
+ 
+diff -u Python-2.6.4/Demo/tkinter/guido/kill.py.orig Python-2.6.4/Demo/tkinter/guido/kill.py
+--- Python-2.6.4/Demo/tkinter/guido/kill.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/kill.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # Tkinter interface to Linux `kill' command.
+ 
+ from Tkinter import *
+diff -u Python-2.6.4/Demo/tkinter/guido/MimeViewer.py.orig Python-2.6.4/Demo/tkinter/guido/MimeViewer.py
+--- Python-2.6.4/Demo/tkinter/guido/MimeViewer.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/MimeViewer.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # View a single MIME multipart message.
+ # Display each part as a box.
+diff -u Python-2.6.4/Demo/tkinter/guido/mbox.py.orig Python-2.6.4/Demo/tkinter/guido/mbox.py
+--- Python-2.6.4/Demo/tkinter/guido/mbox.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/mbox.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Scan MH folder, display results in window
+ 
+diff -u Python-2.6.4/Demo/tkinter/guido/rmt.py.orig Python-2.6.4/Demo/tkinter/guido/rmt.py
+--- Python-2.6.4/Demo/tkinter/guido/rmt.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/rmt.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # A Python program implementing rmt, an application for remotely
+ # controlling other Tk applications.
+diff -u Python-2.6.4/Demo/tkinter/guido/svkill.py.orig Python-2.6.4/Demo/tkinter/guido/svkill.py
+--- Python-2.6.4/Demo/tkinter/guido/svkill.py.orig	Mon Feb 21 10:46:39 2011
++++ Python-2.6.4/Demo/tkinter/guido/svkill.py	Mon Feb 21 10:46:39 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Tkinter interface to SYSV `ps' and `kill' commands.
+ 
+diff -u Python-2.6.4/Demo/pdist/rrcs.py.orig Python-2.6.4/Demo/pdist/rrcs.py
+--- Python-2.6.4/Demo/pdist/rrcs.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/pdist/rrcs.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ "Remote RCS -- command line interface"
+ 
+diff -u Python-2.6.4/Demo/pdist/rcvs.py.orig Python-2.6.4/Demo/pdist/rcvs.py
+--- Python-2.6.4/Demo/pdist/rcvs.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/pdist/rcvs.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Remote CVS -- command line interface"""
+ 
+diff -u Python-2.6.4/Demo/pdist/RCSProxy.py.orig Python-2.6.4/Demo/pdist/RCSProxy.py
+--- Python-2.6.4/Demo/pdist/RCSProxy.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/pdist/RCSProxy.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """RCS Proxy.
+ 
+diff -u Python-2.6.4/Demo/pdist/makechangelog.py.orig Python-2.6.4/Demo/pdist/makechangelog.py
+--- Python-2.6.4/Demo/pdist/makechangelog.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/pdist/makechangelog.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Turn a pile of RCS log output into ChangeLog file entries.
+ 
+diff -u Python-2.6.4/Demo/zlib/zlibdemo.py.orig Python-2.6.4/Demo/zlib/zlibdemo.py
+--- Python-2.6.4/Demo/zlib/zlibdemo.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/zlib/zlibdemo.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Takes an optional filename, defaulting to this file itself.
+ # Reads the file and compresses the content using level 1 and level 9
+diff -u Python-2.6.4/Demo/zlib/minigzip.py.orig Python-2.6.4/Demo/zlib/minigzip.py
+--- Python-2.6.4/Demo/zlib/minigzip.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/zlib/minigzip.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # Demo program for zlib; it compresses or decompresses files, but *doesn't*
+ # delete the original.  This doesn't support all of gzip's options.
+ #
+diff -u Python-2.6.4/Demo/curses/life.py.orig Python-2.6.4/Demo/curses/life.py
+--- Python-2.6.4/Demo/curses/life.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/curses/life.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # life.py -- A curses-based version of Conway's Game of Life.
+ # Contributed by AMK
+ #
+diff -u Python-2.6.4/Demo/curses/rain.py.orig Python-2.6.4/Demo/curses/rain.py
+--- Python-2.6.4/Demo/curses/rain.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/curses/rain.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # $Id: rain.py 46625 2006-06-03 23:02:15Z andrew.kuchling $
+ #
+diff -u Python-2.6.4/Demo/curses/repeat.py.orig Python-2.6.4/Demo/curses/repeat.py
+--- Python-2.6.4/Demo/curses/repeat.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/curses/repeat.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """repeat <shell-command>
+ 
+diff -u Python-2.6.4/Demo/curses/ncurses.py.orig Python-2.6.4/Demo/curses/ncurses.py
+--- Python-2.6.4/Demo/curses/ncurses.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/curses/ncurses.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # $Id: ncurses.py 66424 2008-09-13 01:22:08Z andrew.kuchling $
+ #
+diff -u Python-2.6.4/Demo/curses/tclock.py.orig Python-2.6.4/Demo/curses/tclock.py
+--- Python-2.6.4/Demo/curses/tclock.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/curses/tclock.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # $Id: tclock.py 46626 2006-06-03 23:07:21Z andrew.kuchling $
+ #
+diff -u Python-2.6.4/Demo/parser/test_parser.py.orig Python-2.6.4/Demo/parser/test_parser.py
+--- Python-2.6.4/Demo/parser/test_parser.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/parser/test_parser.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ #  (Force the script to use the latest build.)
+ #
+ #  test_parser.py
+diff -u Python-2.6.4/Demo/sockets/gopher.py.orig Python-2.6.4/Demo/sockets/gopher.py
+--- Python-2.6.4/Demo/sockets/gopher.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/gopher.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # A simple gopher client.
+ #
+diff -u Python-2.6.4/Demo/sockets/throughput.py.orig Python-2.6.4/Demo/sockets/throughput.py
+--- Python-2.6.4/Demo/sockets/throughput.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/throughput.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Test network throughput.
+ #
+diff -u Python-2.6.4/Demo/sockets/rpython.py.orig Python-2.6.4/Demo/sockets/rpython.py
+--- Python-2.6.4/Demo/sockets/rpython.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/rpython.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Remote python client.
+ # Execute Python commands remotely and send output back.
+diff -u Python-2.6.4/Demo/sockets/echosvr.py.orig Python-2.6.4/Demo/sockets/echosvr.py
+--- Python-2.6.4/Demo/sockets/echosvr.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/echosvr.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Python implementation of an 'echo' tcp server: echo all data it receives.
+ #
+diff -u Python-2.6.4/Demo/sockets/telnet.py.orig Python-2.6.4/Demo/sockets/telnet.py
+--- Python-2.6.4/Demo/sockets/telnet.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/telnet.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Minimal interface to the Internet telnet protocol.
+ #
+diff -u Python-2.6.4/Demo/sockets/finger.py.orig Python-2.6.4/Demo/sockets/finger.py
+--- Python-2.6.4/Demo/sockets/finger.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/finger.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Python interface to the Internet finger daemon.
+ #
+diff -u Python-2.6.4/Demo/sockets/udpecho.py.orig Python-2.6.4/Demo/sockets/udpecho.py
+--- Python-2.6.4/Demo/sockets/udpecho.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/udpecho.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Client and server for udp (datagram) echo.
+ #
+diff -u Python-2.6.4/Demo/sockets/rpythond.py.orig Python-2.6.4/Demo/sockets/rpythond.py
+--- Python-2.6.4/Demo/sockets/rpythond.py.orig	Mon Feb 21 10:46:40 2011
++++ Python-2.6.4/Demo/sockets/rpythond.py	Mon Feb 21 10:46:40 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Remote python server.
+ # Execute Python commands remotely and send output back.
+diff -u Python-2.6.4/Tools/ssl/get-remote-certificate.py.orig Python-2.6.4/Tools/ssl/get-remote-certificate.py
+--- Python-2.6.4/Tools/ssl/get-remote-certificate.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/ssl/get-remote-certificate.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # fetch the certificate that the server(s) are providing in PEM form
+ #
+diff -u Python-2.6.4/Tools/compiler/demo.py.orig Python-2.6.4/Tools/compiler/demo.py
+--- Python-2.6.4/Tools/compiler/demo.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/compiler/demo.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Print names of all methods defined in module
+ 
+diff -u Python-2.6.4/Tools/compiler/dumppyc.py.orig Python-2.6.4/Tools/compiler/dumppyc.py
+--- Python-2.6.4/Tools/compiler/dumppyc.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/compiler/dumppyc.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import marshal
+ import dis
+diff -u Python-2.6.4/Tools/webchecker/wsgui.py.orig Python-2.6.4/Tools/webchecker/wsgui.py
+--- Python-2.6.4/Tools/webchecker/wsgui.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/webchecker/wsgui.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Tkinter-based GUI for websucker.
+ 
+diff -u Python-2.6.4/Tools/webchecker/webchecker.py.orig Python-2.6.4/Tools/webchecker/webchecker.py
+--- Python-2.6.4/Tools/webchecker/webchecker.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/webchecker/webchecker.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Original code by Guido van Rossum; extensive changes by Sam Bayer,
+ # including code to check URL fragments.
+diff -u Python-2.6.4/Tools/webchecker/websucker.py.orig Python-2.6.4/Tools/webchecker/websucker.py
+--- Python-2.6.4/Tools/webchecker/websucker.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/webchecker/websucker.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """A variant on webchecker that creates a mirror copy of a remote site."""
+ 
+diff -u Python-2.6.4/Tools/webchecker/wcgui.py.orig Python-2.6.4/Tools/webchecker/wcgui.py
+--- Python-2.6.4/Tools/webchecker/wcgui.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/webchecker/wcgui.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """GUI interface to webchecker.
+ 
+diff -u Python-2.6.4/Tools/faqwiz/faqw.py.orig Python-2.6.4/Tools/faqwiz/faqw.py
+--- Python-2.6.4/Tools/faqwiz/faqw.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/faqwiz/faqw.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/local/bin/python
++#!/usr/bin/python2.6
+ 
+ """FAQ wizard bootstrap."""
+ 
+diff -u Python-2.6.4/Tools/unicode/comparecodecs.py.orig Python-2.6.4/Tools/unicode/comparecodecs.py
+--- Python-2.6.4/Tools/unicode/comparecodecs.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/unicode/comparecodecs.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """ Compare the output of two codecs.
+ 
+diff -u Python-2.6.4/Tools/i18n/msgfmt.py.orig Python-2.6.4/Tools/i18n/msgfmt.py
+--- Python-2.6.4/Tools/i18n/msgfmt.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/i18n/msgfmt.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: iso-8859-1 -*-
+ # Written by Martin v. Löwis <[email protected]>
+ 
+diff -u Python-2.6.4/Tools/i18n/makelocalealias.py.orig Python-2.6.4/Tools/i18n/makelocalealias.py
+--- Python-2.6.4/Tools/i18n/makelocalealias.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/i18n/makelocalealias.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ """
+     Convert the X11 locale.alias file into a mapping dictionary suitable
+     for locale.py.
+diff -u Python-2.6.4/Tools/i18n/pygettext.py.orig Python-2.6.4/Tools/i18n/pygettext.py
+--- Python-2.6.4/Tools/i18n/pygettext.py.orig	Mon Feb 21 10:46:41 2011
++++ Python-2.6.4/Tools/i18n/pygettext.py	Mon Feb 21 10:46:41 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: iso-8859-1 -*-
+ # Originally written by Barry Warsaw <[email protected]>
+ #
+diff -u Python-2.6.4/Tools/freeze/freeze.py.orig Python-2.6.4/Tools/freeze/freeze.py
+--- Python-2.6.4/Tools/freeze/freeze.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/freeze/freeze.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Freeze a Python script into a binary.
+ 
+diff -u Python-2.6.4/Tools/modulator/Tkextra.py.orig Python-2.6.4/Tools/modulator/Tkextra.py
+--- Python-2.6.4/Tools/modulator/Tkextra.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/modulator/Tkextra.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # A Python function that generates dialog boxes with a text message,
+ # optional bitmap, and any number of buttons.
+diff -u Python-2.6.4/Tools/modulator/modulator.py.orig Python-2.6.4/Tools/modulator/modulator.py
+--- Python-2.6.4/Tools/modulator/modulator.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/modulator/modulator.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ #
+ # Modulator - Generate skeleton modules.
+ #
+diff -u Python-2.6.4/Tools/pybench/pybench.py.orig Python-2.6.4/Tools/pybench/pybench.py
+--- Python-2.6.4/Tools/pybench/pybench.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/pybench/pybench.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python -O
++#!/usr/bin/python2.6
+ 
+ """ A Python Benchmark Suite
+ 
+diff -u Python-2.6.4/Tools/pybench/Setup.py.orig Python-2.6.4/Tools/pybench/Setup.py
+--- Python-2.6.4/Tools/pybench/Setup.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/pybench/Setup.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!python
++#!/usr/bin/python2.6
+ 
+ # Setup file for pybench
+ #
+diff -u Python-2.6.4/Tools/pybench/clockres.py.orig Python-2.6.4/Tools/pybench/clockres.py
+--- Python-2.6.4/Tools/pybench/clockres.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/pybench/clockres.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """ clockres - calculates the resolution in seconds of a given timer.
+ 
+diff -u Python-2.6.4/Tools/pybench/systimes.py.orig Python-2.6.4/Tools/pybench/systimes.py
+--- Python-2.6.4/Tools/pybench/systimes.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/pybench/systimes.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """ systimes() user and system timer implementations for use by
+     pybench.
+diff -u Python-2.6.4/Tools/scripts/fixheader.py.orig Python-2.6.4/Tools/scripts/fixheader.py
+--- Python-2.6.4/Tools/scripts/fixheader.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/fixheader.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Add some standard cpp magic to a header file
+ 
+diff -u Python-2.6.4/Tools/scripts/fixdiv.py.orig Python-2.6.4/Tools/scripts/fixdiv.py
+--- Python-2.6.4/Tools/scripts/fixdiv.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/fixdiv.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """fixdiv - tool to fix division operators.
+ 
+diff -u Python-2.6.4/Tools/scripts/which.py.orig Python-2.6.4/Tools/scripts/which.py
+--- Python-2.6.4/Tools/scripts/which.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/which.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Variant of "which".
+ # On stderr, near and total misses are reported.
+diff -u Python-2.6.4/Tools/scripts/suff.py.orig Python-2.6.4/Tools/scripts/suff.py
+--- Python-2.6.4/Tools/scripts/suff.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/suff.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # suff
+ #
+diff -u Python-2.6.4/Tools/scripts/pysource.py.orig Python-2.6.4/Tools/scripts/pysource.py
+--- Python-2.6.4/Tools/scripts/pysource.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/pysource.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """\
+ List python source files.
+diff -u Python-2.6.4/Tools/scripts/lll.py.orig Python-2.6.4/Tools/scripts/lll.py
+--- Python-2.6.4/Tools/scripts/lll.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/lll.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Find symbolic links and show where they point to.
+ # Arguments are directories to search; default is current directory.
+diff -u Python-2.6.4/Tools/scripts/pickle2db.py.orig Python-2.6.4/Tools/scripts/pickle2db.py
+--- Python-2.6.4/Tools/scripts/pickle2db.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/pickle2db.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ Synopsis: %(prog)s [-h|-b|-g|-r|-a|-d] [ picklefile ] dbfile
+diff -u Python-2.6.4/Tools/scripts/texi2html.py.orig Python-2.6.4/Tools/scripts/texi2html.py
+--- Python-2.6.4/Tools/scripts/texi2html.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/texi2html.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Convert GNU texinfo files into HTML, one file per node.
+ # Based on Texinfo 2.14.
+diff -u Python-2.6.4/Tools/scripts/mkreal.py.orig Python-2.6.4/Tools/scripts/mkreal.py
+--- Python-2.6.4/Tools/scripts/mkreal.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/mkreal.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # mkreal
+ #
+diff -u Python-2.6.4/Tools/scripts/ftpmirror.py.orig Python-2.6.4/Tools/scripts/ftpmirror.py
+--- Python-2.6.4/Tools/scripts/ftpmirror.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/ftpmirror.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Mirror a remote ftp subtree into a local directory tree.
+ 
+diff -u Python-2.6.4/Tools/scripts/lfcr.py.orig Python-2.6.4/Tools/scripts/lfcr.py
+--- Python-2.6.4/Tools/scripts/lfcr.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/lfcr.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ "Replace LF with CRLF in argument files.  Print names of changed files."
+ 
+diff -u Python-2.6.4/Tools/scripts/ptags.py.orig Python-2.6.4/Tools/scripts/ptags.py
+--- Python-2.6.4/Tools/scripts/ptags.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/ptags.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # ptags
+ #
+diff -u Python-2.6.4/Tools/scripts/copytime.py.orig Python-2.6.4/Tools/scripts/copytime.py
+--- Python-2.6.4/Tools/scripts/copytime.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/copytime.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Copy one file's atime and mtime to another
+ 
+diff -u Python-2.6.4/Tools/scripts/finddiv.py.orig Python-2.6.4/Tools/scripts/finddiv.py
+--- Python-2.6.4/Tools/scripts/finddiv.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/finddiv.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """finddiv - a grep-like tool that looks for division operators.
+ 
+diff -u Python-2.6.4/Tools/scripts/combinerefs.py.orig Python-2.6.4/Tools/scripts/combinerefs.py
+--- Python-2.6.4/Tools/scripts/combinerefs.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/combinerefs.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ combinerefs path
+diff -u Python-2.6.4/Tools/scripts/cvsfiles.py.orig Python-2.6.4/Tools/scripts/cvsfiles.py
+--- Python-2.6.4/Tools/scripts/cvsfiles.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/cvsfiles.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Print a list of files that are mentioned in CVS directories.
+ 
+diff -u Python-2.6.4/Tools/scripts/reindent.py.orig Python-2.6.4/Tools/scripts/reindent.py
+--- Python-2.6.4/Tools/scripts/reindent.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/reindent.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Released to the public domain, by Tim Peters, 03 October 2000.
+ 
+diff -u Python-2.6.4/Tools/scripts/checkpyc.py.orig Python-2.6.4/Tools/scripts/checkpyc.py
+--- Python-2.6.4/Tools/scripts/checkpyc.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/checkpyc.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # Check that all ".pyc" files exist and are up-to-date
+ # Uses module 'os'
+ 
+diff -u Python-2.6.4/Tools/scripts/fixps.py.orig Python-2.6.4/Tools/scripts/fixps.py
+--- Python-2.6.4/Tools/scripts/fixps.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/fixps.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Fix Python script(s) to reference the interpreter via /usr/bin/env python.
+ # Warning: this overwrites the file without making a backup.
+diff -u Python-2.6.4/Tools/scripts/crlf.py.orig Python-2.6.4/Tools/scripts/crlf.py
+--- Python-2.6.4/Tools/scripts/crlf.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/crlf.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ "Replace CRLF with LF in argument files.  Print names of changed files."
+ 
+ import sys, os
+diff -u Python-2.6.4/Tools/scripts/methfix.py.orig Python-2.6.4/Tools/scripts/methfix.py
+--- Python-2.6.4/Tools/scripts/methfix.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/methfix.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Fix Python source files to avoid using
+ #       def method(self, (arg1, ..., argn)):
+diff -u Python-2.6.4/Tools/scripts/classfix.py.orig Python-2.6.4/Tools/scripts/classfix.py
+--- Python-2.6.4/Tools/scripts/classfix.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/classfix.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # This script is obsolete -- it is kept for historical purposes only.
+ #
+diff -u Python-2.6.4/Tools/scripts/xxci.py.orig Python-2.6.4/Tools/scripts/xxci.py
+--- Python-2.6.4/Tools/scripts/xxci.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/xxci.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # xxci
+ #
+diff -u Python-2.6.4/Tools/scripts/findnocoding.py.orig Python-2.6.4/Tools/scripts/findnocoding.py
+--- Python-2.6.4/Tools/scripts/findnocoding.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/findnocoding.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """List all those Python files that require a coding directive
+ 
+diff -u Python-2.6.4/Tools/scripts/fixnotice.py.orig Python-2.6.4/Tools/scripts/fixnotice.py
+--- Python-2.6.4/Tools/scripts/fixnotice.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/fixnotice.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """(Ostensibly) fix copyright notices in files.
+ 
+diff -u Python-2.6.4/Tools/scripts/eptags.py.orig Python-2.6.4/Tools/scripts/eptags.py
+--- Python-2.6.4/Tools/scripts/eptags.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/eptags.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Create a TAGS file for Python programs, usable with GNU Emacs.
+ 
+ usage: eptags pyfiles...
+diff -u Python-2.6.4/Tools/scripts/linktree.py.orig Python-2.6.4/Tools/scripts/linktree.py
+--- Python-2.6.4/Tools/scripts/linktree.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/linktree.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # linktree
+ #
+diff -u Python-2.6.4/Tools/scripts/checkappend.py.orig Python-2.6.4/Tools/scripts/checkappend.py
+--- Python-2.6.4/Tools/scripts/checkappend.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/checkappend.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Released to the public domain, by Tim Peters, 28 February 2000.
+ 
+diff -u Python-2.6.4/Tools/scripts/pindent.py.orig Python-2.6.4/Tools/scripts/pindent.py
+--- Python-2.6.4/Tools/scripts/pindent.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/pindent.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # This file contains a class and a main program that perform three
+ # related (though complimentary) formatting operations on Python
+diff -u Python-2.6.4/Tools/scripts/google.py.orig Python-2.6.4/Tools/scripts/google.py
+--- Python-2.6.4/Tools/scripts/google.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/google.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ import sys, webbrowser
+ 
+diff -u Python-2.6.4/Tools/scripts/nm2def.py.orig Python-2.6.4/Tools/scripts/nm2def.py
+--- Python-2.6.4/Tools/scripts/nm2def.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/nm2def.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """nm2def.py
+ 
+ Helpers to extract symbols from Unix libs and auto-generate
+diff -u Python-2.6.4/Tools/scripts/md5sum.py.orig Python-2.6.4/Tools/scripts/md5sum.py
+--- Python-2.6.4/Tools/scripts/md5sum.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/md5sum.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Python utility to print MD5 checksums of argument files.
+ """
+diff -u Python-2.6.4/Tools/scripts/logmerge.py.orig Python-2.6.4/Tools/scripts/logmerge.py
+--- Python-2.6.4/Tools/scripts/logmerge.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/logmerge.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Consolidate a bunch of CVS or RCS logs read from stdin.
+ 
+diff -u Python-2.6.4/Tools/scripts/svneol.py.orig Python-2.6.4/Tools/scripts/svneol.py
+--- Python-2.6.4/Tools/scripts/svneol.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/svneol.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ SVN helper script.
+diff -u Python-2.6.4/Tools/scripts/rgrep.py.orig Python-2.6.4/Tools/scripts/rgrep.py
+--- Python-2.6.4/Tools/scripts/rgrep.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/rgrep.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Reverse grep.
+ 
+diff -u Python-2.6.4/Tools/scripts/h2py.py.orig Python-2.6.4/Tools/scripts/h2py.py
+--- Python-2.6.4/Tools/scripts/h2py.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/h2py.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Read #define's and translate to Python code.
+ # Handle #include statements.
+diff -u Python-2.6.4/Tools/scripts/pathfix.py.orig Python-2.6.4/Tools/scripts/pathfix.py
+--- Python-2.6.4/Tools/scripts/pathfix.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/pathfix.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Change the #! line occurring in Python scripts.  The new interpreter
+ # pathname must be given with a -i option.
+diff -u Python-2.6.4/Tools/scripts/byext.py.orig Python-2.6.4/Tools/scripts/byext.py
+--- Python-2.6.4/Tools/scripts/byext.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/byext.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Show file statistics by extension."""
+ 
+diff -u Python-2.6.4/Tools/scripts/ifdef.py.orig Python-2.6.4/Tools/scripts/ifdef.py
+--- Python-2.6.4/Tools/scripts/ifdef.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/ifdef.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Selectively preprocess #ifdef / #ifndef statements.
+ # Usage:
+diff -u Python-2.6.4/Tools/scripts/treesync.py.orig Python-2.6.4/Tools/scripts/treesync.py
+--- Python-2.6.4/Tools/scripts/treesync.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/treesync.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Script to synchronize two source trees.
+ 
+diff -u Python-2.6.4/Tools/scripts/ndiff.py.orig Python-2.6.4/Tools/scripts/ndiff.py
+--- Python-2.6.4/Tools/scripts/ndiff.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/ndiff.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Module ndiff version 1.7.0
+ # Released to the public domain 08-Dec-2000,
+diff -u Python-2.6.4/Tools/scripts/findlinksto.py.orig Python-2.6.4/Tools/scripts/findlinksto.py
+--- Python-2.6.4/Tools/scripts/findlinksto.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/findlinksto.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # findlinksto
+ #
+diff -u Python-2.6.4/Tools/scripts/objgraph.py.orig Python-2.6.4/Tools/scripts/objgraph.py
+--- Python-2.6.4/Tools/scripts/objgraph.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/objgraph.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # objgraph
+ #
+diff -u Python-2.6.4/Tools/scripts/untabify.py.orig Python-2.6.4/Tools/scripts/untabify.py
+--- Python-2.6.4/Tools/scripts/untabify.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/untabify.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ "Replace tabs with spaces in argument files.  Print names of changed files."
+ 
+diff -u Python-2.6.4/Tools/scripts/db2pickle.py.orig Python-2.6.4/Tools/scripts/db2pickle.py
+--- Python-2.6.4/Tools/scripts/db2pickle.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/db2pickle.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """
+ Synopsis: %(prog)s [-h|-g|-b|-r|-a] dbfile [ picklefile ]
+diff -u Python-2.6.4/Tools/scripts/parseentities.py.orig Python-2.6.4/Tools/scripts/parseentities.py
+--- Python-2.6.4/Tools/scripts/parseentities.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/parseentities.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python
++#!/usr/bin/python2.6
+ """ Utility for parsing HTML entity definitions available from:
+ 
+       http://www.w3.org/ as e.g.
+diff -u Python-2.6.4/Tools/scripts/dutree.py.orig Python-2.6.4/Tools/scripts/dutree.py
+--- Python-2.6.4/Tools/scripts/dutree.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/dutree.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ # Format du output in a tree shape
+ 
+ import os, sys, errno
+diff -u Python-2.6.4/Tools/scripts/pdeps.py.orig Python-2.6.4/Tools/scripts/pdeps.py
+--- Python-2.6.4/Tools/scripts/pdeps.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/pdeps.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # pdeps
+ #
+diff -u Python-2.6.4/Tools/scripts/cleanfuture.py.orig Python-2.6.4/Tools/scripts/cleanfuture.py
+--- Python-2.6.4/Tools/scripts/cleanfuture.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/cleanfuture.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """cleanfuture [-d][-r][-v] path ...
+ 
+diff -u Python-2.6.4/Tools/scripts/hotshotmain.py.orig Python-2.6.4/Tools/scripts/hotshotmain.py
+--- Python-2.6.4/Tools/scripts/hotshotmain.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/hotshotmain.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: iso-8859-1 -*-
+ 
+ """
+diff -u Python-2.6.4/Tools/scripts/byteyears.py.orig Python-2.6.4/Tools/scripts/byteyears.py
+--- Python-2.6.4/Tools/scripts/byteyears.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/byteyears.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Print the product of age and size of each file, in suitable units.
+ #
+diff -u Python-2.6.4/Tools/scripts/gprof2html.py.orig Python-2.6.4/Tools/scripts/gprof2html.py
+--- Python-2.6.4/Tools/scripts/gprof2html.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/gprof2html.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python2.3
++#!/usr/bin/python2.6
+ 
+ """Transform gprof(1) output into useful HTML."""
+ 
+diff -u Python-2.6.4/Tools/scripts/fixcid.py.orig Python-2.6.4/Tools/scripts/fixcid.py
+--- Python-2.6.4/Tools/scripts/fixcid.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/fixcid.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Perform massive identifier substitution on C source files.
+ # This actually tokenizes the files (to some extent) so it can
+diff -u Python-2.6.4/Tools/scripts/reindent-rst.py.orig Python-2.6.4/Tools/scripts/reindent-rst.py
+--- Python-2.6.4/Tools/scripts/reindent-rst.py.orig	Mon Feb 21 10:46:42 2011
++++ Python-2.6.4/Tools/scripts/reindent-rst.py	Mon Feb 21 10:46:42 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ # Make a reST file compliant to our pre-commit hook.
+ # Currently just remove trailing whitespace.
+diff -u Python-2.6.4/Mac/BuildScript/build-installer.py.orig Python-2.6.4/Mac/BuildScript/build-installer.py
+--- Python-2.6.4/Mac/BuildScript/build-installer.py.orig	Mon Feb 21 10:46:43 2011
++++ Python-2.6.4/Mac/BuildScript/build-installer.py	Mon Feb 21 10:46:43 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """
+ This script is used to build the "official unofficial" universal build on
+ Mac OS X. It requires Mac OS X 10.4, Xcode 2.2 and the 10.4u SDK to do its
+diff -u Python-2.6.4/Mac/scripts/zappycfiles.py.orig Python-2.6.4/Mac/scripts/zappycfiles.py
+--- Python-2.6.4/Mac/scripts/zappycfiles.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Mac/scripts/zappycfiles.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/python
++#!/usr/bin/python2.6
+ """Recursively zap all .pyc and .pyo files"""
+ import os
+ import sys
+diff -u Python-2.6.4/Mac/scripts/buildpkg.py.orig Python-2.6.4/Mac/scripts/buildpkg.py
+--- Python-2.6.4/Mac/scripts/buildpkg.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Mac/scripts/buildpkg.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """buildpkg.py -- Build OS X packages for Apple's Installer.app.
+ 
+diff -u Python-2.6.4/Mac/Tools/fixapplepython23.py.orig Python-2.6.4/Mac/Tools/fixapplepython23.py
+--- Python-2.6.4/Mac/Tools/fixapplepython23.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Mac/Tools/fixapplepython23.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python2.6
+ """fixapplepython23 - Fix Apple-installed Python 2.3 (on Mac OS X 10.3)
+ 
+ Python 2.3 (and 2.3.X for X<5) have the problem that building an extension
+diff -u Python-2.6.4/Misc/find_recursionlimit.py.orig Python-2.6.4/Misc/find_recursionlimit.py
+--- Python-2.6.4/Misc/find_recursionlimit.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Misc/find_recursionlimit.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Find the maximum recursion limit that prevents interpreter termination.
+ 
+ This script finds the maximum safe recursion limit on a particular
+diff -u Python-2.6.4/Parser/asdl_c.py.orig Python-2.6.4/Parser/asdl_c.py
+--- Python-2.6.4/Parser/asdl_c.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Parser/asdl_c.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python2.6
+ """Generate C code from an ASDL description."""
+ 
+ # TO DO
+diff -u Python-2.6.4/Doc/includes/email-alternative.py.orig Python-2.6.4/Doc/includes/email-alternative.py
+--- Python-2.6.4/Doc/includes/email-alternative.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Doc/includes/email-alternative.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#! /usr/bin/python
++#!/usr/bin/python2.6
+ 
+ import smtplib
+ 
+diff -u Python-2.6.4/Doc/includes/email-unpack.py.orig Python-2.6.4/Doc/includes/email-unpack.py
+--- Python-2.6.4/Doc/includes/email-unpack.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Doc/includes/email-unpack.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Unpack a MIME message into a directory of files."""
+ 
+diff -u Python-2.6.4/Doc/includes/email-dir.py.orig Python-2.6.4/Doc/includes/email-dir.py
+--- Python-2.6.4/Doc/includes/email-dir.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Doc/includes/email-dir.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ 
+ """Send the contents of a directory as a MIME message."""
+ 
+diff -u Python-2.6.4/Doc/tools/rstlint.py.orig Python-2.6.4/Doc/tools/rstlint.py
+--- Python-2.6.4/Doc/tools/rstlint.py.orig	Mon Feb 21 10:46:44 2011
++++ Python-2.6.4/Doc/tools/rstlint.py	Mon Feb 21 10:46:44 2011
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python2.6
+ # -*- coding: utf-8 -*-
+ 
+ # Check for stylistic and formal issues in .rst and .py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-01-solaris-lib-dirs.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,190 @@
+diff --git Python-2.6.4/Modules/_multiprocessing/multiprocessing.h Python-2.6.4/Modules/_multiprocessing/multiprocessing.h
+--- Python-2.6.4/Modules/_multiprocessing/multiprocessing.h
++++ Python-2.6.4/Modules/_multiprocessing/multiprocessing.h
+@@ -3,6 +3,10 @@
+ 
+ #define PY_SSIZE_T_CLEAN
+ 
++/* needed on Solaris for the definition of CMSG_SPACE and friends */
++#define _XOPEN_SOURCE
++#define _XOPEN_SOURCE_EXTENDED 1
++
+ #include "Python.h"
+ #include "structmember.h"
+ #include "pythread.h"
+diff --git Python-2.6.4/setup.py Python-2.6.4/setup.py
+new file mode 100644
+--- Python-2.6.4/setup.py
++++ Python-2.6.4/setup.py
+@@ -309,10 +309,10 @@
+         return sys.platform
+ 
+     def detect_modules(self):
+-        # Ensure that /usr/local is always used
+-        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+-        add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+-
++        if sys.platform != 'sunos5':
++            # Ensure that /usr/local is always used
++            add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
++            add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
+         # Add paths specified in the environment variables LDFLAGS and
+         # CPPFLAGS for header and library files.
+         # We must get the values from the Makefile and not the environment
+@@ -610,11 +610,22 @@
+         exts.append( Extension('_csv', ['_csv.c']) )
+ 
+         # socket(2)
++        socket_libs = []
++        if self.compiler.find_library_file(lib_dirs,
++                                           'socket'):
++            socket_libs.append('socket')
++        if self.compiler.find_library_file(lib_dirs,
++                                           'nsl'):
++            socket_libs.append('nsl')
++        if self.compiler.find_library_file(lib_dirs,
++                                           'resolv'):
++            socket_libs.append('resolv')
+         exts.append( Extension('_socket', ['socketmodule.c'],
+-                               depends = ['socketmodule.h']) )
++                               depends = ['socketmodule.h'],
++                               libraries = socket_libs) )
+         # Detect SSL support for the socket module (via _ssl)
+         search_for_ssl_incs_in = [
+-                              '/usr/local/ssl/include',
++                              '/usr/sfw/include',
+                               '/usr/contrib/ssl/include/'
+                              ]
+         ssl_incs = find_file('openssl/ssl.h', inc_dirs,
+@@ -625,8 +636,12 @@
+                                ['/usr/kerberos/include'])
+             if krb5_h:
+                 ssl_incs += krb5_h
++        if sys.maxint == 2147483647L:
++            sfw_libdir = '/usr/sfw/lib';
++        else:
++            sfw_libdir = '/usr/sfw/lib/64';
+         ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
+-                                     ['/usr/local/ssl/lib',
++                                     [sfw_libdir,
+                                       '/usr/contrib/ssl/lib/'
+                                      ] )
+ 
+@@ -635,6 +650,7 @@
+             exts.append( Extension('_ssl', ['_ssl.c'],
+                                    include_dirs = ssl_incs,
+                                    library_dirs = ssl_libs,
++				   runtime_library_dirs = ssl_libs,
+                                    libraries = ['ssl', 'crypto'],
+                                    depends = ['socketmodule.h']), )
+         else:
+@@ -1079,6 +1095,14 @@
+ 
+         # Curses support, requiring the System V version of curses, often
+         # provided by the ncurses library.
++        curses_lib_dirs = []
++        curses_inc_dirs = []
++        if platform == 'sunos5':
++            # look for ncurses in /usr/gnu on Solaris
++            curses_inc_dirs.append('/usr/include/ncurses')
++            curses_lib_dirs.append('/usr/gnu/lib')
++            curses_lib_dirs.append('/usr/gnu/lib/amd64')
++            curses_lib_dirs.append('/usr/gnu/lib/sparcv9')
+         panel_library = 'panel'
+         if (self.compiler.find_library_file(lib_dirs, 'ncursesw')):
+             curses_libs = ['ncursesw']
+@@ -1087,10 +1111,13 @@
+             panel_library = 'panelw'
+             exts.append( Extension('_curses', ['_cursesmodule.c'],
+                                    libraries = curses_libs) )
+-        elif (self.compiler.find_library_file(lib_dirs, 'ncurses')):
++        elif (self.compiler.find_library_file(lib_dirs + curses_lib_dirs, 'ncurses')):
+             curses_libs = ['ncurses']
+             exts.append( Extension('_curses', ['_cursesmodule.c'],
+-                                   libraries = curses_libs) )
++                                   libraries = curses_libs,
++                                   library_dirs = curses_lib_dirs,
++                                   runtime_library_dirs = curses_lib_dirs,
++                                   include_dirs = curses_inc_dirs ) )
+         elif (self.compiler.find_library_file(lib_dirs, 'curses')
+               and platform != 'darwin'):
+                 # OSX has an old Berkeley curses, not good enough for
+@@ -1109,9 +1136,12 @@
+ 
+         # If the curses module is enabled, check for the panel module
+         if (module_enabled(exts, '_curses') and
+-            self.compiler.find_library_file(lib_dirs, panel_library)):
++            self.compiler.find_library_file(lib_dirs + curses_lib_dirs, panel_library)):
+             exts.append( Extension('_curses_panel', ['_curses_panel.c'],
+-                                   libraries = [panel_library] + curses_libs) )
++                                   libraries = [panel_library] + curses_libs,
++                                   include_dirs = curses_inc_dirs,
++                                   library_dirs = curses_lib_dirs,
++                                   runtime_library_dirs = curses_lib_dirs ) )
+         else:
+             missing.append('_curses_panel')
+ 
+@@ -1324,8 +1354,13 @@
+             if macros.get('HAVE_SEM_OPEN', False):
+                 multiprocessing_srcs.append('_multiprocessing/semaphore.c')
+ 
++        multiproc_libs = []
++        if platform == 'sunos5':
++            multiproc_libs = [ "xnet" ]
++
+         exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
+                                  define_macros=macros.items(),
++                                 libraries=multiproc_libs,
+                                  include_dirs=["Modules/_multiprocessing"]))
+         # End multiprocessing
+ 
+@@ -1549,15 +1584,26 @@
+         # Assume we haven't found any of the libraries or include files
+         # The versions with dots are used on Unix, and the versions without
+         # dots on Windows, for detection by cygwin.
++        added_lib_dirs = []
++        tcl_tk_lib_dirs = ['/usr/sfw/lib']
++        tcl_tk_inc_dirs = ['/usr/sfw/include']
+         tcllib = tklib = tcl_includes = tk_includes = None
+         for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
+                         '82', '8.1', '81', '8.0', '80']:
+-            tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version)
+-            tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version)
++            tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version, tcl_tk_lib_dirs)
++            tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version, tcl_tk_lib_dirs)
+             if tklib and tcllib:
+                 # Exit the loop when we've found the Tcl/Tk libraries
+                 break
+ 
++            tklib = self.compiler.find_library_file(tcl_tk_lib_dirs, 'tk' + version)
++            tcllib = self.compiler.find_library_file(tcl_tk_lib_dirs, 'tcl' + version)
++            if tklib and tcllib:
++                # found the libs in a non-standard dir
++                added_lib_dirs.append(os.path.dirname(tcllib))
++                # Exit the loop when we've found the Tcl/Tk libraries
++                break
++
+         # Now check for the header files
+         if tklib and tcllib:
+             # Check for the include files on Debian and {Free,Open}BSD, where
+@@ -1572,6 +1618,7 @@
+             for dir in inc_dirs:
+                 tcl_include_sub += [dir + os.sep + "tcl" + dotversion]
+                 tk_include_sub += [dir + os.sep + "tk" + dotversion]
++            tcl_include_sub += tcl_tk_inc_dirs
+             tk_include_sub += tcl_include_sub
+             tcl_includes = find_file('tcl.h', inc_dirs, tcl_include_sub)
+             tk_includes = find_file('tk.h', inc_dirs, tk_include_sub)
+@@ -1636,6 +1683,7 @@
+                         include_dirs = include_dirs,
+                         libraries = libs,
+                         library_dirs = added_lib_dirs,
++                        runtime_library_dirs = added_lib_dirs
+                         )
+         self.extensions.append(ext)
+ 
+diff --git Python-2.6.4/Lib/site-packages/vendor-packages.pth Python2.6.4/Lib/site-packages/vendor-packages.pth
+--- /dev/null	Sat Feb 12 00:21:26 2011
++++ Python-2.6.4/Lib/site-packages/vendor-packages.pth	Sat Feb 12 00:47:05 2011
+@@ -0,0 +1,1 @@
++import site; site.addsitedir('/usr/lib/python2.6/vendor-packages')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-02-pycc.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,199 @@
+diff --git Python-2.6.4/Makefile.pre.in Python-2.6.4/Makefile.pre.in
+--- Python-2.6.4/Makefile.pre.in.orig	Sun Feb 13 21:00:17 2011
++++ Python-2.6.4/Makefile.pre.in	Sun Feb 13 21:02:35 2011
+@@ -663,6 +663,8 @@
+ 
+ $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
+ 
++install-pycc:	$(srcdir)/pycc
++	$(INSTALL_SCRIPT) $< $(DESTDIR)$(BINLIBDEST)
+ 
+ ######################################################################
+ 
+@@ -728,7 +728,7 @@
+                $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
+ 
+ # Install everything
+-install:	@FRAMEWORKINSTALLFIRST@ altinstall bininstall maninstall @FRAMEWORKINSTALLLAST@
++install:	@FRAMEWORKINSTALLFIRST@ altinstall bininstall maninstall @FRAMEWORKINSTALLLAST@ install-pycc
+ 
+ # Install almost everything without disturbing previous versions
+ altinstall:	@FRAMEWORKALTINSTALLFIRST@ altbininstall libinstall inclinstall libainstall \
+
+diff --git Python-2.6.4/pycc Python-2.6.4/pycc
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/pycc
+@@ -0,0 +1,172 @@
++#!/bin/ksh
++#
++# Script for running the C/C++ compiler when building python modules
++#
++# CDDL HEADER START
++#
++# The contents of this file are subject to the terms of the
++# Common Development and Distribution License, Version 1.0 only
++# (the "License").  You may not use this file except in compliance
++# with the License.
++#
++# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++# or http://www.opensolaris.org/os/licensing.
++# See the License for the specific language governing permissions
++# and limitations under the License.
++#
++# When distributing Covered Code, include this CDDL HEADER in each
++# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++# If applicable, add the following below this CDDL HEADER, with the
++# fields enclosed by brackets "[]" replaced with your own identifying
++# information: Portions Copyright [yyyy] [name of copyright owner]
++#
++# CDDL HEADER END
++#
++#
++# Copyright 2004-2005 Sun Microsystems, Inc.  All rights reserved.
++# Use is subject to license terms.
++#
++
++MYNAME=`basename $0`
++
++# name of the compiler executable
++CCEXE='cc'
++# name of the GNU compiler executable
++GCCEXE='gcc'
++# name of the programming language
++CLANG='C'
++# name of the env variable for setting the compiler path
++CVAR='CC'
++
++if [ "x$PYCC_CC" != x ]; then
++    CC="$PYCC_CC"
++fi
++
++if [ "x$MYNAME" = xpyCC ]; then
++    CCEXE='CC'
++    GCCEXE='g++'
++    CLANG='C++'
++    CC="$CXX"
++    CVAR='CXX'
++    if [ "x$PYCC_CXX" != x ]; then
++        CC="$PYCC_CXX"
++    fi
++fi
++
++SAVED_IFS="$IFS"
++IFS=:
++
++# check if the CC env variable is set
++if [ "x$CC" != x ]; then
++    # verify that it doesn't point to this script
++    if /usr/bin/cmp -s "$CC" $0; then
++        echo "WARNING: "$CVAR" is set to this script; ignoring this value to avoid an infinite loop"
++	CC=
++    fi
++fi
++
++# check again if the CC env variable is set
++if [ "x$CC" != x ]; then
++    case "$CC" in
++	/* )
++	    # $CC is an absolute path name
++            # check if $CC exists
++	    if [ ! -e "$CC" ]; then
++		echo "WARNING: pycc: $CC not found" 1>&2
++		CC=
++	    else
++        # check if $CC is an executable
++		if [ ! -x "$CC" -o ! -f "$CC" ]; then
++		    echo "WARNING: pycc: $CC is not an executable" 1>&2
++		    CC=
++		fi
++	    fi
++	    ;;
++	* )
++	    # try to find $CC in the PATH
++	    NEW_CC=
++	    for dir in $PATH; do
++		if [ -x "$dir/$CC" ]; then
++		    NEW_CC="$dir/$CC"
++		    break
++		fi
++	    done
++	    if [ "x$NEW_CC" = x ]; then
++		echo "WARNING: pycc: $CC not found" 1>&2
++		CC=
++	    else
++		CC="$NEW_CC"
++	    fi
++	    ;;
++    esac
++fi
++
++if [ "x$CC" = x ]; then
++    # Look for the Sun Studio compiler in the PATH
++    for dir in $PATH; do
++	if [ -x "$dir/$CCEXE" ]; then
++	    CC="$dir/$CCEXE"
++	    break
++	fi
++    done
++fi
++
++if [ "x$CC" = x ]; then
++    # Look for gcc in the PATH
++    for dir in $PATH; do
++	if [ -x "$dir/$GCCEXE" ]; then
++	    CC="$dir/$GCCEXE"
++	    break
++	fi
++    done
++fi
++
++if [ "x$CC" = x ]; then
++    # Check for Sun Studio in /opt/SUNWspro (default install location)
++    if [ -x /opt/SUNWspro/bin/$CCEXE ]; then
++	CC=/opt/SUNWspro/bin/$CCEXE
++    fi
++fi
++
++if [ "x$CC" = x ]; then
++    # Check for the GNU compiler in /usr/sfw/bin
++    if [ -x /usr/sfw/bin/$GCCEXE ]; then
++	CC=/usr/sfw/bin/$GCCEXE
++    fi
++fi
++
++if [ "x$CC" = x ]; then
++    # Cannot continue without a C compiler
++    echo "ERROR: no $CLANG compiler not found; update your PATH or set the $CVAR env variable" 1>&2
++    exit 1
++fi
++
++IFS="$SAVED_IFS"
++
++# We need to make some modifications to adapt correctly to compiler options
++# that differ between GCC and Studio.
++
++extra_flags=
++
++is_gcc=no
++
++$CC --version >/dev/null 2>&1 && is_gcc=yes
++
++if [ "$is_gcc" = yes ]; then
++	for flag in "${@}"; do
++		# need -shared to link shared objects properly
++		if [ "$flag" = "-G" ]; then
++			extra_flags="$extra_flags -shared"
++		fi
++		# workaround for 6223255
++		if [ "$flag" = "-m64" ]; then
++			extra_flags="$extra_flags -R/usr/sfw/lib/amd64"
++		fi
++	done
++	# force PIC compilation
++	extra_flags="$extra_flags -fPIC -DPIC"
++else
++	extra_flags="$extra_flags -KPIC"
++fi
++
++exec "$CC" $extra_flags "${@}"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-03-distutils-pycc.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,24 @@
+diff --git Python-2.6.4/Lib/distutils/sysconfig.py Python-2.6.4/Lib/distutils/sysconfig.py
+--- Python-2.6.4/Lib/distutils/sysconfig.py
++++ Python-2.6.4/Lib/distutils/sysconfig.py
+@@ -166,16 +166,10 @@
+             get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
+                             'CCSHARED', 'LDSHARED', 'SO')
+ 
+-        if 'CC' in os.environ:
+-            cc = os.environ['CC']
+-        if 'CXX' in os.environ:
+-            cxx = os.environ['CXX']
+-        if 'LDSHARED' in os.environ:
+-            ldshared = os.environ['LDSHARED']
+-        if 'CPP' in os.environ:
+-            cpp = os.environ['CPP']
+-        else:
+-            cpp = cc + " -E"           # not always
++        # On Solaris, we must always use pycc/pyCC, which will then look up
++        # $CC and $CXX
++        cpp = cc + " -E"
++
+         if 'LDFLAGS' in os.environ:
+             ldshared = ldshared + ' ' + os.environ['LDFLAGS']
+         if 'CFLAGS' in os.environ:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-04-distutils-log.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,30 @@
+diff --git Python-2.6.4/Lib/distutils/spawn.py Python-2.6.4/Lib/distutils/spawn.py
+--- Python-2.6.4/Lib/distutils/spawn.py
++++ Python-2.6.4/Lib/distutils/spawn.py
+@@ -73,7 +73,7 @@
+     if search_path:
+         # either we find one or it stays the same
+         executable = find_executable(executable) or executable
+-    log.info(string.join([executable] + cmd[1:], ' '))
++    log.info("%s", string.join([executable] + cmd[1:], ' '))
+     if not dry_run:
+         # spawn for NT requires a full path to the .exe
+         try:
+@@ -98,7 +98,7 @@
+     if search_path:
+         # either we find one or it stays the same
+         executable = find_executable(executable) or executable
+-    log.info(string.join([executable] + cmd[1:], ' '))
++    log.info("%s", string.join([executable] + cmd[1:], ' '))
+     if not dry_run:
+         # spawnv for OS/2 EMX requires a full path to the .exe
+         try:
+@@ -119,7 +119,7 @@
+                   verbose=0,
+                   dry_run=0):
+ 
+-    log.info(string.join(cmd, ' '))
++    log.info("%s", string.join(cmd, ' '))
+     if dry_run:
+         return
+     exec_fn = search_path and os.execvp or os.execv
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-05-isalibs.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,452 @@
+diff --git Python-2.6.4/Lib/distutils/command/build_ext.py Python-2.6.4/Lib/distutils/command/build_ext.py
+--- Python-2.6.4/Lib/distutils/command/build_ext.py
++++ Python-2.6.4/Lib/distutils/command/build_ext.py
+@@ -636,6 +636,8 @@
+         modpath = fullname.split('.')
+         filename = self.get_ext_filename(ext_name)
+         filename = os.path.split(filename)[-1]
++        if sys.maxint != 2147483647L:
++            filename = os.path.join("64", filename)
+ 
+         if not self.inplace:
+             # no further work needed
+@@ -677,7 +679,13 @@
+         so_ext = get_config_var('SO')
+         if os.name == 'nt' and self.debug:
+             return apply(os.path.join, ext_path) + '_d' + so_ext
+-        return os.path.join(*ext_path) + so_ext
++        # .so extensions are word-size specific
++        path = apply(os.path.join, ext_path)
++        if sys.maxint == 2147483647L:
++            return path + so_ext
++        dirname = os.path.dirname(path);
++        basename = os.path.basename(path);
++        return os.path.join(dirname, "64", basename + so_ext)
+ 
+     def get_export_symbols (self, ext):
+         """Return the list of symbols that a shared extension has to
+diff --git Python-2.6.4/Makefile.pre.in Python-2.6.4/Makefile.pre.in
+--- Python-2.6.4/Makefile.pre.in
++++ Python-2.6.4/Makefile.pre.in
+@@ -87,18 +87,18 @@
+ 
+ # Expanded directories
+ BINDIR=		$(exec_prefix)/bin
+-LIBDIR=		$(exec_prefix)/lib
++LIBDIR=		@libdir@
+ MANDIR=		@mandir@
+ INCLUDEDIR=	@includedir@
+ CONFINCLUDEDIR=	$(exec_prefix)/include
+ SCRIPTDIR=	$(prefix)/lib
+ 
+ # Detailed destination directories
+-BINLIBDEST=	$(LIBDIR)/python$(VERSION)
+-LIBDEST=	$(SCRIPTDIR)/python$(VERSION)
+-INCLUDEPY=	$(INCLUDEDIR)/python$(VERSION)
+-CONFINCLUDEPY=	$(CONFINCLUDEDIR)/python$(VERSION)
+-LIBP=		$(LIBDIR)/python$(VERSION)
++BINLIBDEST=		$(exec_prefix)/lib/python$(VERSION)
++LIBDEST=		$(SCRIPTDIR)/python$(VERSION)
++INCLUDEPY=		$(INCLUDEDIR)/python$(VERSION)
++CONFINCLUDEPY=		$(CONFINCLUDEDIR)/python$(VERSION)
++LIBP=			$(exec_prefix)/lib/python$(VERSION)
+ 
+ # Symbols used for using shared libraries
+ SO=		@SO@
+diff --git Python-2.6.4/Python/import.c Python-2.6.4/Python/import.c
+--- Python-2.6.4/Python/import.c
++++ Python-2.6.4/Python/import.c
+@@ -1191,6 +1191,57 @@
+ static int find_init_module(char *); /* Forward */
+ static struct filedescr importhookdescr = {"", "", IMP_HOOK};
+ 
++#ifdef HAVE_STAT
++static char *
++insert_64dir(char *buf, size_t buflen)
++{
++	char *base;
++	char *cp;
++	size_t blen;
++
++	if ((blen = strlen(buf)) == 0)
++		return (NULL);
++
++	cp = &buf[blen - 1];
++	while (cp != buf && *cp != SEP)
++		cp--;
++
++	if (cp != buf)
++		cp++;
++
++	if (blen + strlen("64/") + 1 >= buflen)
++		return NULL;
++
++	base = strdup(cp);
++	sprintf(cp, "64%c%s", SEP, base);
++	free(base);
++
++	return buf;
++}
++
++/*
++ * If we're on a 64-bit platform, modify lookups for shared object files.
++ */
++static size_t modify_path(struct filedescr *fdp, char *buf, size_t buflen)
++{
++	struct stat statbuf;
++
++	if (sizeof(void *) != 8)
++		return 0;
++
++	if (stat(buf, &statbuf) == 0 && S_ISDIR(statbuf.st_mode))
++		return 0;
++
++	if (fdp->type != C_EXTENSION)
++		return 0;
++
++	if (insert_64dir(buf, buflen) == NULL)
++		return 0;
++
++	return strlen("64/");
++}
++#endif
++
+ static struct filedescr *
+ find_module(char *fullname, char *subname, PyObject *path, char *buf,
+ 	    size_t buflen, FILE **p_fp, PyObject **p_loader)
+@@ -1208,11 +1259,10 @@
+ 	static struct filedescr fd_builtin = {"", "", C_BUILTIN};
+ 	static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
+ 	char name[MAXPATHLEN+1];
+-#if defined(PYOS_OS2)
+ 	size_t saved_len;
+ 	size_t saved_namelen;
+ 	char *saved_buf = NULL;
+-#endif
++
+ 	if (p_loader != NULL)
+ 		*p_loader = NULL;
+ 
+@@ -1431,15 +1481,19 @@
+ 		}
+ #endif
+ #endif
+-#if defined(PYOS_OS2)
++
+ 		/* take a snapshot of the module spec for restoration
+ 		 * after the 8 character DLL hackery
+ 		 */
+ 		saved_buf = strdup(buf);
+ 		saved_len = len;
+ 		saved_namelen = namelen;
+-#endif /* PYOS_OS2 */
++
+ 		for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
++#ifdef HAVE_STAT
++                        len += modify_path(fdp, buf, buflen);
++#endif
++
+ #if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
+ 			/* OS/2 limits DLLs to 8 character names (w/o
+ 			   extension)
+@@ -1480,21 +1534,18 @@
+ 					fp = NULL;
+ 				}
+ 			}
+-#if defined(PYOS_OS2)
++
+ 			/* restore the saved snapshot */
+ 			strcpy(buf, saved_buf);
+ 			len = saved_len;
+ 			namelen = saved_namelen;
+-#endif
+ 		}
+-#if defined(PYOS_OS2)
+ 		/* don't need/want the module name snapshot anymore */
+ 		if (saved_buf)
+ 		{
+ 			free(saved_buf);
+ 			saved_buf = NULL;
+ 		}
+-#endif
+ 		Py_XDECREF(copy);
+ 		if (fp != NULL)
+ 			break;
+diff --git Python-2.6.4/Python/importdl.h Python-2.6.4/Python/importdl.h
+--- Python-2.6.4/Python/importdl.h
++++ Python-2.6.4/Python/importdl.h
+@@ -31,8 +31,9 @@
+ extern PyObject *_PyImport_LoadDynamicModule(char *name, char *pathname,
+ 					     FILE *);
+ 
+-/* Max length of module suffix searched for -- accommodates "module.slb" */
+-#define MAXSUFFIXSIZE 12
++/* Max length of module suffix searched for -- accommodates "module.slb"
++   and "64/" */
++#define MAXSUFFIXSIZE 15
+ 
+ #ifdef MS_WINDOWS
+ #include <windows.h>
+diff --git Python-2.6.4/configure.in Python-2.6.4/configure.in
+--- Python-2.6.4/configure.in
++++ Python-2.6.4/configure.in
+@@ -17,8 +17,44 @@
+ AH_TOP([
+ #ifndef Py_PYCONFIG_H
+ #define Py_PYCONFIG_H
++
+ ])
+ AH_BOTTOM([
++
++#include <sys/isa_defs.h>
++
++/*
++ * Python originally defined these statically, which prevents a 32-64 python
++ * from working at all.
++ */
++
++#define SIZEOF_SHORT 2
++#define SIZEOF_INT 4
++#define SIZEOF_LONG_LONG 8
++#define SIZEOF_FPOS_T 8
++#define SIZEOF_OFF_T 8
++#define SIZEOF_PTHREAD_T 4
++
++#ifdef _LP64
++#define SIZEOF_LONG 8
++#define SIZEOF_UINTPTR_T 8
++#define SIZEOF_VOID_P 8
++#define SIZEOF_TIME_T 8
++#define SIZEOF_SIZE_T 8
++#define SIZEOF_LONG_DOUBLE 16
++#else
++#define SIZEOF_LONG 4
++#define SIZEOF_UINTPTR_T 4
++#define SIZEOF_VOID_P 4
++#define SIZEOF_TIME_T 4
++#define SIZEOF_SIZE_T 4
++#if defined(__i386)
++#define SIZEOF_LONG_DOUBLE 12
++#else
++#define SIZEOF_LONG_DOUBLE 16
++#endif
++#endif
++
+ /* Define the macros needed if on a UnixWare 7.x system. */
+ #if defined(__USLC__) && defined(__SCO_VERSION__)
+ #define STRICT_SYSV_CURSES /* Don't use ncurses extensions */
+@@ -65,6 +101,26 @@
+ 
+ define_xopen_source=yes
+ 
++# AC_CHECK_SIZEOF without the AC_DEFINE_UNQUOTED
++AC_DEFUN([PY_CHECK_SIZEOF],
++[AS_LITERAL_IF([$1], [],
++               [AC_FATAL([$0: requires literal arguments])])dnl
++AC_CHECK_TYPE([$1], [], [], [$3])
++AC_CACHE_CHECK([size of $1], AS_TR_SH([ac_cv_sizeof_$1]),
++[if test "$AS_TR_SH([ac_cv_type_$1])" = yes; then
++  # The cast to unsigned long works around a bug in the HP C Compiler
++  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++  # This bug is HP SR number 8606223364.
++  _AC_COMPUTE_INT([(long) (sizeof ($1))],
++                  [AS_TR_SH([ac_cv_sizeof_$1])],
++                  [AC_INCLUDES_DEFAULT([$3])],
++                  [AC_MSG_FAILURE([cannot compute sizeof ($1), 77])])
++else
++  AS_TR_SH([ac_cv_sizeof_$1])=0
++fi])dnl
++])# PY_CHECK_SIZEOF
++
+ # Arguments passed to configure.
+ AC_SUBST(CONFIG_ARGS)
+ CONFIG_ARGS="$ac_configure_args"
+@@ -1377,14 +1433,10 @@
+ 
+ # Sizes of various common basic types
+ # ANSI C requires sizeof(char) == 1, so no need to check it
+-AC_CHECK_SIZEOF(int, 4)
+-AC_CHECK_SIZEOF(long, 4)
+-AC_CHECK_SIZEOF(void *, 4)
+ AC_CHECK_SIZEOF(short, 2)
+ AC_CHECK_SIZEOF(float, 4)
+ AC_CHECK_SIZEOF(double, 8)
+-AC_CHECK_SIZEOF(fpos_t, 4)
+-AC_CHECK_SIZEOF(size_t, 4)
++AC_CHECK_SIZEOF(short)
+ AC_CHECK_SIZEOF(pid_t, 4)
+ 
+ AC_MSG_CHECKING(for long long support)
+@@ -1394,9 +1446,6 @@
+   have_long_long=yes
+ ])
+ AC_MSG_RESULT($have_long_long)
+-if test "$have_long_long" = yes ; then
+-AC_CHECK_SIZEOF(long long, 8)
+-fi
+ 
+ AC_MSG_CHECKING(for long double support)
+ have_long_double=no
+@@ -1404,10 +1453,6 @@
+   AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define this if you have the type long double.])
+   have_long_double=yes
+ ])
+-AC_MSG_RESULT($have_long_double)
+-if test "$have_long_double" = yes ; then
+-AC_CHECK_SIZEOF(long double, 12)
+-fi
+ 
+ AC_MSG_CHECKING(for _Bool support)
+ have_c99_bool=no
+@@ -1421,102 +1466,26 @@
+ fi
+ 
+ AC_CHECK_TYPES(uintptr_t, 
+-   [AC_CHECK_SIZEOF(uintptr_t, 4)], 
++   [], 
+    [], [#ifdef HAVE_STDINT_H
+         #include <stdint.h>
+         #endif])
+ 
+ 
+-# Hmph. AC_CHECK_SIZEOF() doesn't include <sys/types.h>.
+-AC_MSG_CHECKING(size of off_t)
+-AC_CACHE_VAL(ac_cv_sizeof_off_t,
+-[AC_TRY_RUN([#include <stdio.h>
++PY_CHECK_SIZEOF(off_t,4,[
++#include <stdio.h>
++#include <stdlib.h>
+ #include <sys/types.h>
+-main()
+-{
+-  FILE *f=fopen("conftestval", "w");
+-  if (!f) exit(1);
+-  fprintf(f, "%d\n", sizeof(off_t));
+-  exit(0);
+-}],
+-ac_cv_sizeof_off_t=`cat conftestval`,
+-ac_cv_sizeof_off_t=0,
+-ac_cv_sizeof_off_t=4)
+ ])
+-AC_MSG_RESULT($ac_cv_sizeof_off_t)
+-AC_DEFINE_UNQUOTED(SIZEOF_OFF_T, $ac_cv_sizeof_off_t,
+-[The number of bytes in an off_t.])
+ 
+ AC_MSG_CHECKING(whether to enable large file support)
+-if test "$have_long_long" = yes -a \
+-	"$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \
+-	"$ac_cv_sizeof_long_long" -ge "$ac_cv_sizeof_off_t"; then
+-  AC_DEFINE(HAVE_LARGEFILE_SUPPORT, 1, 
+-  [Defined to enable large file support when an off_t is bigger than a long
+-   and long long is available and at least as big as an off_t. You may need
+-   to add some flags for configuration and compilation to enable this mode.
+-   (For Solaris and Linux, the necessary defines are already defined.)])
+-  AC_MSG_RESULT(yes)
+-else
+-  AC_MSG_RESULT(no)
+-fi
+ 
+-# AC_CHECK_SIZEOF() doesn't include <time.h>.
+-AC_MSG_CHECKING(size of time_t)
+-AC_CACHE_VAL(ac_cv_sizeof_time_t,
+-[AC_TRY_RUN([#include <stdio.h>
+-#include <time.h>
+-main()
+-{
+-  FILE *f=fopen("conftestval", "w");
+-  if (!f) exit(1);
+-  fprintf(f, "%d\n", sizeof(time_t));
+-  exit(0);
+-}],
+-ac_cv_sizeof_time_t=`cat conftestval`,
+-ac_cv_sizeof_time_t=0,
+-ac_cv_sizeof_time_t=4)
+-])
+-AC_MSG_RESULT($ac_cv_sizeof_time_t)
+-AC_DEFINE_UNQUOTED(SIZEOF_TIME_T, $ac_cv_sizeof_time_t, 
+-[The number of bytes in a time_t.])
+-
+-
+-# if have pthread_t then define SIZEOF_PTHREAD_T
+-ac_save_cc="$CC"
+-if test "$ac_cv_kpthread" = "yes"
+-then CC="$CC -Kpthread"
+-elif test "$ac_cv_kthread" = "yes"
+-then CC="$CC -Kthread"
+-elif test "$ac_cv_pthread" = "yes"
+-then CC="$CC -pthread"
+-fi
+-AC_MSG_CHECKING(for pthread_t)
+-have_pthread_t=no
+-AC_TRY_COMPILE([#include <pthread.h>], [pthread_t x; x = *(pthread_t*)0;], have_pthread_t=yes)
+-AC_MSG_RESULT($have_pthread_t)
+-if test "$have_pthread_t" = yes ; then
+-  # AC_CHECK_SIZEOF() doesn't include <pthread.h>.
+-  AC_MSG_CHECKING(size of pthread_t)
+-  AC_CACHE_VAL(ac_cv_sizeof_pthread_t,
+-  [AC_TRY_RUN([#include <stdio.h>
+-#include <pthread.h>
+-  main()
+-  {
+-    FILE *f=fopen("conftestval", "w");
+-    if (!f) exit(1);
+-    fprintf(f, "%d\n", sizeof(pthread_t));
+-    exit(0);
+-  }],
+-  ac_cv_sizeof_pthread_t=`cat conftestval`,
+-  ac_cv_sizeof_pthread_t=0,
+-  ac_cv_sizeof_pthread_t=4)
+-  ])
+-  AC_MSG_RESULT($ac_cv_sizeof_pthread_t)
+-  AC_DEFINE_UNQUOTED(SIZEOF_PTHREAD_T, $ac_cv_sizeof_pthread_t,
+-   [The number of bytes in a pthread_t.])
+-fi
+-CC="$ac_save_cc"
++AC_DEFINE(HAVE_LARGEFILE_SUPPORT, 1,
++[Defined to enable large file support when an off_t is bigger than a long
++ and long long is available and at least as big as an off_t. You may need
++ to add some flags for configuration and compilation to enable this mode.
++ (For Solaris and Linux, the necessary defines are already defined.)])
++AC_MSG_RESULT(yes)
+ 
+ AC_MSG_CHECKING(for --enable-toolbox-glue)
+ AC_ARG_ENABLE(toolbox-glue,
+@@ -1810,12 +1779,6 @@
+ if test -z "$CCSHARED"
+ then
+ 	case $ac_sys_system/$ac_sys_release in
+-	SunOS*) if test "$GCC" = yes;
+-		then CCSHARED="-fPIC";
+-		elif test `uname -p` = sparc;
+-		then CCSHARED="-xcode=pic32";
+-		else CCSHARED="-Kpic";
+-		fi;;
+ 	hp*|HP*) if test "$GCC" = yes;
+ 		 then CCSHARED="-fPIC";
+ 		 else CCSHARED="+z";
+@@ -3308,12 +3271,6 @@
+ wchar_h="no"
+ )
+ 
+-# determine wchar_t size
+-if test "$wchar_h" = yes
+-then
+-  AC_CHECK_SIZEOF(wchar_t, 4, [#include <wchar.h>])
+-fi
+-
+ AC_MSG_CHECKING(for UCS-4 tcl)
+ have_ucs4_tcl=no
+ AC_TRY_COMPILE([
+@@ -3344,6 +3301,11 @@
+   ac_cv_wchar_t_signed=no,
+   ac_cv_wchar_t_signed=yes)])
+   AC_MSG_RESULT($ac_cv_wchar_t_signed)
++ 
++  PY_CHECK_SIZEOF(wchar_t, 4, [
++  #include <wchar.h>
++  #include <stdlib.h
++  ])
+ fi
+   
+ AC_MSG_CHECKING(what type to use for unicode)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-06-write_compiled_module-atomic.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,84 @@
+diff --git Python-2.6.4/Python/import.c Python-2.6.4/Python/import.c
+--- Python-2.6.4/Python/import.c
++++ Python-2.6.4/Python/import.c
+@@ -866,8 +866,9 @@
+ 
+ /* Write a compiled module to a file, placing the time of last
+    modification of its source into the header.
+-   Errors are ignored, if a write error occurs an attempt is made to
+-   remove the file. */
++   Write to a temporary file first so that creating the file is atomic.
++   Errors are ignored, if a write/unlink/rename error occurs an attempt
++   is made to remove the temporary file. */
+ 
+ static void
+ write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
+@@ -879,12 +880,21 @@
+ #else
+ 	mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
+ #endif 
++	char *tmppathname;
++ 
++	/* the temporary file is called cpathname + ".tmp" */
++	if ((tmppathname = PyMem_Malloc(strlen(cpathname) + strlen(".tmp") + 1))
++		== NULL) {
++		return;
++	}
++	sprintf (tmppathname, "%s.tmp", cpathname);
++	fp = open_exclusive(tmppathname, mode);
+ 
+-	fp = open_exclusive(cpathname, mode);
+ 	if (fp == NULL) {
+ 		if (Py_VerboseFlag)
+ 			PySys_WriteStderr(
+-				"# can't create %s\n", cpathname);
++				"# can't create %s\n", tmppathname);
++		PyMem_Free(tmppathname);
+ 		return;
+ 	}
+ 	PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
+@@ -893,10 +903,11 @@
+ 	PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
+ 	if (fflush(fp) != 0 || ferror(fp)) {
+ 		if (Py_VerboseFlag)
+-			PySys_WriteStderr("# can't write %s\n", cpathname);
++			PySys_WriteStderr("# can't write %s\n", tmppathname);
+ 		/* Don't keep partial file */
+ 		fclose(fp);
+-		(void) unlink(cpathname);
++		(void) unlink(tmppathname);
++		PyMem_Free(tmppathname);
+ 		return;
+ 	}
+ 	/* Now write the true mtime */
+@@ -905,8 +916,30 @@
+ 	PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
+ 	fflush(fp);
+ 	fclose(fp);
++	/* Delete the old compiled file, if exists */
++	if (unlink (cpathname)) {
++		if ((errno != ENOENT)) {
++			/* the file exists but could not be deleted */
++			if (Py_VerboseFlag)
++				PySys_WriteStderr(
++					"# can't unlink %s\n", cpathname);
++			(void) unlink(tmppathname);
++			PyMem_Free(tmppathname);
++			return;
++		}
++	}
++	/* rename the tmp file to the real file name */
++	if (rename (tmppathname, cpathname)) {
++		if (Py_VerboseFlag)
++			PySys_WriteStderr(
++				"# can't rename %s to %s\n", tmppathname, cpathname);
++		(void) unlink(tmppathname);
++		PyMem_Free(tmppathname);
++		return;
++	}
+ 	if (Py_VerboseFlag)
+ 		PySys_WriteStderr("# wrote %s\n", cpathname);
++	PyMem_Free(tmppathname);
+ }
+ 
+ static void
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-07-dtrace.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,417 @@
+diff --git Python-2.6.4/Include/frameobject.h Python-2.6.4/Include/frameobject.h
+--- Python-2.6.4/Include/frameobject.h
++++ Python-2.6.4/Include/frameobject.h
+@@ -41,6 +41,7 @@
+     /* As of 2.3 f_lineno is only valid when tracing is active (i.e. when
+        f_trace is set) -- at other times use PyCode_Addr2Line instead. */
+     int f_lineno;		/* Current line number */
++    int f_calllineno;		/* line number of call site */
+     int f_iblock;		/* index in f_blockstack */
+     PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
+     PyObject *f_localsplus[1];	/* locals+stack, dynamically sized */
+diff --git Python-2.6.4/Makefile.pre.in Python-2.6.4/Makefile.pre.in
+--- Python-2.6.4/Makefile.pre.in
++++ Python-2.6.4/Makefile.pre.in
+@@ -201,6 +201,7 @@
+ GRAMMAR_C=	$(srcdir)/Python/graminit.c
+ GRAMMAR_INPUT=	$(srcdir)/Grammar/Grammar
+ 
++DTRACE_OBJS=Python/dtrace.o Python/phelper.o
+ 
+ ##########################################################################
+ # Parser
+@@ -290,6 +291,7 @@
+ 		Python/formatter_unicode.o \
+ 		Python/formatter_string.o \
+ 		Python/$(DYNLOADFILE) \
++		$(DTRACE_OBJS) \
+ 		$(LIBOBJS) \
+ 		$(MACHDEP_OBJS) \
+ 		$(THREADOBJ)
+@@ -577,6 +579,18 @@
+ Python/formatter_string.o: $(srcdir)/Python/formatter_string.c \
+ 				$(STRINGLIB_HEADERS)
+ 
++Python/phelper.o: $(srcdir)/Python/phelper.d
++	dtrace -o $@ -DPHELPER $(DFLAGS) $(CPPFLAGS) -C -G -s $(srcdir)/Python/phelper.d
++
++Python/python.h: $(srcdir)/Python/python.d
++	dtrace -o $@ $(DFLAGS) -C -h -s $(srcdir)/Python/python.d
++
++Python/ceval.o: Python/ceval.c Python/python.h
++	$(CC) -c $(BASECFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE -o $@ $<
++
++Python/dtrace.o: $(srcdir)/Python/python.d Python/ceval.o
++	dtrace -o $@ $(DFLAGS) -C -G -s $(srcdir)/Python/python.d Python/ceval.o
++
+ ############################################################################
+ # Header files
+ 
+diff --git Python-2.6.4/Objects/frameobject.c Python-2.6.4/Objects/frameobject.c
+--- Python-2.6.4/Objects/frameobject.c
++++ Python-2.6.4/Objects/frameobject.c
+@@ -698,6 +698,7 @@
+ 	f->f_tstate = tstate;
+ 
+ 	f->f_lasti = -1;
++ 	f->f_calllineno = code->co_firstlineno;
+ 	f->f_lineno = code->co_firstlineno;
+ 	f->f_iblock = 0;
+ 
+diff --git Python-2.6.4/Python/ceval.c Python-2.6.4/Python/ceval.c
+--- Python-2.6.4/Python/ceval.c
++++ Python-2.6.4/Python/ceval.c
+@@ -19,6 +19,11 @@
+ 
+ #include <ctype.h>
+ 
++#define HAVE_DTRACE
++#ifdef HAVE_DTRACE
++#include "python.h"
++#endif
++
+ #ifndef WITH_TSC
+ 
+ #define READ_TIMESTAMP(var)
+@@ -527,6 +532,55 @@
+ 			  NULL);
+ }
+ 
++#ifdef HAVE_DTRACE
++static void
++dtrace_entry(PyFrameObject *f)
++{
++	const char *filename;
++	const char *fname;
++	int lineno;
++	
++	filename = PyString_AsString(f->f_code->co_filename);
++	fname = PyString_AsString(f->f_code->co_name);
++	lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
++
++	PYTHON_FUNCTION_ENTRY((char *)filename, (char *)fname, lineno);
++
++	/*
++	 * Currently a USDT tail-call will not receive the correct arguments.
++	 * Disable the tail call here.
++	 */
++#if defined(__sparc)
++	asm("nop");
++#endif
++}
++
++static void
++dtrace_return(PyFrameObject *f)
++{
++	const char *filename;
++	const char *fname;
++	int lineno;
++	
++	filename = PyString_AsString(f->f_code->co_filename);
++	fname = PyString_AsString(f->f_code->co_name);
++	lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
++	PYTHON_FUNCTION_RETURN((char *)filename, (char *)fname, lineno);
++
++	/*
++	 * Currently a USDT tail-call will not receive the correct arguments.
++	 * Disable the tail call here.
++	 */
++#if defined(__sparc)
++	asm("nop");
++#endif
++}
++#else
++#define	PYTHON_FUNCTION_ENTRY_ENABLED 0
++#define	PYTHON_FUNCTION_RETURN_ENABLED 0
++#define	dtrace_entry()
++#define	dtrace_return()
++#endif
+ 
+ /* Interpreter main loop */
+ 
+@@ -538,9 +592,84 @@
+ 	return PyEval_EvalFrameEx(f, 0);
+ }
+ 
++/*
++ * These shenanigans look like utter madness, but what we're actually doing is
++ * making sure that the ustack helper will see the PyFrameObject pointer on the
++ * stack. We have two tricky cases:
++ *
++ * amd64
++ *
++ * We use up the six registers for passing arguments, meaning the call can't
++ * use a register for passing 'f', and has to push it onto the stack in a known
++ * location.
++ *
++ * And how does "throwflag" figure in to this? -PN
++ *
++ * SPARC
++ *
++ * Here the problem is that (on 32-bit) the compiler is re-using %i0 before
++ * some calls inside PyEval_EvalFrameReal(), which means that when it's saved,
++ * it's just some junk value rather than the real first argument. So, instead,
++ * we trace our proxy PyEval_EvalFrame(), where we 'know' the compiler won't
++ * decide to re-use %i0. We also need to defeat optimization of our proxy.
++ */
++
++#if defined(HAVE_DTRACE)
++
++#if defined(__amd64)
++PyObject *PyEval_EvalFrameExReal(long, long, long, long, long, long,
++    PyFrameObject *, int throwflag);
++
++
++
+ PyObject *
+ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
+ {
++	volatile PyObject *f2;
++	f2 = PyEval_EvalFrameExReal(0, 0, 0, 0, 0, 0, f, throwflag);
++	return (PyObject *)f2;
++}
++
++PyObject *
++PyEval_EvalFrameExReal(long a1, long a2, long a3, long a4, long a5, long a6,
++    PyFrameObject *f, int throwflag)
++{
++
++#elif defined(__sparc)
++
++PyObject *PyEval_EvalFrameExReal(PyFrameObject *f, int throwflag);
++
++volatile int dummy;
++
++PyObject *
++PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
++{
++	volatile PyObject *f2;
++	f2 = PyEval_EvalFrameExReal(f, throwflag);
++	dummy = f->ob_refcnt;
++	return (PyObject *)f2;
++}
++
++PyObject *
++PyEval_EvalFrameExReal(PyFrameObject *f, int throwflag)
++{
++
++#else /* __amd64 || __sparc */
++
++PyObject *
++PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
++{
++
++#endif /* __amd64 || __sparc */
++
++#else /* don't HAVE_DTRACE */
++
++PyObject *
++PyEval_EvalFrameexEx(PyFrameObject *f, int throwflag))
++{
++
++#endif /* HAVE_DTRACE */
++
+ #ifdef DXPAIRS
+ 	int lastopcode = 0;
+ #endif
+@@ -763,6 +892,9 @@
+ 		}
+ 	}
+ 
++        if (PYTHON_FUNCTION_ENTRY_ENABLED())
++                dtrace_entry(f);
++
+ 	co = f->f_code;
+ 	names = co->co_names;
+ 	consts = co->co_consts;
+@@ -2383,6 +2515,10 @@
+ 			PyObject **sp;
+ 			PCALL(PCALL_ALL);
+ 			sp = stack_pointer;
++#ifdef HAVE_DTRACE
++			f->f_calllineno = PyCode_Addr2Line(f->f_code,
++							   f->f_lasti);
++#endif
+ #ifdef WITH_TSC
+ 			x = call_function(&sp, oparg, &intr0, &intr1);
+ #else
+@@ -2425,6 +2561,11 @@
+ 		    } else
+ 			    Py_INCREF(func);
+ 		    sp = stack_pointer;
++#ifdef HAVE_DTRACE
++		    f->f_calllineno = PyCode_Addr2Line(f->f_code,
++		                                       f->f_lasti);
++#endif
++
+ 		    READ_TIMESTAMP(intr0);
+ 		    x = ext_do_call(func, &sp, flags, na, nk);
+ 		    READ_TIMESTAMP(intr1);
+@@ -2723,6 +2864,8 @@
+ 
+ 	/* pop frame */
+ exit_eval_frame:
++	if (PYTHON_FUNCTION_RETURN_ENABLED())
++		dtrace_return(f);
+ 	Py_LeaveRecursiveCall();
+ 	tstate->frame = f->f_back;
+ 
+diff --git Python-2.6.4/Python/phelper.d Python-2.6.4/Python/phelper.d
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Python/phelper.d
+@@ -0,0 +1,139 @@
++
++/*
++ * Python ustack helper.  This relies on the first argument (PyFrame *) being
++ * on the stack; see Python/ceval.c for the contortions we go through to ensure
++ * this is the case.
++ *
++ * On x86, the PyFrame * is two slots up from the frame pointer; on SPARC, it's
++ * eight.
++ */
++
++/*
++ * Yes, this is as gross as it looks. DTrace cannot handle static functions,
++ * and our stat_impl.h has them in ILP32.
++ */
++#define _SYS_STAT_H
++
++#include <stdio.h>
++#include <sys/types.h>
++
++#include "pyport.h"
++#include "object.h"
++#include "pystate.h"
++#include "pyarena.h"
++#include "pythonrun.h"
++#include "compile.h"
++#include "frameobject.h"
++#include "stringobject.h"
++
++#if defined(__i386)
++#define	startframe PyEval_EvalFrameEx
++#define	endframe PyEval_EvalCodeEx
++#elif defined(__amd64)
++#define	PyEval_EvalFrameEx PyEval_EvalFrameExReal
++#define	startframe PyEval_EvalFrameExReal
++#define	endframe PyEval_EvalCodeEx
++#elif defined(__sparc)
++#define	PyEval_EvalFrameEx PyEval_EvalFrameExReal
++#define	startframe PyEval_EvalFrameEx
++#define	endframe PyEval_EvalFrameExReal
++#endif
++
++#ifdef __sparcv9
++#define	STACK_BIAS (2048-1)
++#else
++#define	STACK_BIAS 0
++#endif
++
++/*
++ * Not defining PHELPER lets us test this code as a normal D script.
++ */
++#ifdef PHELPER
++
++#define	at_evalframe(addr) \
++    ((uintptr_t)addr >= ((uintptr_t)&``startframe) && \
++     (uintptr_t)addr < ((uintptr_t)&``endframe))
++#define	probe dtrace:helper:ustack:
++#define	print_result(r) (r)
++
++#if defined(__i386) || defined(__amd64)
++#define	frame_ptr_addr ((uintptr_t)arg1 + sizeof(uintptr_t) * 2)
++#elif defined(__sparc)
++#define	frame_ptr_addr ((uintptr_t)arg1 + STACK_BIAS + sizeof(uintptr_t) * 8)
++#else
++#error unknown architecture
++#endif
++
++#else /* PHELPER */
++
++#define	at_evalframe(addr) (1)
++#define	probe pid$target::PyEval_EvalFrame:entry
++#define print_result(r) (trace(r))
++
++#if defined(__i386) || defined(__amd64)
++#define	frame_ptr_addr ((uintptr_t)uregs[R_SP] + sizeof(uintptr_t))
++#elif defined(__sparc)
++/*
++ * Not implemented: we could just use R_I0, but what's the point?
++ */
++#else
++#error unknown architecture
++#endif
++
++#endif /* PHELPER */
++
++extern uintptr_t PyEval_EvalFrameEx;
++extern uintptr_t PyEval_EvalCodeEx;
++
++#define	copyin_obj(addr, obj) ((obj *)copyin((uintptr_t)addr, sizeof(obj)))
++#define	pystr_addr(addr) ((char *)addr + offsetof(PyStringObject, ob_sval))
++#define	copyin_str(dest, addr, obj) \
++    (copyinto((uintptr_t)pystr_addr(addr), obj->ob_size, (dest)))
++#define	add_str(addr, obj) \
++    copyin_str(this->result + this->pos, addr, obj); \
++    this->pos += obj->ob_size; \
++    this->result[this->pos] = '\0';
++#define	add_digit(nr, div) ((nr / div) ? \
++    (this->result[this->pos++] = '0' + ((nr / div) % 10)) : \
++    (this->result[this->pos] = '\0'))
++#define	add_char(c) (this->result[this->pos++] = c)
++
++probe /at_evalframe(arg0)/ 
++{
++	this->framep = *(uintptr_t *)copyin(frame_ptr_addr, sizeof(uintptr_t));
++	this->frameo = copyin_obj(this->framep, PyFrameObject);
++	this->codep = this->frameo->f_code;
++	this->lineno = this->frameo->f_calllineno;
++	this->codeo = copyin_obj(this->codep, PyCodeObject);
++	this->filenamep = this->codeo->co_filename;
++	this->fnamep = this->codeo->co_name;
++	this->filenameo = copyin_obj(this->filenamep, PyStringObject);
++	this->fnameo = copyin_obj(this->fnamep, PyStringObject);
++
++	this->len = 1 + this->filenameo->ob_size + 1 + 5 + 2 +
++	    this->fnameo->ob_size + 1 + 1;
++
++	this->result = (char *)alloca(this->len);
++	this->pos = 0;
++
++	add_char('@');
++	add_str(this->filenamep, this->filenameo);
++	add_char(':');
++	add_digit(this->lineno, 10000);
++	add_digit(this->lineno, 1000);
++	add_digit(this->lineno, 100);
++	add_digit(this->lineno, 10);
++	add_digit(this->lineno, 1);
++	add_char(' ');
++	add_char('(');
++	add_str(this->fnamep, this->fnameo);
++	add_char(')');
++	this->result[this->pos] = '\0';
++
++	print_result(stringof(this->result));
++}
++
++probe /!at_evalframe(arg0)/
++{
++	NULL;
++}
+diff --git Python-2.6.4/Python/python.d Python-2.6.4/Python/python.d
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Python/python.d
+@@ -0,0 +1,10 @@
++provider python {
++	probe function__entry(const char *, const char *, int);
++	probe function__return(const char *, const char *, int);
++};
++
++#pragma D attributes Evolving/Evolving/Common provider python provider
++#pragma D attributes Private/Private/Common provider python module
++#pragma D attributes Private/Private/Common provider python function
++#pragma D attributes Evolving/Evolving/Common provider python name
++#pragma D attributes Evolving/Evolving/Common provider python args
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-08-ctypes.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,28 @@
+diff --git Python-2.6.4/Modules/_ctypes/callproc.c Python-2.6.4/Modules/_ctypes/callproc.c
+--- Python-2.6.4/Modules/_ctypes/callproc.c
++++ Python-2.6.4/Modules/_ctypes/callproc.c
+@@ -73,6 +73,8 @@
+ #include <malloc.h>
+ #endif
+ 
++#include <alloca.h>
++
+ #include <ffi.h>
+ #include "ctypes.h"
+ 
+diff --git Python-2.6.4/Modules/_ctypes/libffi/src/x86/ffitarget.h Python-2.6.4/Modules/_ctypes/libffi/src/x86/ffitarget.h
+--- Python-2.6.4/Modules/_ctypes/libffi/src/x86/ffitarget.h
++++ Python-2.6.4/Modules/_ctypes/libffi/src/x86/ffitarget.h
+@@ -54,10 +54,10 @@
+ #endif
+ 
+   /* ---- Intel x86 and AMD x86-64 - */
+-#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__))
++#if !defined(X86_WIN32) && (defined(__i386__) || defined(__i386) || defined(__x86_64__))
+   FFI_SYSV,
+   FFI_UNIX64,   /* Unix variants all use the same ABI for x86-64  */
+-#ifdef __i386__
++#if defined (__i386__) || defined (__i386)
+   FFI_DEFAULT_ABI = FFI_SYSV,
+ #else
+   FFI_DEFAULT_ABI = FFI_UNIX64,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-09-ucred.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,2427 @@
+diff --git Python-2.6.4/Modules/ucred.c Python-2.6.4/Modules/ucred.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/ucred.c
+@@ -0,0 +1,391 @@
++/*
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++#include <Python.h>
++
++#include <stdio.h>
++#include <priv.h>
++#include <ucred.h>
++#include <ctype.h>
++#include <tsol/label.h>
++
++typedef struct {
++	PyObject_HEAD
++	ucred_t *ucred;
++} pyucred_t;
++
++#define pyucred_getlongid(name, type)				\
++	static PyObject *					\
++	pyucred_get##name(pyucred_t *uc)			\
++	{ 							\
++		type val;					\
++								\
++		if (uc->ucred == NULL) {			\
++			errno = EINVAL;				\
++			PyErr_SetFromErrno(PyExc_OSError);	\
++			return (NULL);				\
++		}						\
++								\
++		if ((val = ucred_get##name(uc->ucred)) == -1) {	\
++			PyErr_SetFromErrno(PyExc_OSError);	\
++			return (NULL);				\
++		}						\
++								\
++		return (Py_BuildValue("l", (long)val));		\
++	}
++
++pyucred_getlongid(euid, uid_t)
++pyucred_getlongid(ruid, uid_t)
++pyucred_getlongid(suid, uid_t)
++pyucred_getlongid(egid, gid_t)
++pyucred_getlongid(rgid, gid_t)
++pyucred_getlongid(sgid, gid_t)
++pyucred_getlongid(pid, pid_t)
++pyucred_getlongid(projid, projid_t)
++pyucred_getlongid(zoneid, zoneid_t)
++
++static PyObject *
++pyucred_getgroups(pyucred_t *uc)
++{
++	const gid_t *groups;
++	PyObject *list;
++	int len;
++	int i;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if ((len = ucred_getgroups(uc->ucred, &groups)) == -1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if ((list = PyList_New(len)) == NULL)
++		return (NULL);
++
++	for (i = 0; i < len; i++) {
++		PyObject *gid = Py_BuildValue("l", (long)groups[i]);
++		if (PyList_SetItem(list, i, gid) == -1)
++			return (NULL);
++	}
++
++	return (list);
++}
++
++static PyObject *
++pyucred_getlabel(pyucred_t *uc)
++{
++	m_label_t *label;
++	PyObject *ret;
++	char *str;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	label = ucred_getlabel(uc->ucred);
++	if (label == NULL)
++		return (Py_BuildValue("s", ""));
++
++	if (label_to_str(label, &str, M_LABEL, DEF_NAMES) == -1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	ret = Py_BuildValue("s", str);
++	free(str);
++	return (ret);
++}
++
++static PyObject *
++pyucred_getpflags(pyucred_t *uc, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "flags", NULL };
++	uint_t flags;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist,
++	    &flags))
++		return (NULL);
++
++	if ((flags = ucred_getpflags(uc->ucred, flags)) == (uint_t)-1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("i", flags));
++}
++
++static PyObject *
++pyucred_has_priv(pyucred_t *uc, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "set", "priv", NULL };
++	const priv_set_t *privs;
++	const char *set;
++	const char *priv;
++
++	if (uc->ucred == NULL) {
++		errno = EINVAL;
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "ss", kwlist,
++	    &set, &priv))
++		return (NULL);
++
++	if ((privs = ucred_getprivset(uc->ucred, set)) == NULL) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	if (priv_ismember(privs, priv)) {
++		Py_INCREF(Py_True);
++		return Py_True;
++	}
++
++	Py_INCREF(Py_False);
++	return Py_False;
++}
++
++PyDoc_STRVAR(pyucred_getlabel_doc,
++    "getlabel() -> string\n"
++    "\n"
++    "Return the Trusted Extensions label string, or an "
++    "empty string if not available. The label string is "
++    "converted using the default name and M_LABEL (human-readable). "
++    "Raises OSError. See label_to_str(3TSOL).");
++PyDoc_STRVAR(pyucred_getpflags_doc,
++    "getpflags(flags) -> int\n"
++    "\n"
++    "Return the values of the specified privilege flags.");
++PyDoc_STRVAR(pyucred_has_priv_doc,
++    "has_priv(set, priv) -> bool\n"
++    "\n"
++    "Return true if the given privilege is set in the "
++    "specified set. Raises OSError if the set or privilege is "
++    "invalid, or a problem occurs.\n"
++    "\n"
++    "Currently, the following privilege sets are defined, as "
++    "described in privileges(5):\n"
++    "\n"
++    "Effective\n"
++    "Permitted\n"
++    "Inheritable\n"
++    "Limit\n");
++
++static PyMethodDef pyucred_methods[] = {
++	{ "geteuid", (PyCFunction)pyucred_geteuid, METH_NOARGS,
++	    "Return the effective user ID." },
++	{ "getruid", (PyCFunction)pyucred_getruid, METH_NOARGS,
++	    "Return the real user ID." },
++	{ "getsuid", (PyCFunction)pyucred_getsuid, METH_NOARGS,
++	    "Return the saved user ID." },
++	{ "getegid", (PyCFunction)pyucred_getegid, METH_NOARGS,
++	    "Return the effective group ID." },
++	{ "getrgid", (PyCFunction)pyucred_getrgid, METH_NOARGS,
++	    "Return the real group ID." },
++	{ "getsgid", (PyCFunction)pyucred_getsgid, METH_NOARGS,
++	    "Return the saved group ID." },
++	{ "getpid", (PyCFunction)pyucred_getpid, METH_NOARGS,
++	    "Return the effective user ID." },
++	{ "getprojid", (PyCFunction)pyucred_getprojid, METH_NOARGS,
++	    "Return the project ID." },
++	{ "getzoneid", (PyCFunction)pyucred_getzoneid, METH_NOARGS,
++	    "Return the zone ID." },
++	{ "getgroups", (PyCFunction)pyucred_getgroups, METH_NOARGS,
++	    "Return a list of group IDs." },
++	{ "getlabel", (PyCFunction)pyucred_getlabel, METH_NOARGS,
++	    pyucred_getlabel_doc },
++	{ "getpflags", (PyCFunction)pyucred_getpflags,
++	    METH_VARARGS|METH_KEYWORDS, pyucred_getpflags_doc },
++	{ "has_priv", (PyCFunction)pyucred_has_priv,
++	    METH_VARARGS|METH_KEYWORDS, pyucred_has_priv_doc },
++	{ NULL }
++};
++
++static int
++pyucred_init(PyObject *self, PyObject *args, PyObject *kwargs)
++{
++	pyucred_t *uc = (pyucred_t *)self;
++	uc->ucred = NULL;
++	return (0);
++}
++
++static void
++pyucred_dealloc(PyObject *self)
++{
++	pyucred_t *uc = (pyucred_t *)self;
++	if (uc->ucred != NULL)
++		ucred_free(uc->ucred);
++	self->ob_type->tp_free(self);
++}
++
++static PyTypeObject pyucred_type = {
++	PyObject_HEAD_INIT(NULL)
++	0,                         /*ob_size*/
++	"ucred.ucred",             /*tp_name*/
++	sizeof (pyucred_t),        /*tp_basicsize*/
++	0,                         /*tp_itemsize*/
++	pyucred_dealloc,           /*tp_dealloc*/
++	0,                         /*tp_print*/
++	0,                         /*tp_getattr*/
++	0,                         /*tp_setattr*/
++	0,                         /*tp_compare*/
++	0,                         /*tp_repr*/
++	0,                         /*tp_as_number*/
++	0,                         /*tp_as_sequence*/
++	0,                         /*tp_as_mapping*/
++	0,                         /*tp_hash */
++	0,                         /*tp_call*/
++	0,                         /*tp_str*/
++	0,                         /*tp_getattro*/
++	0,                         /*tp_setattro*/
++	0,                         /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT,        /*tp_flags*/
++	"user credentials",        /*tp_doc */
++	0,		           /* tp_traverse */
++	0,		           /* tp_clear */
++	0,		           /* tp_richcompare */
++	0,		           /* tp_weaklistoffset */
++	0,		           /* tp_iter */
++	0,		           /* tp_iternext */
++	pyucred_methods,           /* tp_methods */
++	0,                         /* tp_members */
++	0,                         /* tp_getset */
++	0,                         /* tp_base */
++	0,                         /* tp_dict */
++	0,                         /* tp_descr_get */
++	0,                         /* tp_descr_set */
++	0,                         /* tp_dictoffset */
++	(initproc)pyucred_init,    /* tp_init */
++	0,                         /* tp_alloc */
++	0,                         /* tp_new */
++};
++
++static PyObject *
++pyucred_new(const ucred_t *uc)
++{
++	pyucred_t *self;
++
++	self = (pyucred_t *)PyObject_CallObject((PyObject *)&pyucred_type, NULL);
++
++	if (self == NULL)
++		return (NULL);
++
++	self->ucred = (ucred_t *)uc;
++
++	return ((PyObject *)self);
++}
++
++static PyObject *
++pyucred_get(PyObject *o, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "pid", NULL };
++	ucred_t *ucred = NULL;
++	int pid;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist,
++	    &pid))
++		return (NULL);
++
++	ucred = ucred_get(pid);
++
++	if (ucred == NULL) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	return (pyucred_new(ucred));
++}
++
++static PyObject *
++pyucred_getpeer(PyObject *o, PyObject *args, PyObject *kwargs)
++{
++	static char *kwlist[] = { "fd", NULL };
++	ucred_t *ucred = NULL;
++	int fd;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i", kwlist,
++	    &fd))
++		return (NULL);
++
++	if (getpeerucred(fd, &ucred) == -1) {
++		PyErr_SetFromErrno(PyExc_OSError);
++		return (NULL);
++	}
++
++	return (pyucred_new(ucred));
++}
++
++PyDoc_STRVAR(pyucred_get_doc,
++    "get(pid) -> ucred\n"
++    "\n"
++    "Return the credentials of the specified process ID. "
++    "Raises OSError. See ucred_get(3C).");
++PyDoc_STRVAR(pyucred_getpeer_doc,
++    "getpeer(fd) -> ucred\n"
++    "\n"
++    "Return the credentials of the peer endpoint of a "
++    "connection-oriented socket (SOCK_STREAM) or STREAM fd "
++    "at the time the endpoint was created or the connection "
++    "was established. Raises OSError. See getpeerucred(3C).");
++
++static struct PyMethodDef pyucred_module_methods[] = {
++	{ "get", (PyCFunction) pyucred_get,
++	  METH_VARARGS|METH_KEYWORDS, pyucred_get_doc },
++	{ "getpeer", (PyCFunction) pyucred_getpeer,
++	  METH_VARARGS|METH_KEYWORDS, pyucred_getpeer_doc },
++	{ NULL, NULL, 0, NULL }
++};
++
++PyDoc_STRVAR(pyucred_module_doc,
++    "This module provides an interface to the user credential access "
++    "methods, obtainable either by process ID or file descriptor.");
++   
++PyMODINIT_FUNC
++initucred(void)
++{
++	PyObject *m;
++
++	m = Py_InitModule3("ucred", pyucred_module_methods,
++	    pyucred_module_doc);
++
++	pyucred_type.tp_new = PyType_GenericNew;
++	if (PyType_Ready(&pyucred_type) < 0)
++		return;
++
++	Py_INCREF(&pyucred_type);
++
++	PyModule_AddObject(m, "ucred", (PyObject *)&pyucred_type);
++}
+diff --git Python-2.6.4/setup.py Python-2.6.4/setup.py
+--- Python-2.6.4/setup.py
++++ Python-2.6.4/setup.py
+@@ -1277,6 +1277,13 @@
+         else:
+             missing.append('dl')
+ 
++        # ucred module (Solaris)
++        ucred_inc = find_file('ucred.h', [], inc_dirs)
++        tsol_inc = find_file('tsol/label.h', [], inc_dirs)
++        if ucred_inc is not None and tsol_inc is not None:
++            exts.append( Extension('ucred', ['ucred.c'],
++                                   libraries = ['tsol']) )
++
+         # Thomas Heller's _ctypes module
+         self.detect_ctypes(inc_dirs, lib_dirs)
+ 
+diff --git Python-2.6.4/setup.py.orig Python-2.6.4/setup.py.orig
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/setup.py.orig
+@@ -0,0 +1,1958 @@
++# Autodetecting setup.py script for building the Python extensions
++#
++
++__version__ = "$Revision: 75282 $"
++
++import sys, os, imp, re, optparse
++from glob import glob
++from platform import machine as platform_machine
++
++from distutils import log
++from distutils import sysconfig
++from distutils import text_file
++from distutils.errors import *
++from distutils.core import Extension, setup
++from distutils.command.build_ext import build_ext
++from distutils.command.install import install
++from distutils.command.install_lib import install_lib
++
++# This global variable is used to hold the list of modules to be disabled.
++disabled_module_list = []
++
++def add_dir_to_list(dirlist, dir):
++    """Add the directory 'dir' to the list 'dirlist' (at the front) if
++    1) 'dir' is not already in 'dirlist'
++    2) 'dir' actually exists, and is a directory."""
++    if dir is not None and os.path.isdir(dir) and dir not in dirlist:
++        dirlist.insert(0, dir)
++
++def find_file(filename, std_dirs, paths):
++    """Searches for the directory where a given file is located,
++    and returns a possibly-empty list of additional directories, or None
++    if the file couldn't be found at all.
++
++    'filename' is the name of a file, such as readline.h or libcrypto.a.
++    'std_dirs' is the list of standard system directories; if the
++        file is found in one of them, no additional directives are needed.
++    'paths' is a list of additional locations to check; if the file is
++        found in one of them, the resulting list will contain the directory.
++    """
++
++    # Check the standard locations
++    for dir in std_dirs:
++        f = os.path.join(dir, filename)
++        if os.path.exists(f): return []
++
++    # Check the additional directories
++    for dir in paths:
++        f = os.path.join(dir, filename)
++        if os.path.exists(f):
++            return [dir]
++
++    # Not found anywhere
++    return None
++
++def find_library_file(compiler, libname, std_dirs, paths):
++    result = compiler.find_library_file(std_dirs + paths, libname)
++    if result is None:
++        return None
++
++    # Check whether the found file is in one of the standard directories
++    dirname = os.path.dirname(result)
++    for p in std_dirs:
++        # Ensure path doesn't end with path separator
++        p = p.rstrip(os.sep)
++        if p == dirname:
++            return [ ]
++
++    # Otherwise, it must have been in one of the additional directories,
++    # so we have to figure out which one.
++    for p in paths:
++        # Ensure path doesn't end with path separator
++        p = p.rstrip(os.sep)
++        if p == dirname:
++            return [p]
++    else:
++        assert False, "Internal error: Path not found in std_dirs or paths"
++
++def module_enabled(extlist, modname):
++    """Returns whether the module 'modname' is present in the list
++    of extensions 'extlist'."""
++    extlist = [ext for ext in extlist if ext.name == modname]
++    return len(extlist)
++
++def find_module_file(module, dirlist):
++    """Find a module in a set of possible folders. If it is not found
++    return the unadorned filename"""
++    list = find_file(module, [], dirlist)
++    if not list:
++        return module
++    if len(list) > 1:
++        log.info("WARNING: multiple copies of %s found"%module)
++    return os.path.join(list[0], module)
++
++class PyBuildExt(build_ext):
++
++    def __init__(self, dist):
++        build_ext.__init__(self, dist)
++        self.failed = []
++
++    def build_extensions(self):
++
++        # Detect which modules should be compiled
++        missing = self.detect_modules()
++
++        # Remove modules that are present on the disabled list
++        extensions = [ext for ext in self.extensions
++                      if ext.name not in disabled_module_list]
++        # move ctypes to the end, it depends on other modules
++        ext_map = dict((ext.name, i) for i, ext in enumerate(extensions))
++        if "_ctypes" in ext_map:
++            ctypes = extensions.pop(ext_map["_ctypes"])
++            extensions.append(ctypes)
++        self.extensions = extensions
++
++        # Fix up the autodetected modules, prefixing all the source files
++        # with Modules/ and adding Python's include directory to the path.
++        (srcdir,) = sysconfig.get_config_vars('srcdir')
++        if not srcdir:
++            # Maybe running on Windows but not using CYGWIN?
++            raise ValueError("No source directory; cannot proceed.")
++
++        # Figure out the location of the source code for extension modules
++        # (This logic is copied in distutils.test.test_sysconfig,
++        # so building in a separate directory does not break test_distutils.)
++        moddir = os.path.join(os.getcwd(), srcdir, 'Modules')
++        moddir = os.path.normpath(moddir)
++        srcdir, tail = os.path.split(moddir)
++        srcdir = os.path.normpath(srcdir)
++        moddir = os.path.normpath(moddir)
++
++        moddirlist = [moddir]
++        incdirlist = ['./Include']
++
++        # Platform-dependent module source and include directories
++        platform = self.get_platform()
++        if platform in ('darwin', 'mac') and ("--disable-toolbox-glue" not in
++            sysconfig.get_config_var("CONFIG_ARGS")):
++            # Mac OS X also includes some mac-specific modules
++            macmoddir = os.path.join(os.getcwd(), srcdir, 'Mac/Modules')
++            moddirlist.append(macmoddir)
++            incdirlist.append('./Mac/Include')
++
++        alldirlist = moddirlist + incdirlist
++
++        # Fix up the paths for scripts, too
++        self.distribution.scripts = [os.path.join(srcdir, filename)
++                                     for filename in self.distribution.scripts]
++
++        # Python header files
++        headers = glob("Include/*.h") + ["pyconfig.h"]
++
++        for ext in self.extensions[:]:
++            ext.sources = [ find_module_file(filename, moddirlist)
++                            for filename in ext.sources ]
++            if ext.depends is not None:
++                ext.depends = [find_module_file(filename, alldirlist)
++                               for filename in ext.depends]
++            else:
++                ext.depends = []
++            # re-compile extensions if a header file has been changed
++            ext.depends.extend(headers)
++
++            ext.include_dirs.append( '.' ) # to get config.h
++            for incdir in incdirlist:
++                ext.include_dirs.append( os.path.join(srcdir, incdir) )
++
++            # If a module has already been built statically,
++            # don't build it here
++            if ext.name in sys.builtin_module_names:
++                self.extensions.remove(ext)
++
++        if platform != 'mac':
++            # Parse Modules/Setup and Modules/Setup.local to figure out which
++            # modules are turned on in the file.
++            remove_modules = []
++            for filename in ('Modules/Setup', 'Modules/Setup.local'):
++                input = text_file.TextFile(filename, join_lines=1)
++                while 1:
++                    line = input.readline()
++                    if not line: break
++                    line = line.split()
++                    remove_modules.append(line[0])
++                input.close()
++
++            for ext in self.extensions[:]:
++                if ext.name in remove_modules:
++                    self.extensions.remove(ext)
++
++        # When you run "make CC=altcc" or something similar, you really want
++        # those environment variables passed into the setup.py phase.  Here's
++        # a small set of useful ones.
++        compiler = os.environ.get('CC')
++        args = {}
++        # unfortunately, distutils doesn't let us provide separate C and C++
++        # compilers
++        if compiler is not None:
++            (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
++            args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
++        self.compiler.set_executables(**args)
++
++        build_ext.build_extensions(self)
++
++        longest = max([len(e.name) for e in self.extensions])
++        if self.failed:
++            longest = max(longest, max([len(name) for name in self.failed]))
++
++        def print_three_column(lst):
++            lst.sort(key=str.lower)
++            # guarantee zip() doesn't drop anything
++            while len(lst) % 3:
++                lst.append("")
++            for e, f, g in zip(lst[::3], lst[1::3], lst[2::3]):
++                print "%-*s   %-*s   %-*s" % (longest, e, longest, f,
++                                              longest, g)
++
++        if missing:
++            print
++            print "Failed to find the necessary bits to build these modules:"
++            print_three_column(missing)
++            print ("To find the necessary bits, look in setup.py in"
++                   " detect_modules() for the module's name.")
++            print
++
++        if self.failed:
++            failed = self.failed[:]
++            print
++            print "Failed to build these modules:"
++            print_three_column(failed)
++            print
++
++    def build_extension(self, ext):
++
++        if ext.name == '_ctypes':
++            if not self.configure_ctypes(ext):
++                return
++
++        try:
++            build_ext.build_extension(self, ext)
++        except (CCompilerError, DistutilsError), why:
++            self.announce('WARNING: building of extension "%s" failed: %s' %
++                          (ext.name, sys.exc_info()[1]))
++            self.failed.append(ext.name)
++            return
++        # Workaround for Mac OS X: The Carbon-based modules cannot be
++        # reliably imported into a command-line Python
++        if 'Carbon' in ext.extra_link_args:
++            self.announce(
++                'WARNING: skipping import check for Carbon-based "%s"' %
++                ext.name)
++            return
++
++        if self.get_platform() == 'darwin' and (
++                sys.maxint > 2**32 and '-arch' in ext.extra_link_args):
++            # Don't bother doing an import check when an extension was
++            # build with an explicit '-arch' flag on OSX. That's currently
++            # only used to build 32-bit only extensions in a 4-way
++            # universal build and loading 32-bit code into a 64-bit
++            # process will fail.
++            self.announce(
++                'WARNING: skipping import check for "%s"' %
++                ext.name)
++            return
++
++        # Workaround for Cygwin: Cygwin currently has fork issues when many
++        # modules have been imported
++        if self.get_platform() == 'cygwin':
++            self.announce('WARNING: skipping import check for Cygwin-based "%s"'
++                % ext.name)
++            return
++        ext_filename = os.path.join(
++            self.build_lib,
++            self.get_ext_filename(self.get_ext_fullname(ext.name)))
++        try:
++            imp.load_dynamic(ext.name, ext_filename)
++        except ImportError, why:
++            self.failed.append(ext.name)
++            self.announce('*** WARNING: renaming "%s" since importing it'
++                          ' failed: %s' % (ext.name, why), level=3)
++            assert not self.inplace
++            basename, tail = os.path.splitext(ext_filename)
++            newname = basename + "_failed" + tail
++            if os.path.exists(newname):
++                os.remove(newname)
++            os.rename(ext_filename, newname)
++
++            # XXX -- This relies on a Vile HACK in
++            # distutils.command.build_ext.build_extension().  The
++            # _built_objects attribute is stored there strictly for
++            # use here.
++            # If there is a failure, _built_objects may not be there,
++            # so catch the AttributeError and move on.
++            try:
++                for filename in self._built_objects:
++                    os.remove(filename)
++            except AttributeError:
++                self.announce('unable to remove files (ignored)')
++        except:
++            exc_type, why, tb = sys.exc_info()
++            self.announce('*** WARNING: importing extension "%s" '
++                          'failed with %s: %s' % (ext.name, exc_type, why),
++                          level=3)
++            self.failed.append(ext.name)
++
++    def get_platform(self):
++        # Get value of sys.platform
++        for platform in ['cygwin', 'beos', 'darwin', 'atheos', 'osf1']:
++            if sys.platform.startswith(platform):
++                return platform
++        return sys.platform
++
++    def detect_modules(self):
++        if sys.platform != 'sunos5':
++            # Ensure that /usr/local is always used
++            add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
++            add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
++        # Add paths specified in the environment variables LDFLAGS and
++        # CPPFLAGS for header and library files.
++        # We must get the values from the Makefile and not the environment
++        # directly since an inconsistently reproducible issue comes up where
++        # the environment variable is not set even though the value were passed
++        # into configure and stored in the Makefile (issue found on OS X 10.3).
++        for env_var, arg_name, dir_list in (
++                ('LDFLAGS', '-R', self.compiler.runtime_library_dirs),
++                ('LDFLAGS', '-L', self.compiler.library_dirs),
++                ('CPPFLAGS', '-I', self.compiler.include_dirs)):
++            env_val = sysconfig.get_config_var(env_var)
++            if env_val:
++                # To prevent optparse from raising an exception about any
++                # options in env_val that it doesn't know about we strip out
++                # all double dashes and any dashes followed by a character
++                # that is not for the option we are dealing with.
++                #
++                # Please note that order of the regex is important!  We must
++                # strip out double-dashes first so that we don't end up with
++                # substituting "--Long" to "-Long" and thus lead to "ong" being
++                # used for a library directory.
++                env_val = re.sub(r'(^|\s+)-(-|(?!%s))' % arg_name[1],
++                                 ' ', env_val)
++                parser = optparse.OptionParser()
++                # Make sure that allowing args interspersed with options is
++                # allowed
++                parser.allow_interspersed_args = True
++                parser.error = lambda msg: None
++                parser.add_option(arg_name, dest="dirs", action="append")
++                options = parser.parse_args(env_val.split())[0]
++                if options.dirs:
++                    for directory in reversed(options.dirs):
++                        add_dir_to_list(dir_list, directory)
++
++        if os.path.normpath(sys.prefix) != '/usr':
++            add_dir_to_list(self.compiler.library_dirs,
++                            sysconfig.get_config_var("LIBDIR"))
++            add_dir_to_list(self.compiler.include_dirs,
++                            sysconfig.get_config_var("INCLUDEDIR"))
++
++        try:
++            have_unicode = unicode
++        except NameError:
++            have_unicode = 0
++
++        # lib_dirs and inc_dirs are used to search for files;
++        # if a file is found in one of those directories, it can
++        # be assumed that no additional -I,-L directives are needed.
++        lib_dirs = self.compiler.library_dirs + [
++            '/lib64', '/usr/lib64',
++            '/lib', '/usr/lib',
++            ]
++        inc_dirs = self.compiler.include_dirs + ['/usr/include']
++        exts = []
++        missing = []
++
++        config_h = sysconfig.get_config_h_filename()
++        config_h_vars = sysconfig.parse_config_h(open(config_h))
++
++        platform = self.get_platform()
++        (srcdir,) = sysconfig.get_config_vars('srcdir')
++
++        # Check for AtheOS which has libraries in non-standard locations
++        if platform == 'atheos':
++            lib_dirs += ['/system/libs', '/atheos/autolnk/lib']
++            lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
++            inc_dirs += ['/system/include', '/atheos/autolnk/include']
++            inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
++
++        # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
++        if platform in ['osf1', 'unixware7', 'openunix8']:
++            lib_dirs += ['/usr/ccs/lib']
++
++        if platform == 'darwin':
++            # This should work on any unixy platform ;-)
++            # If the user has bothered specifying additional -I and -L flags
++            # in OPT and LDFLAGS we might as well use them here.
++            #   NOTE: using shlex.split would technically be more correct, but
++            # also gives a bootstrap problem. Let's hope nobody uses directories
++            # with whitespace in the name to store libraries.
++            cflags, ldflags = sysconfig.get_config_vars(
++                    'CFLAGS', 'LDFLAGS')
++            for item in cflags.split():
++                if item.startswith('-I'):
++                    inc_dirs.append(item[2:])
++
++            for item in ldflags.split():
++                if item.startswith('-L'):
++                    lib_dirs.append(item[2:])
++
++        # Check for MacOS X, which doesn't need libm.a at all
++        math_libs = ['m']
++        if platform in ['darwin', 'beos', 'mac']:
++            math_libs = []
++
++        # XXX Omitted modules: gl, pure, dl, SGI-specific modules
++
++        #
++        # The following modules are all pretty straightforward, and compile
++        # on pretty much any POSIXish platform.
++        #
++
++        # Some modules that are normally always on:
++        exts.append( Extension('_weakref', ['_weakref.c']) )
++
++        # array objects
++        exts.append( Extension('array', ['arraymodule.c']) )
++        # complex math library functions
++        exts.append( Extension('cmath', ['cmathmodule.c'],
++                               libraries=math_libs) )
++
++        # math library functions, e.g. sin()
++        exts.append( Extension('math',  ['mathmodule.c'],
++                               libraries=math_libs) )
++        # fast string operations implemented in C
++        exts.append( Extension('strop', ['stropmodule.c']) )
++        # time operations and variables
++        exts.append( Extension('time', ['timemodule.c'],
++                               libraries=math_libs) )
++        exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'],
++                               libraries=math_libs) )
++        # fast iterator tools implemented in C
++        exts.append( Extension("itertools", ["itertoolsmodule.c"]) )
++        # code that will be builtins in the future, but conflict with the
++        #  current builtins
++        exts.append( Extension('future_builtins', ['future_builtins.c']) )
++        # random number generator implemented in C
++        exts.append( Extension("_random", ["_randommodule.c"]) )
++        # high-performance collections
++        exts.append( Extension("_collections", ["_collectionsmodule.c"]) )
++        # bisect
++        exts.append( Extension("_bisect", ["_bisectmodule.c"]) )
++        # heapq
++        exts.append( Extension("_heapq", ["_heapqmodule.c"]) )
++        # operator.add() and similar goodies
++        exts.append( Extension('operator', ['operator.c']) )
++        # Python 3.0 _fileio module
++        exts.append( Extension("_fileio", ["_fileio.c"]) )
++        # Python 3.0 _bytesio module
++        exts.append( Extension("_bytesio", ["_bytesio.c"]) )
++        # _functools
++        exts.append( Extension("_functools", ["_functoolsmodule.c"]) )
++        # _json speedups
++        exts.append( Extension("_json", ["_json.c"]) )
++        # Python C API test module
++        exts.append( Extension('_testcapi', ['_testcapimodule.c'],
++                               depends=['testcapi_long.h']) )
++        # profilers (_lsprof is for cProfile.py)
++        exts.append( Extension('_hotshot', ['_hotshot.c']) )
++        exts.append( Extension('_lsprof', ['_lsprof.c', 'rotatingtree.c']) )
++        # static Unicode character database
++        if have_unicode:
++            exts.append( Extension('unicodedata', ['unicodedata.c']) )
++        else:
++            missing.append('unicodedata')
++        # access to ISO C locale support
++        data = open('pyconfig.h').read()
++        m = re.search(r"#s*define\s+WITH_LIBINTL\s+1\s*", data)
++        if m is not None:
++            locale_libs = ['intl']
++        else:
++            locale_libs = []
++        if platform == 'darwin':
++            locale_extra_link_args = ['-framework', 'CoreFoundation']
++        else:
++            locale_extra_link_args = []
++
++
++        exts.append( Extension('_locale', ['_localemodule.c'],
++                               libraries=locale_libs,
++                               extra_link_args=locale_extra_link_args) )
++
++        # Modules with some UNIX dependencies -- on by default:
++        # (If you have a really backward UNIX, select and socket may not be
++        # supported...)
++
++        # fcntl(2) and ioctl(2)
++        exts.append( Extension('fcntl', ['fcntlmodule.c']) )
++        if platform not in ['mac']:
++            # pwd(3)
++            exts.append( Extension('pwd', ['pwdmodule.c']) )
++            # grp(3)
++            exts.append( Extension('grp', ['grpmodule.c']) )
++            # spwd, shadow passwords
++            if (config_h_vars.get('HAVE_GETSPNAM', False) or
++                    config_h_vars.get('HAVE_GETSPENT', False)):
++                exts.append( Extension('spwd', ['spwdmodule.c']) )
++            else:
++                missing.append('spwd')
++        else:
++            missing.extend(['pwd', 'grp', 'spwd'])
++
++        # select(2); not on ancient System V
++        exts.append( Extension('select', ['selectmodule.c']) )
++
++        # Fred Drake's interface to the Python parser
++        exts.append( Extension('parser', ['parsermodule.c']) )
++
++        # cStringIO and cPickle
++        exts.append( Extension('cStringIO', ['cStringIO.c']) )
++        exts.append( Extension('cPickle', ['cPickle.c']) )
++
++        # Memory-mapped files (also works on Win32).
++        if platform not in ['atheos', 'mac']:
++            exts.append( Extension('mmap', ['mmapmodule.c']) )
++        else:
++            missing.append('mmap')
++
++        # Lance Ellinghaus's syslog module
++        if platform not in ['mac']:
++            # syslog daemon interface
++            exts.append( Extension('syslog', ['syslogmodule.c']) )
++        else:
++            missing.append('syslog')
++
++        # George Neville-Neil's timing module:
++        # Deprecated in PEP 4 http://www.python.org/peps/pep-0004.html
++        # http://mail.python.org/pipermail/python-dev/2006-January/060023.html
++        #exts.append( Extension('timing', ['timingmodule.c']) )
++
++        #
++        # Here ends the simple stuff.  From here on, modules need certain
++        # libraries, are platform-specific, or present other surprises.
++        #
++
++        # Multimedia modules
++        # These don't work for 64-bit platforms!!!
++        # These represent audio samples or images as strings:
++
++        # Operations on audio samples
++        # According to #993173, this one should actually work fine on
++        # 64-bit platforms.
++        exts.append( Extension('audioop', ['audioop.c']) )
++
++        # Disabled on 64-bit platforms
++        if sys.maxint != 9223372036854775807L:
++            # Operations on images
++            exts.append( Extension('imageop', ['imageop.c']) )
++        else:
++            missing.extend(['imageop'])
++
++        # readline
++        do_readline = self.compiler.find_library_file(lib_dirs, 'readline')
++        if platform == 'darwin': # and os.uname()[2] < '9.':
++            # MacOSX 10.4 has a broken readline. Don't try to build
++            # the readline module unless the user has installed a fixed
++            # readline package
++            # FIXME: The readline emulation on 10.5 is better, but the
++            # readline module doesn't compile out of the box.
++            if find_file('readline/rlconf.h', inc_dirs, []) is None:
++                do_readline = False
++        if do_readline:
++            if sys.platform == 'darwin':
++                # In every directory on the search path search for a dynamic
++                # library and then a static library, instead of first looking
++                # for dynamic libraries on the entiry path.
++                # This way a staticly linked custom readline gets picked up
++                # before the (broken) dynamic library in /usr/lib.
++                readline_extra_link_args = ('-Wl,-search_paths_first',)
++            else:
++                readline_extra_link_args = ()
++
++            readline_libs = ['readline']
++            if self.compiler.find_library_file(lib_dirs,
++                                                 'ncursesw'):
++                readline_libs.append('ncursesw')
++            elif self.compiler.find_library_file(lib_dirs,
++                                                 'ncurses'):
++                readline_libs.append('ncurses')
++            elif self.compiler.find_library_file(lib_dirs, 'curses'):
++                readline_libs.append('curses')
++            elif self.compiler.find_library_file(lib_dirs +
++                                               ['/usr/lib/termcap'],
++                                               'termcap'):
++                readline_libs.append('termcap')
++            exts.append( Extension('readline', ['readline.c'],
++                                   library_dirs=['/usr/lib/termcap'],
++                                   extra_link_args=readline_extra_link_args,
++                                   libraries=readline_libs) )
++        else:
++            missing.append('readline')
++
++        if platform not in ['mac']:
++            # crypt module.
++
++            if self.compiler.find_library_file(lib_dirs, 'crypt'):
++                libs = ['crypt']
++            else:
++                libs = []
++            exts.append( Extension('crypt', ['cryptmodule.c'], libraries=libs) )
++        else:
++            missing.append('crypt')
++
++        # CSV files
++        exts.append( Extension('_csv', ['_csv.c']) )
++
++        # socket(2)
++        socket_libs = []
++        if self.compiler.find_library_file(lib_dirs,
++                                           'socket'):
++            socket_libs.append('socket')
++        if self.compiler.find_library_file(lib_dirs,
++                                           'nsl'):
++            socket_libs.append('nsl')
++        if self.compiler.find_library_file(lib_dirs,
++                                           'resolv'):
++            socket_libs.append('resolv')
++        exts.append( Extension('_socket', ['socketmodule.c'],
++                               depends = ['socketmodule.h'],
++                               libraries = socket_libs) )
++        # Detect SSL support for the socket module (via _ssl)
++        search_for_ssl_incs_in = [
++                              '/usr/sfw/include',
++                              '/usr/contrib/ssl/include/'
++                             ]
++        ssl_incs = find_file('openssl/ssl.h', inc_dirs,
++                             search_for_ssl_incs_in
++                             )
++        if ssl_incs is not None:
++            krb5_h = find_file('krb5.h', inc_dirs,
++                               ['/usr/kerberos/include'])
++            if krb5_h:
++                ssl_incs += krb5_h
++        if sys.maxint == 2147483647L:
++            sfw_libdir = '/usr/sfw/lib';
++        else:
++            sfw_libdir = '/usr/sfw/lib/64';
++        ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
++                                     [sfw_libdir,
++                                      '/usr/contrib/ssl/lib/'
++                                     ] )
++
++        if (ssl_incs is not None and
++            ssl_libs is not None):
++            exts.append( Extension('_ssl', ['_ssl.c'],
++                                   include_dirs = ssl_incs,
++                                   library_dirs = ssl_libs,
++				   runtime_library_dirs = ssl_libs,
++                                   libraries = ['ssl', 'crypto'],
++                                   depends = ['socketmodule.h']), )
++        else:
++            missing.append('_ssl')
++
++        # find out which version of OpenSSL we have
++        openssl_ver = 0
++        openssl_ver_re = re.compile(
++            '^\s*#\s*define\s+OPENSSL_VERSION_NUMBER\s+(0x[0-9a-fA-F]+)' )
++        for ssl_inc_dir in inc_dirs + search_for_ssl_incs_in:
++            name = os.path.join(ssl_inc_dir, 'openssl', 'opensslv.h')
++            if os.path.isfile(name):
++                try:
++                    incfile = open(name, 'r')
++                    for line in incfile:
++                        m = openssl_ver_re.match(line)
++                        if m:
++                            openssl_ver = eval(m.group(1))
++                            break
++                except IOError:
++                    pass
++
++            # first version found is what we'll use (as the compiler should)
++            if openssl_ver:
++                break
++
++        #print 'openssl_ver = 0x%08x' % openssl_ver
++
++        if (ssl_incs is not None and
++            ssl_libs is not None and
++            openssl_ver >= 0x00907000):
++            # The _hashlib module wraps optimized implementations
++            # of hash functions from the OpenSSL library.
++            exts.append( Extension('_hashlib', ['_hashopenssl.c'],
++                                   include_dirs = ssl_incs,
++                                   library_dirs = ssl_libs,
++                                   libraries = ['ssl', 'crypto']) )
++            # these aren't strictly missing since they are unneeded.
++            #missing.extend(['_sha', '_md5'])
++        else:
++            # The _sha module implements the SHA1 hash algorithm.
++            exts.append( Extension('_sha', ['shamodule.c']) )
++            # The _md5 module implements the RSA Data Security, Inc. MD5
++            # Message-Digest Algorithm, described in RFC 1321.  The
++            # necessary files md5.c and md5.h are included here.
++            exts.append( Extension('_md5',
++                            sources = ['md5module.c', 'md5.c'],
++                            depends = ['md5.h']) )
++            missing.append('_hashlib')
++
++        if (openssl_ver < 0x00908000):
++            # OpenSSL doesn't do these until 0.9.8 so we'll bring our own hash
++            exts.append( Extension('_sha256', ['sha256module.c']) )
++            exts.append( Extension('_sha512', ['sha512module.c']) )
++
++        # Modules that provide persistent dictionary-like semantics.  You will
++        # probably want to arrange for at least one of them to be available on
++        # your machine, though none are defined by default because of library
++        # dependencies.  The Python module anydbm.py provides an
++        # implementation independent wrapper for these; dumbdbm.py provides
++        # similar functionality (but slower of course) implemented in Python.
++
++        # Sleepycat^WOracle Berkeley DB interface.
++        #  http://www.oracle.com/database/berkeley-db/db/index.html
++        #
++        # This requires the Sleepycat^WOracle DB code. The supported versions
++        # are set below.  Visit the URL above to download
++        # a release.  Most open source OSes come with one or more
++        # versions of BerkeleyDB already installed.
++
++        max_db_ver = (4, 7)
++        min_db_ver = (3, 3)
++        db_setup_debug = False   # verbose debug prints from this script?
++
++        def allow_db_ver(db_ver):
++            """Returns a boolean if the given BerkeleyDB version is acceptable.
++
++            Args:
++              db_ver: A tuple of the version to verify.
++            """
++            if not (min_db_ver <= db_ver <= max_db_ver):
++                return False
++            # Use this function to filter out known bad configurations.
++            if (4, 6) == db_ver[:2]:
++                # BerkeleyDB 4.6.x is not stable on many architectures.
++                arch = platform_machine()
++                if arch not in ('i386', 'i486', 'i586', 'i686',
++                                'x86_64', 'ia64'):
++                    return False
++            return True
++
++        def gen_db_minor_ver_nums(major):
++            if major == 4:
++                for x in range(max_db_ver[1]+1):
++                    if allow_db_ver((4, x)):
++                        yield x
++            elif major == 3:
++                for x in (3,):
++                    if allow_db_ver((3, x)):
++                        yield x
++            else:
++                raise ValueError("unknown major BerkeleyDB version", major)
++
++        # construct a list of paths to look for the header file in on
++        # top of the normal inc_dirs.
++        db_inc_paths = [
++            '/usr/include/db4',
++            '/usr/local/include/db4',
++            '/opt/sfw/include/db4',
++            '/usr/include/db3',
++            '/usr/local/include/db3',
++            '/opt/sfw/include/db3',
++            # Fink defaults (http://fink.sourceforge.net/)
++            '/sw/include/db4',
++            '/sw/include/db3',
++        ]
++        # 4.x minor number specific paths
++        for x in gen_db_minor_ver_nums(4):
++            db_inc_paths.append('/usr/include/db4%d' % x)
++            db_inc_paths.append('/usr/include/db4.%d' % x)
++            db_inc_paths.append('/usr/local/BerkeleyDB.4.%d/include' % x)
++            db_inc_paths.append('/usr/local/include/db4%d' % x)
++            db_inc_paths.append('/pkg/db-4.%d/include' % x)
++            db_inc_paths.append('/opt/db-4.%d/include' % x)
++            # MacPorts default (http://www.macports.org/)
++            db_inc_paths.append('/opt/local/include/db4%d' % x)
++        # 3.x minor number specific paths
++        for x in gen_db_minor_ver_nums(3):
++            db_inc_paths.append('/usr/include/db3%d' % x)
++            db_inc_paths.append('/usr/local/BerkeleyDB.3.%d/include' % x)
++            db_inc_paths.append('/usr/local/include/db3%d' % x)
++            db_inc_paths.append('/pkg/db-3.%d/include' % x)
++            db_inc_paths.append('/opt/db-3.%d/include' % x)
++
++        # Add some common subdirectories for Sleepycat DB to the list,
++        # based on the standard include directories. This way DB3/4 gets
++        # picked up when it is installed in a non-standard prefix and
++        # the user has added that prefix into inc_dirs.
++        std_variants = []
++        for dn in inc_dirs:
++            std_variants.append(os.path.join(dn, 'db3'))
++            std_variants.append(os.path.join(dn, 'db4'))
++            for x in gen_db_minor_ver_nums(4):
++                std_variants.append(os.path.join(dn, "db4%d"%x))
++                std_variants.append(os.path.join(dn, "db4.%d"%x))
++            for x in gen_db_minor_ver_nums(3):
++                std_variants.append(os.path.join(dn, "db3%d"%x))
++                std_variants.append(os.path.join(dn, "db3.%d"%x))
++
++        db_inc_paths = std_variants + db_inc_paths
++        db_inc_paths = [p for p in db_inc_paths if os.path.exists(p)]
++
++        db_ver_inc_map = {}
++
++        class db_found(Exception): pass
++        try:
++            # See whether there is a Sleepycat header in the standard
++            # search path.
++            for d in inc_dirs + db_inc_paths:
++                f = os.path.join(d, "db.h")
++                if db_setup_debug: print "db: looking for db.h in", f
++                if os.path.exists(f):
++                    f = open(f).read()
++                    m = re.search(r"#define\WDB_VERSION_MAJOR\W(\d+)", f)
++                    if m:
++                        db_major = int(m.group(1))
++                        m = re.search(r"#define\WDB_VERSION_MINOR\W(\d+)", f)
++                        db_minor = int(m.group(1))
++                        db_ver = (db_major, db_minor)
++
++                        # Avoid 4.6 prior to 4.6.21 due to a BerkeleyDB bug
++                        if db_ver == (4, 6):
++                            m = re.search(r"#define\WDB_VERSION_PATCH\W(\d+)", f)
++                            db_patch = int(m.group(1))
++                            if db_patch < 21:
++                                print "db.h:", db_ver, "patch", db_patch,
++                                print "being ignored (4.6.x must be >= 4.6.21)"
++                                continue
++
++                        if ( (not db_ver_inc_map.has_key(db_ver)) and
++                            allow_db_ver(db_ver) ):
++                            # save the include directory with the db.h version
++                            # (first occurrence only)
++                            db_ver_inc_map[db_ver] = d
++                            if db_setup_debug:
++                                print "db.h: found", db_ver, "in", d
++                        else:
++                            # we already found a header for this library version
++                            if db_setup_debug: print "db.h: ignoring", d
++                    else:
++                        # ignore this header, it didn't contain a version number
++                        if db_setup_debug:
++                            print "db.h: no version number version in", d
++
++            db_found_vers = db_ver_inc_map.keys()
++            db_found_vers.sort()
++
++            while db_found_vers:
++                db_ver = db_found_vers.pop()
++                db_incdir = db_ver_inc_map[db_ver]
++
++                # check lib directories parallel to the location of the header
++                db_dirs_to_check = [
++                    db_incdir.replace("include", 'lib64'),
++                    db_incdir.replace("include", 'lib'),
++                ]
++                db_dirs_to_check = filter(os.path.isdir, db_dirs_to_check)
++
++                # Look for a version specific db-X.Y before an ambiguoius dbX
++                # XXX should we -ever- look for a dbX name?  Do any
++                # systems really not name their library by version and
++                # symlink to more general names?
++                for dblib in (('db-%d.%d' % db_ver),
++                              ('db%d%d' % db_ver),
++                              ('db%d' % db_ver[0])):
++                    dblib_file = self.compiler.find_library_file(
++                                    db_dirs_to_check + lib_dirs, dblib )
++                    if dblib_file:
++                        dblib_dir = [ os.path.abspath(os.path.dirname(dblib_file)) ]
++                        raise db_found
++                    else:
++                        if db_setup_debug: print "db lib: ", dblib, "not found"
++
++        except db_found:
++            if db_setup_debug:
++                print "bsddb using BerkeleyDB lib:", db_ver, dblib
++                print "bsddb lib dir:", dblib_dir, " inc dir:", db_incdir
++            db_incs = [db_incdir]
++            dblibs = [dblib]
++            # We add the runtime_library_dirs argument because the
++            # BerkeleyDB lib we're linking against often isn't in the
++            # system dynamic library search path.  This is usually
++            # correct and most trouble free, but may cause problems in
++            # some unusual system configurations (e.g. the directory
++            # is on an NFS server that goes away).
++            exts.append(Extension('_bsddb', ['_bsddb.c'],
++                                  depends = ['bsddb.h'],
++                                  library_dirs=dblib_dir,
++                                  runtime_library_dirs=dblib_dir,
++                                  include_dirs=db_incs,
++                                  libraries=dblibs))
++        else:
++            if db_setup_debug: print "db: no appropriate library found"
++            db_incs = None
++            dblibs = []
++            dblib_dir = None
++            missing.append('_bsddb')
++
++        # The sqlite interface
++        sqlite_setup_debug = False   # verbose debug prints from this script?
++
++        # We hunt for #define SQLITE_VERSION "n.n.n"
++        # We need to find >= sqlite version 3.0.8
++        sqlite_incdir = sqlite_libdir = None
++        sqlite_inc_paths = [ '/usr/include',
++                             '/usr/include/sqlite',
++                             '/usr/include/sqlite3',
++                             '/usr/local/include',
++                             '/usr/local/include/sqlite',
++                             '/usr/local/include/sqlite3',
++                           ]
++        MIN_SQLITE_VERSION_NUMBER = (3, 0, 8)
++        MIN_SQLITE_VERSION = ".".join([str(x)
++                                    for x in MIN_SQLITE_VERSION_NUMBER])
++
++        # Scan the default include directories before the SQLite specific
++        # ones. This allows one to override the copy of sqlite on OSX,
++        # where /usr/include contains an old version of sqlite.
++        for d in inc_dirs + sqlite_inc_paths:
++            f = os.path.join(d, "sqlite3.h")
++            if os.path.exists(f):
++                if sqlite_setup_debug: print "sqlite: found %s"%f
++                incf = open(f).read()
++                m = re.search(
++                    r'\s*.*#\s*.*define\s.*SQLITE_VERSION\W*"(.*)"', incf)
++                if m:
++                    sqlite_version = m.group(1)
++                    sqlite_version_tuple = tuple([int(x)
++                                        for x in sqlite_version.split(".")])
++                    if sqlite_version_tuple >= MIN_SQLITE_VERSION_NUMBER:
++                        # we win!
++                        if sqlite_setup_debug:
++                            print "%s/sqlite3.h: version %s"%(d, sqlite_version)
++                        sqlite_incdir = d
++                        break
++                    else:
++                        if sqlite_setup_debug:
++                            print "%s: version %d is too old, need >= %s"%(d,
++                                        sqlite_version, MIN_SQLITE_VERSION)
++                elif sqlite_setup_debug:
++                    print "sqlite: %s had no SQLITE_VERSION"%(f,)
++
++        if sqlite_incdir:
++            sqlite_dirs_to_check = [
++                os.path.join(sqlite_incdir, '..', 'lib64'),
++                os.path.join(sqlite_incdir, '..', 'lib'),
++                os.path.join(sqlite_incdir, '..', '..', 'lib64'),
++                os.path.join(sqlite_incdir, '..', '..', 'lib'),
++            ]
++            sqlite_libfile = self.compiler.find_library_file(
++                                sqlite_dirs_to_check + lib_dirs, 'sqlite3')
++            if sqlite_libfile:
++                sqlite_libdir = [os.path.abspath(os.path.dirname(sqlite_libfile))]
++
++        if sqlite_incdir and sqlite_libdir:
++            sqlite_srcs = ['_sqlite/cache.c',
++                '_sqlite/connection.c',
++                '_sqlite/cursor.c',
++                '_sqlite/microprotocols.c',
++                '_sqlite/module.c',
++                '_sqlite/prepare_protocol.c',
++                '_sqlite/row.c',
++                '_sqlite/statement.c',
++                '_sqlite/util.c', ]
++
++            sqlite_defines = []
++            if sys.platform != "win32":
++                sqlite_defines.append(('MODULE_NAME', '"sqlite3"'))
++            else:
++                sqlite_defines.append(('MODULE_NAME', '\\"sqlite3\\"'))
++
++
++            if sys.platform == 'darwin':
++                # In every directory on the search path search for a dynamic
++                # library and then a static library, instead of first looking
++                # for dynamic libraries on the entiry path.
++                # This way a staticly linked custom sqlite gets picked up
++                # before the dynamic library in /usr/lib.
++                sqlite_extra_link_args = ('-Wl,-search_paths_first',)
++            else:
++                sqlite_extra_link_args = ()
++
++            exts.append(Extension('_sqlite3', sqlite_srcs,
++                                  define_macros=sqlite_defines,
++                                  include_dirs=["Modules/_sqlite",
++                                                sqlite_incdir],
++                                  library_dirs=sqlite_libdir,
++                                  runtime_library_dirs=sqlite_libdir,
++                                  extra_link_args=sqlite_extra_link_args,
++                                  libraries=["sqlite3",]))
++        else:
++            missing.append('_sqlite3')
++
++        # Look for Berkeley db 1.85.   Note that it is built as a different
++        # module name so it can be included even when later versions are
++        # available.  A very restrictive search is performed to avoid
++        # accidentally building this module with a later version of the
++        # underlying db library.  May BSD-ish Unixes incorporate db 1.85
++        # symbols into libc and place the include file in /usr/include.
++        #
++        # If the better bsddb library can be built (db_incs is defined)
++        # we do not build this one.  Otherwise this build will pick up
++        # the more recent berkeleydb's db.h file first in the include path
++        # when attempting to compile and it will fail.
++        f = "/usr/include/db.h"
++        if os.path.exists(f) and not db_incs:
++            data = open(f).read()
++            m = re.search(r"#s*define\s+HASHVERSION\s+2\s*", data)
++            if m is not None:
++                # bingo - old version used hash file format version 2
++                ### XXX this should be fixed to not be platform-dependent
++                ### but I don't have direct access to an osf1 platform and
++                ### seemed to be muffing the search somehow
++                libraries = platform == "osf1" and ['db'] or None
++                if libraries is not None:
++                    exts.append(Extension('bsddb185', ['bsddbmodule.c'],
++                                          libraries=libraries))
++                else:
++                    exts.append(Extension('bsddb185', ['bsddbmodule.c']))
++            else:
++                missing.append('bsddb185')
++        else:
++            missing.append('bsddb185')
++
++        # The standard Unix dbm module:
++        if platform not in ['cygwin']:
++            if find_file("ndbm.h", inc_dirs, []) is not None:
++                # Some systems have -lndbm, others don't
++                if self.compiler.find_library_file(lib_dirs, 'ndbm'):
++                    ndbm_libs = ['ndbm']
++                else:
++                    ndbm_libs = []
++                exts.append( Extension('dbm', ['dbmmodule.c'],
++                                       define_macros=[('HAVE_NDBM_H',None)],
++                                       libraries = ndbm_libs ) )
++            elif self.compiler.find_library_file(lib_dirs, 'gdbm'):
++                gdbm_libs = ['gdbm']
++                if self.compiler.find_library_file(lib_dirs, 'gdbm_compat'):
++                    gdbm_libs.append('gdbm_compat')
++                if find_file("gdbm/ndbm.h", inc_dirs, []) is not None:
++                    exts.append( Extension(
++                        'dbm', ['dbmmodule.c'],
++                        define_macros=[('HAVE_GDBM_NDBM_H',None)],
++                        libraries = gdbm_libs ) )
++                elif find_file("gdbm-ndbm.h", inc_dirs, []) is not None:
++                    exts.append( Extension(
++                        'dbm', ['dbmmodule.c'],
++                        define_macros=[('HAVE_GDBM_DASH_NDBM_H',None)],
++                        libraries = gdbm_libs ) )
++                else:
++                    missing.append('dbm')
++            elif db_incs is not None:
++                exts.append( Extension('dbm', ['dbmmodule.c'],
++                                       library_dirs=dblib_dir,
++                                       runtime_library_dirs=dblib_dir,
++                                       include_dirs=db_incs,
++                                       define_macros=[('HAVE_BERKDB_H',None),
++                                                      ('DB_DBM_HSEARCH',None)],
++                                       libraries=dblibs))
++            else:
++                missing.append('dbm')
++
++        # Anthony Baxter's gdbm module.  GNU dbm(3) will require -lgdbm:
++        if (self.compiler.find_library_file(lib_dirs, 'gdbm')):
++            exts.append( Extension('gdbm', ['gdbmmodule.c'],
++                                   libraries = ['gdbm'] ) )
++        else:
++            missing.append('gdbm')
++
++        # Unix-only modules
++        if platform not in ['mac', 'win32']:
++            # Steen Lumholt's termios module
++            exts.append( Extension('termios', ['termios.c']) )
++            # Jeremy Hylton's rlimit interface
++            if platform not in ['atheos']:
++                exts.append( Extension('resource', ['resource.c']) )
++            else:
++                missing.append('resource')
++
++            # Sun yellow pages. Some systems have the functions in libc.
++            if platform not in ['cygwin', 'atheos', 'qnx6']:
++                if (self.compiler.find_library_file(lib_dirs, 'nsl')):
++                    libs = ['nsl']
++                else:
++                    libs = []
++                exts.append( Extension('nis', ['nismodule.c'],
++                                       libraries = libs) )
++            else:
++                missing.append('nis')
++        else:
++            missing.extend(['nis', 'resource', 'termios'])
++
++        # Curses support, requiring the System V version of curses, often
++        # provided by the ncurses library.
++        curses_lib_dirs = []
++        curses_inc_dirs = []
++        if platform == 'sunos5':
++            # look for ncurses in /usr/gnu on Solaris
++            curses_inc_dirs.append('/usr/include/ncurses')
++            curses_lib_dirs.append('/usr/gnu/lib')
++            curses_lib_dirs.append('/usr/gnu/lib/amd64')
++            curses_lib_dirs.append('/usr/gnu/lib/sparcv9')
++        panel_library = 'panel'
++        if (self.compiler.find_library_file(lib_dirs, 'ncursesw')):
++            curses_libs = ['ncursesw']
++            # Bug 1464056: If _curses.so links with ncursesw,
++            # _curses_panel.so must link with panelw.
++            panel_library = 'panelw'
++            exts.append( Extension('_curses', ['_cursesmodule.c'],
++                                   libraries = curses_libs) )
++        elif (self.compiler.find_library_file(lib_dirs + curses_lib_dirs, 'ncurses')):
++            curses_libs = ['ncurses']
++            exts.append( Extension('_curses', ['_cursesmodule.c'],
++                                   libraries = curses_libs,
++                                   library_dirs = curses_lib_dirs,
++                                   runtime_library_dirs = curses_lib_dirs,
++                                   include_dirs = curses_inc_dirs ) )
++        elif (self.compiler.find_library_file(lib_dirs, 'curses')
++              and platform != 'darwin'):
++                # OSX has an old Berkeley curses, not good enough for
++                # the _curses module.
++            if (self.compiler.find_library_file(lib_dirs, 'terminfo')):
++                curses_libs = ['curses', 'terminfo']
++            elif (self.compiler.find_library_file(lib_dirs, 'termcap')):
++                curses_libs = ['curses', 'termcap']
++            else:
++                curses_libs = ['curses']
++
++            exts.append( Extension('_curses', ['_cursesmodule.c'],
++                                   libraries = curses_libs) )
++        else:
++            missing.append('_curses')
++
++        # If the curses module is enabled, check for the panel module
++        if (module_enabled(exts, '_curses') and
++            self.compiler.find_library_file(lib_dirs + curses_lib_dirs, panel_library)):
++            exts.append( Extension('_curses_panel', ['_curses_panel.c'],
++                                   libraries = [panel_library] + curses_libs,
++                                   include_dirs = curses_inc_dirs,
++                                   library_dirs = curses_lib_dirs,
++                                   runtime_library_dirs = curses_lib_dirs ) )
++        else:
++            missing.append('_curses_panel')
++
++        # Andrew Kuchling's zlib module.  Note that some versions of zlib
++        # 1.1.3 have security problems.  See CERT Advisory CA-2002-07:
++        # http://www.cert.org/advisories/CA-2002-07.html
++        #
++        # zlib 1.1.4 is fixed, but at least one vendor (RedHat) has decided to
++        # patch its zlib 1.1.3 package instead of upgrading to 1.1.4.  For
++        # now, we still accept 1.1.3, because we think it's difficult to
++        # exploit this in Python, and we'd rather make it RedHat's problem
++        # than our problem <wink>.
++        #
++        # You can upgrade zlib to version 1.1.4 yourself by going to
++        # http://www.gzip.org/zlib/
++        zlib_inc = find_file('zlib.h', [], inc_dirs)
++        have_zlib = False
++        if zlib_inc is not None:
++            zlib_h = zlib_inc[0] + '/zlib.h'
++            version = '"0.0.0"'
++            version_req = '"1.1.3"'
++            fp = open(zlib_h)
++            while 1:
++                line = fp.readline()
++                if not line:
++                    break
++                if line.startswith('#define ZLIB_VERSION'):
++                    version = line.split()[2]
++                    break
++            if version >= version_req:
++                if (self.compiler.find_library_file(lib_dirs, 'z')):
++                    if sys.platform == "darwin":
++                        zlib_extra_link_args = ('-Wl,-search_paths_first',)
++                    else:
++                        zlib_extra_link_args = ()
++                    exts.append( Extension('zlib', ['zlibmodule.c'],
++                                           libraries = ['z'],
++                                           extra_link_args = zlib_extra_link_args))
++                    have_zlib = True
++                else:
++                    missing.append('zlib')
++            else:
++                missing.append('zlib')
++        else:
++            missing.append('zlib')
++
++        # Helper module for various ascii-encoders.  Uses zlib for an optimized
++        # crc32 if we have it.  Otherwise binascii uses its own.
++        if have_zlib:
++            extra_compile_args = ['-DUSE_ZLIB_CRC32']
++            libraries = ['z']
++            extra_link_args = zlib_extra_link_args
++        else:
++            extra_compile_args = []
++            libraries = []
++            extra_link_args = []
++        exts.append( Extension('binascii', ['binascii.c'],
++                               extra_compile_args = extra_compile_args,
++                               libraries = libraries,
++                               extra_link_args = extra_link_args) )
++
++        # Gustavo Niemeyer's bz2 module.
++        if (self.compiler.find_library_file(lib_dirs, 'bz2')):
++            if sys.platform == "darwin":
++                bz2_extra_link_args = ('-Wl,-search_paths_first',)
++            else:
++                bz2_extra_link_args = ()
++            exts.append( Extension('bz2', ['bz2module.c'],
++                                   libraries = ['bz2'],
++                                   extra_link_args = bz2_extra_link_args) )
++        else:
++            missing.append('bz2')
++
++        # Interface to the Expat XML parser
++        #
++        # Expat was written by James Clark and is now maintained by a
++        # group of developers on SourceForge; see www.libexpat.org for
++        # more information.  The pyexpat module was written by Paul
++        # Prescod after a prototype by Jack Jansen.  The Expat source
++        # is included in Modules/expat/.  Usage of a system
++        # shared libexpat.so/expat.dll is not advised.
++        #
++        # More information on Expat can be found at www.libexpat.org.
++        #
++        expatinc = os.path.join(os.getcwd(), srcdir, 'Modules', 'expat')
++        define_macros = [
++            ('HAVE_EXPAT_CONFIG_H', '1'),
++        ]
++
++        exts.append(Extension('pyexpat',
++                              define_macros = define_macros,
++                              include_dirs = [expatinc],
++                              sources = ['pyexpat.c',
++                                         'expat/xmlparse.c',
++                                         'expat/xmlrole.c',
++                                         'expat/xmltok.c',
++                                         ],
++                              ))
++
++        # Fredrik Lundh's cElementTree module.  Note that this also
++        # uses expat (via the CAPI hook in pyexpat).
++
++        if os.path.isfile(os.path.join(srcdir, 'Modules', '_elementtree.c')):
++            define_macros.append(('USE_PYEXPAT_CAPI', None))
++            exts.append(Extension('_elementtree',
++                                  define_macros = define_macros,
++                                  include_dirs = [expatinc],
++                                  sources = ['_elementtree.c'],
++                                  ))
++        else:
++            missing.append('_elementtree')
++
++        # Hye-Shik Chang's CJKCodecs modules.
++        if have_unicode:
++            exts.append(Extension('_multibytecodec',
++                                  ['cjkcodecs/multibytecodec.c']))
++            for loc in ('kr', 'jp', 'cn', 'tw', 'hk', 'iso2022'):
++                exts.append(Extension('_codecs_%s' % loc,
++                                      ['cjkcodecs/_codecs_%s.c' % loc]))
++        else:
++            missing.append('_multibytecodec')
++            for loc in ('kr', 'jp', 'cn', 'tw', 'hk', 'iso2022'):
++                missing.append('_codecs_%s' % loc)
++
++        # Dynamic loading module
++        if sys.maxint == 0x7fffffff:
++            # This requires sizeof(int) == sizeof(long) == sizeof(char*)
++            dl_inc = find_file('dlfcn.h', [], inc_dirs)
++            if (dl_inc is not None) and (platform not in ['atheos']):
++                exts.append( Extension('dl', ['dlmodule.c']) )
++            else:
++                missing.append('dl')
++        else:
++            missing.append('dl')
++
++        # Thomas Heller's _ctypes module
++        self.detect_ctypes(inc_dirs, lib_dirs)
++
++        # Richard Oudkerk's multiprocessing module
++        if platform == 'win32':             # Windows
++            macros = dict()
++            libraries = ['ws2_32']
++
++        elif platform == 'darwin':          # Mac OSX
++            macros = dict(
++                HAVE_SEM_OPEN=1,
++                HAVE_SEM_TIMEDWAIT=0,
++                HAVE_FD_TRANSFER=1,
++                HAVE_BROKEN_SEM_GETVALUE=1
++                )
++            libraries = []
++
++        elif platform == 'cygwin':          # Cygwin
++            macros = dict(
++                HAVE_SEM_OPEN=1,
++                HAVE_SEM_TIMEDWAIT=1,
++                HAVE_FD_TRANSFER=0,
++                HAVE_BROKEN_SEM_UNLINK=1
++                )
++            libraries = []
++
++        elif platform in ('freebsd4', 'freebsd5', 'freebsd6', 'freebsd7', 'freebsd8'):
++            # FreeBSD's P1003.1b semaphore support is very experimental
++            # and has many known problems. (as of June 2008)
++            macros = dict(                  # FreeBSD
++                HAVE_SEM_OPEN=0,
++                HAVE_SEM_TIMEDWAIT=0,
++                HAVE_FD_TRANSFER=1,
++                )
++            libraries = []
++
++        elif platform.startswith('openbsd'):
++            macros = dict(                  # OpenBSD
++                HAVE_SEM_OPEN=0,            # Not implemented
++                HAVE_SEM_TIMEDWAIT=0,
++                HAVE_FD_TRANSFER=1,
++                )
++            libraries = []
++
++        elif platform.startswith('netbsd'):
++            macros = dict(                  # at least NetBSD 5
++                HAVE_SEM_OPEN=1,
++                HAVE_SEM_TIMEDWAIT=0,
++                HAVE_FD_TRANSFER=1,
++                HAVE_BROKEN_SEM_GETVALUE=1
++                )
++            libraries = []
++
++        else:                                   # Linux and other unices
++            macros = dict(
++                HAVE_SEM_OPEN=1,
++                HAVE_SEM_TIMEDWAIT=1,
++                HAVE_FD_TRANSFER=1
++                )
++            libraries = ['rt']
++
++        if platform == 'win32':
++            multiprocessing_srcs = [ '_multiprocessing/multiprocessing.c',
++                                     '_multiprocessing/semaphore.c',
++                                     '_multiprocessing/pipe_connection.c',
++                                     '_multiprocessing/socket_connection.c',
++                                     '_multiprocessing/win32_functions.c'
++                                   ]
++
++        else:
++            multiprocessing_srcs = [ '_multiprocessing/multiprocessing.c',
++                                     '_multiprocessing/socket_connection.c'
++                                   ]
++
++            if macros.get('HAVE_SEM_OPEN', False):
++                multiprocessing_srcs.append('_multiprocessing/semaphore.c')
++
++        multiproc_libs = []
++        if platform == 'sunos5':
++            multiproc_libs = [ "xnet" ]
++
++        exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
++                                 define_macros=macros.items(),
++                                 libraries=multiproc_libs,
++                                 include_dirs=["Modules/_multiprocessing"]))
++        # End multiprocessing
++
++
++        # Platform-specific libraries
++        if platform == 'linux2':
++            # Linux-specific modules
++            exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) )
++        else:
++            missing.append('linuxaudiodev')
++
++        if platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
++                        'freebsd7', 'freebsd8'):
++            exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) )
++        else:
++            missing.append('ossaudiodev')
++
++        if platform == 'sunos5':
++            # SunOS specific modules
++            exts.append( Extension('sunaudiodev', ['sunaudiodev.c']) )
++        else:
++            missing.append('sunaudiodev')
++
++        if platform == 'darwin':
++            # _scproxy
++            exts.append(Extension("_scproxy", [os.path.join(srcdir, "Mac/Modules/_scproxy.c")],
++                extra_link_args= [
++                    '-framework', 'SystemConfiguration',
++                    '-framework', 'CoreFoundation'
++                ]))
++
++
++        if platform == 'darwin' and ("--disable-toolbox-glue" not in
++                sysconfig.get_config_var("CONFIG_ARGS")):
++
++            if os.uname()[2] > '8.':
++                # We're on Mac OS X 10.4 or later, the compiler should
++                # support '-Wno-deprecated-declarations'. This will
++                # surpress deprecation warnings for the Carbon extensions,
++                # these extensions wrap the Carbon APIs and even those
++                # parts that are deprecated.
++                carbon_extra_compile_args = ['-Wno-deprecated-declarations']
++            else:
++                carbon_extra_compile_args = []
++
++            # Mac OS X specific modules.
++            def macSrcExists(name1, name2=''):
++                if not name1:
++                    return None
++                names = (name1,)
++                if name2:
++                    names = (name1, name2)
++                path = os.path.join(srcdir, 'Mac', 'Modules', *names)
++                return os.path.exists(path)
++
++            def addMacExtension(name, kwds, extra_srcs=[]):
++                dirname = ''
++                if name[0] == '_':
++                    dirname = name[1:].lower()
++                cname = name + '.c'
++                cmodulename = name + 'module.c'
++                # Check for NNN.c, NNNmodule.c, _nnn/NNN.c, _nnn/NNNmodule.c
++                if macSrcExists(cname):
++                    srcs = [cname]
++                elif macSrcExists(cmodulename):
++                    srcs = [cmodulename]
++                elif macSrcExists(dirname, cname):
++                    # XXX(nnorwitz): If all the names ended with module, we
++                    # wouldn't need this condition.  ibcarbon is the only one.
++                    srcs = [os.path.join(dirname, cname)]
++                elif macSrcExists(dirname, cmodulename):
++                    srcs = [os.path.join(dirname, cmodulename)]
++                else:
++                    raise RuntimeError("%s not found" % name)
++
++                # Here's the whole point:  add the extension with sources
++                exts.append(Extension(name, srcs + extra_srcs, **kwds))
++
++            # Core Foundation
++            core_kwds = {'extra_compile_args': carbon_extra_compile_args,
++                         'extra_link_args': ['-framework', 'CoreFoundation'],
++                        }
++            addMacExtension('_CF', core_kwds, ['cf/pycfbridge.c'])
++            addMacExtension('autoGIL', core_kwds)
++
++
++
++            # Carbon
++            carbon_kwds = {'extra_compile_args': carbon_extra_compile_args,
++                           'extra_link_args': ['-framework', 'Carbon'],
++                          }
++            CARBON_EXTS = ['ColorPicker', 'gestalt', 'MacOS', 'Nav',
++                           'OSATerminology', 'icglue',
++                           # All these are in subdirs
++                           '_AE', '_AH', '_App', '_CarbonEvt', '_Cm', '_Ctl',
++                           '_Dlg', '_Drag', '_Evt', '_File', '_Folder', '_Fm',
++                           '_Help', '_Icn', '_IBCarbon', '_List',
++                           '_Menu', '_Mlte', '_OSA', '_Res', '_Qd', '_Qdoffs',
++                           '_Scrap', '_Snd', '_TE',
++                          ]
++            for name in CARBON_EXTS:
++                addMacExtension(name, carbon_kwds)
++
++            # Workaround for a bug in the version of gcc shipped with Xcode 3.
++            # The _Win extension should build just like the other Carbon extensions, but
++            # this actually results in a hard crash of the linker.
++            #
++            if '-arch ppc64' in cflags and '-arch ppc' in cflags:
++                win_kwds = {'extra_compile_args': carbon_extra_compile_args + ['-arch', 'i386', '-arch', 'ppc'],
++                               'extra_link_args': ['-framework', 'Carbon', '-arch', 'i386', '-arch', 'ppc'],
++                           }
++                addMacExtension('_Win', win_kwds)
++            else:
++                addMacExtension('_Win', carbon_kwds)
++
++
++            # Application Services & QuickTime
++            app_kwds = {'extra_compile_args': carbon_extra_compile_args,
++                        'extra_link_args': ['-framework','ApplicationServices'],
++                       }
++            addMacExtension('_Launch', app_kwds)
++            addMacExtension('_CG', app_kwds)
++
++            exts.append( Extension('_Qt', ['qt/_Qtmodule.c'],
++                        extra_compile_args=carbon_extra_compile_args,
++                        extra_link_args=['-framework', 'QuickTime',
++                                     '-framework', 'Carbon']) )
++
++
++        self.extensions.extend(exts)
++
++        # Call the method for detecting whether _tkinter can be compiled
++        self.detect_tkinter(inc_dirs, lib_dirs)
++
++        if '_tkinter' not in [e.name for e in self.extensions]:
++            missing.append('_tkinter')
++
++        return missing
++
++    def detect_tkinter_darwin(self, inc_dirs, lib_dirs):
++        # The _tkinter module, using frameworks. Since frameworks are quite
++        # different the UNIX search logic is not sharable.
++        from os.path import join, exists
++        framework_dirs = [
++            '/Library/Frameworks',
++            '/System/Library/Frameworks/',
++            join(os.getenv('HOME'), '/Library/Frameworks')
++        ]
++
++        # Find the directory that contains the Tcl.framework and Tk.framework
++        # bundles.
++        # XXX distutils should support -F!
++        for F in framework_dirs:
++            # both Tcl.framework and Tk.framework should be present
++            for fw in 'Tcl', 'Tk':
++                if not exists(join(F, fw + '.framework')):
++                    break
++            else:
++                # ok, F is now directory with both frameworks. Continure
++                # building
++                break
++        else:
++            # Tk and Tcl frameworks not found. Normal "unix" tkinter search
++            # will now resume.
++            return 0
++
++        # For 8.4a2, we must add -I options that point inside the Tcl and Tk
++        # frameworks. In later release we should hopefully be able to pass
++        # the -F option to gcc, which specifies a framework lookup path.
++        #
++        include_dirs = [
++            join(F, fw + '.framework', H)
++            for fw in 'Tcl', 'Tk'
++            for H in 'Headers', 'Versions/Current/PrivateHeaders'
++        ]
++
++        # 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')
++        frameworks = ['-framework', 'Tcl', '-framework', 'Tk']
++
++        # All existing framework builds of Tcl/Tk don't support 64-bit
++        # architectures.
++        cflags = sysconfig.get_config_vars('CFLAGS')[0]
++        archs = re.findall('-arch\s+(\w+)', cflags)
++        fp = os.popen("file %s/Tk.framework/Tk | grep 'for architecture'"%(F,))
++        detected_archs = []
++        for ln in fp:
++            a = ln.split()[-1]
++            if a in archs:
++                detected_archs.append(ln.split()[-1])
++        fp.close()
++
++        for a in detected_archs:
++            frameworks.append('-arch')
++            frameworks.append(a)
++
++        ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
++                        define_macros=[('WITH_APPINIT', 1)],
++                        include_dirs = include_dirs,
++                        libraries = [],
++                        extra_compile_args = frameworks[2:],
++                        extra_link_args = frameworks,
++                        )
++        self.extensions.append(ext)
++        return 1
++
++
++    def detect_tkinter(self, inc_dirs, lib_dirs):
++        # The _tkinter module.
++
++        # Rather than complicate the code below, detecting and building
++        # AquaTk is a separate method. Only one Tkinter will be built on
++        # Darwin - either AquaTk, if it is found, or X11 based Tk.
++        platform = self.get_platform()
++        if (platform == 'darwin' and
++            self.detect_tkinter_darwin(inc_dirs, lib_dirs)):
++            return
++
++        # Assume we haven't found any of the libraries or include files
++        # The versions with dots are used on Unix, and the versions without
++        # dots on Windows, for detection by cygwin.
++        added_lib_dirs = []
++        tcl_tk_lib_dirs = ['/usr/sfw/lib']
++        tcl_tk_inc_dirs = ['/usr/sfw/include']
++        tcllib = tklib = tcl_includes = tk_includes = None
++        for version in ['8.5', '85', '8.4', '84', '8.3', '83', '8.2',
++                        '82', '8.1', '81', '8.0', '80']:
++            tklib = self.compiler.find_library_file(lib_dirs, 'tk' + version, tcl_tk_lib_dirs)
++            tcllib = self.compiler.find_library_file(lib_dirs, 'tcl' + version, tcl_tk_lib_dirs)
++            if tklib and tcllib:
++                # Exit the loop when we've found the Tcl/Tk libraries
++                break
++
++            tklib = self.compiler.find_library_file(tcl_tk_lib_dirs, 'tk' + version)
++            tcllib = self.compiler.find_library_file(tcl_tk_lib_dirs, 'tcl' + version)
++            if tklib and tcllib:
++                # found the libs in a non-standard dir
++                added_lib_dirs.append(os.path.dirname(tcllib))
++                # Exit the loop when we've found the Tcl/Tk libraries
++                break
++
++        # Now check for the header files
++        if tklib and tcllib:
++            # Check for the include files on Debian and {Free,Open}BSD, where
++            # they're put in /usr/include/{tcl,tk}X.Y
++            dotversion = version
++            if '.' not in dotversion and "bsd" in sys.platform.lower():
++                # OpenBSD and FreeBSD use Tcl/Tk library names like libtcl83.a,
++                # but the include subdirs are named like .../include/tcl8.3.
++                dotversion = dotversion[:-1] + '.' + dotversion[-1]
++            tcl_include_sub = []
++            tk_include_sub = []
++            for dir in inc_dirs:
++                tcl_include_sub += [dir + os.sep + "tcl" + dotversion]
++                tk_include_sub += [dir + os.sep + "tk" + dotversion]
++            tcl_include_sub += tcl_tk_inc_dirs
++            tk_include_sub += tcl_include_sub
++            tcl_includes = find_file('tcl.h', inc_dirs, tcl_include_sub)
++            tk_includes = find_file('tk.h', inc_dirs, tk_include_sub)
++
++        if (tcllib is None or tklib is None or
++            tcl_includes is None or tk_includes is None):
++            self.announce("INFO: Can't locate Tcl/Tk libs and/or headers", 2)
++            return
++
++        # OK... everything seems to be present for Tcl/Tk.
++
++        include_dirs = [] ; libs = [] ; defs = [] ; added_lib_dirs = []
++        for dir in tcl_includes + tk_includes:
++            if dir not in include_dirs:
++                include_dirs.append(dir)
++
++        # Check for various platform-specific directories
++        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:
++            # Assume default location for X11
++            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':
++            x11_inc = find_file('X11/Xlib.h', [], include_dirs)
++            if x11_inc is None:
++                return
++
++        # Check for BLT extension
++        if self.compiler.find_library_file(lib_dirs + added_lib_dirs,
++                                           'BLT8.0'):
++            defs.append( ('WITH_BLT', 1) )
++            libs.append('BLT8.0')
++        elif self.compiler.find_library_file(lib_dirs + added_lib_dirs,
++                                           'BLT'):
++            defs.append( ('WITH_BLT', 1) )
++            libs.append('BLT')
++
++        # Add the Tcl/Tk libraries
++        libs.append('tk'+ version)
++        libs.append('tcl'+ version)
++
++        if platform in ['aix3', 'aix4']:
++            libs.append('ld')
++
++        # Finally, link with the X11 libraries (not appropriate on cygwin)
++        if platform != "cygwin":
++            libs.append('X11')
++
++        ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
++                        define_macros=[('WITH_APPINIT', 1)] + defs,
++                        include_dirs = include_dirs,
++                        libraries = libs,
++                        library_dirs = added_lib_dirs,
++                        runtime_library_dirs = added_lib_dirs
++                        )
++        self.extensions.append(ext)
++
++##         # Uncomment these lines if you want to play with xxmodule.c
++##         ext = Extension('xx', ['xxmodule.c'])
++##         self.extensions.append(ext)
++
++        # XXX handle these, but how to detect?
++        # *** Uncomment and edit for PIL (TkImaging) extension only:
++        #       -DWITH_PIL -I../Extensions/Imaging/libImaging  tkImaging.c \
++        # *** Uncomment and edit for TOGL extension only:
++        #       -DWITH_TOGL togl.c \
++        # *** Uncomment these for TOGL extension only:
++        #       -lGL -lGLU -lXext -lXmu \
++
++    def configure_ctypes_darwin(self, ext):
++        # Darwin (OS X) uses preconfigured files, in
++        # the Modules/_ctypes/libffi_osx directory.
++        (srcdir,) = sysconfig.get_config_vars('srcdir')
++        ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules',
++                                                  '_ctypes', 'libffi_osx'))
++        sources = [os.path.join(ffi_srcdir, p)
++                   for p in ['ffi.c',
++                             'x86/darwin64.S',
++                             'x86/x86-darwin.S',
++                             'x86/x86-ffi_darwin.c',
++                             'x86/x86-ffi64.c',
++                             'powerpc/ppc-darwin.S',
++                             'powerpc/ppc-darwin_closure.S',
++                             'powerpc/ppc-ffi_darwin.c',
++                             'powerpc/ppc64-darwin_closure.S',
++                             ]]
++
++        # Add .S (preprocessed assembly) to C compiler source extensions.
++        self.compiler.src_extensions.append('.S')
++
++        include_dirs = [os.path.join(ffi_srcdir, 'include'),
++                        os.path.join(ffi_srcdir, 'powerpc')]
++        ext.include_dirs.extend(include_dirs)
++        ext.sources.extend(sources)
++        return True
++
++    def configure_ctypes(self, ext):
++        if not self.use_system_libffi:
++            if sys.platform == 'darwin':
++                return self.configure_ctypes_darwin(ext)
++
++            (srcdir,) = sysconfig.get_config_vars('srcdir')
++            ffi_builddir = os.path.join(self.build_temp, 'libffi')
++            ffi_srcdir = os.path.abspath(os.path.join(srcdir, 'Modules',
++                                         '_ctypes', 'libffi'))
++            ffi_configfile = os.path.join(ffi_builddir, 'fficonfig.py')
++
++            from distutils.dep_util import newer_group
++
++            config_sources = [os.path.join(ffi_srcdir, fname)
++                              for fname in os.listdir(ffi_srcdir)
++                              if os.path.isfile(os.path.join(ffi_srcdir, fname))]
++            if self.force or newer_group(config_sources,
++                                         ffi_configfile):
++                from distutils.dir_util import mkpath
++                mkpath(ffi_builddir)
++                config_args = []
++
++                # Pass empty CFLAGS because we'll just append the resulting
++                # CFLAGS to Python's; -g or -O2 is to be avoided.
++                cmd = "cd %s && env CFLAGS='' '%s/configure' %s" \
++                      % (ffi_builddir, ffi_srcdir, " ".join(config_args))
++
++                res = os.system(cmd)
++                if res or not os.path.exists(ffi_configfile):
++                    print "Failed to configure _ctypes module"
++                    return False
++
++            fficonfig = {}
++            execfile(ffi_configfile, globals(), fficonfig)
++            ffi_srcdir = os.path.join(fficonfig['ffi_srcdir'], 'src')
++
++            # Add .S (preprocessed assembly) to C compiler source extensions.
++            self.compiler.src_extensions.append('.S')
++
++            include_dirs = [os.path.join(ffi_builddir, 'include'),
++                            ffi_builddir, ffi_srcdir]
++            extra_compile_args = fficonfig['ffi_cflags'].split()
++
++            ext.sources.extend(fficonfig['ffi_sources'])
++            ext.include_dirs.extend(include_dirs)
++            ext.extra_compile_args.extend(extra_compile_args)
++        return True
++
++    def detect_ctypes(self, inc_dirs, lib_dirs):
++        self.use_system_libffi = False
++        include_dirs = []
++        extra_compile_args = []
++        extra_link_args = []
++        sources = ['_ctypes/_ctypes.c',
++                   '_ctypes/callbacks.c',
++                   '_ctypes/callproc.c',
++                   '_ctypes/stgdict.c',
++                   '_ctypes/cfield.c',
++                   '_ctypes/malloc_closure.c']
++        depends = ['_ctypes/ctypes.h']
++
++        if sys.platform == 'darwin':
++            sources.append('_ctypes/darwin/dlfcn_simple.c')
++            extra_compile_args.append('-DMACOSX')
++            include_dirs.append('_ctypes/darwin')
++# XXX Is this still needed?
++##            extra_link_args.extend(['-read_only_relocs', 'warning'])
++
++        elif sys.platform == 'sunos5':
++            # XXX This shouldn't be necessary; it appears that some
++            # of the assembler code is non-PIC (i.e. it has relocations
++            # when it shouldn't. The proper fix would be to rewrite
++            # the assembler code to be PIC.
++            # This only works with GCC; the Sun compiler likely refuses
++            # this option. If you want to compile ctypes with the Sun
++            # compiler, please research a proper solution, instead of
++            # finding some -z option for the Sun compiler.
++            extra_link_args.append('-mimpure-text')
++
++        elif sys.platform.startswith('hp-ux'):
++            extra_link_args.append('-fPIC')
++
++        ext = Extension('_ctypes',
++                        include_dirs=include_dirs,
++                        extra_compile_args=extra_compile_args,
++                        extra_link_args=extra_link_args,
++                        libraries=[],
++                        sources=sources,
++                        depends=depends)
++        ext_test = Extension('_ctypes_test',
++                             sources=['_ctypes/_ctypes_test.c'])
++        self.extensions.extend([ext, ext_test])
++
++        if not '--with-system-ffi' in sysconfig.get_config_var("CONFIG_ARGS"):
++            return
++
++        if sys.platform == 'darwin':
++            # OS X 10.5 comes with libffi.dylib; the include files are
++            # in /usr/include/ffi
++            inc_dirs.append('/usr/include/ffi')
++
++        ffi_inc = find_file('ffi.h', [], inc_dirs)
++        if ffi_inc is not None:
++            ffi_h = ffi_inc[0] + '/ffi.h'
++            fp = open(ffi_h)
++            while 1:
++                line = fp.readline()
++                if not line:
++                    ffi_inc = None
++                    break
++                if line.startswith('#define LIBFFI_H'):
++                    break
++        ffi_lib = None
++        if ffi_inc is not None:
++            for lib_name in ('ffi_convenience', 'ffi_pic', 'ffi'):
++                if (self.compiler.find_library_file(lib_dirs, lib_name)):
++                    ffi_lib = lib_name
++                    break
++
++        if ffi_inc and ffi_lib:
++            ext.include_dirs.extend(ffi_inc)
++            ext.libraries.append(ffi_lib)
++            self.use_system_libffi = True
++
++
++class PyBuildInstall(install):
++    # Suppress the warning about installation into the lib_dynload
++    # directory, which is not in sys.path when running Python during
++    # installation:
++    def initialize_options (self):
++        install.initialize_options(self)
++        self.warn_dir=0
++
++class PyBuildInstallLib(install_lib):
++    # Do exactly what install_lib does but make sure correct access modes get
++    # set on installed directories and files. All installed files with get
++    # mode 644 unless they are a shared library in which case they will get
++    # mode 755. All installed directories will get mode 755.
++
++    so_ext = sysconfig.get_config_var("SO")
++
++    def install(self):
++        outfiles = install_lib.install(self)
++        self.set_file_modes(outfiles, 0644, 0755)
++        self.set_dir_modes(self.install_dir, 0755)
++        return outfiles
++
++    def set_file_modes(self, files, defaultMode, sharedLibMode):
++        if not self.is_chmod_supported(): return
++        if not files: return
++
++        for filename in files:
++            if os.path.islink(filename): continue
++            mode = defaultMode
++            if filename.endswith(self.so_ext): mode = sharedLibMode
++            log.info("changing mode of %s to %o", filename, mode)
++            if not self.dry_run: os.chmod(filename, mode)
++
++    def set_dir_modes(self, dirname, mode):
++        if not self.is_chmod_supported(): return
++        os.path.walk(dirname, self.set_dir_modes_visitor, mode)
++
++    def set_dir_modes_visitor(self, mode, dirname, names):
++        if os.path.islink(dirname): return
++        log.info("changing mode of %s to %o", dirname, mode)
++        if not self.dry_run: os.chmod(dirname, mode)
++
++    def is_chmod_supported(self):
++        return hasattr(os, 'chmod')
++
++SUMMARY = """
++Python is an interpreted, interactive, object-oriented programming
++language. It is often compared to Tcl, Perl, Scheme or Java.
++
++Python combines remarkable power with very clear syntax. It has
++modules, classes, exceptions, very high level dynamic data types, and
++dynamic typing. There are interfaces to many system calls and
++libraries, as well as to various windowing systems (X11, Motif, Tk,
++Mac, MFC). New built-in modules are easily written in C or C++. Python
++is also usable as an extension language for applications that need a
++programmable interface.
++
++The Python implementation is portable: it runs on many brands of UNIX,
++on Windows, DOS, OS/2, Mac, Amiga... If your favorite system isn't
++listed here, it may still be supported, if there's a C compiler for
++it. Ask around on comp.lang.python -- or just try compiling Python
++yourself.
++"""
++
++CLASSIFIERS = """
++Development Status :: 6 - Mature
++License :: OSI Approved :: Python Software Foundation License
++Natural Language :: English
++Programming Language :: C
++Programming Language :: Python
++Topic :: Software Development
++"""
++
++def main():
++    # turn off warnings when deprecated modules are imported
++    import warnings
++    warnings.filterwarnings("ignore",category=DeprecationWarning)
++    setup(# PyPI Metadata (PEP 301)
++          name = "Python",
++          version = sys.version.split()[0],
++          url = "http://www.python.org/%s" % sys.version[:3],
++          maintainer = "Guido van Rossum and the Python community",
++          maintainer_email = "[email protected]",
++          description = "A high-level object-oriented programming language",
++          long_description = SUMMARY.strip(),
++          license = "PSF license",
++          classifiers = filter(None, CLASSIFIERS.split("\n")),
++          platforms = ["Many"],
++
++          # Build info
++          cmdclass = {'build_ext':PyBuildExt, 'install':PyBuildInstall,
++                      'install_lib':PyBuildInstallLib},
++          # The struct module is defined here, because build_ext won't be
++          # called unless there's at least one extension module defined.
++          ext_modules=[Extension('_struct', ['_struct.c'])],
++
++          # Scripts to install
++          scripts = ['Tools/scripts/pydoc', 'Tools/scripts/idle',
++                     'Tools/scripts/2to3',
++                     'Lib/smtpd.py']
++        )
++
++# --install-platlib
++if __name__ == '__main__':
++    main()
+
+diff --git Python-2.6.4/Lib/test/ucredtext.py Python-2.6.4/Lib/test/ucredtext.py
+new file mode 100644
+--- /dev/null	2011-02-12 03:14:16.000000000 -0600
++++ Python-2.6.4/Lib/test/ucredtest.py	2011-01-20 13:52:42.945657919 -0600
+@@ -0,0 +1,45 @@
++#!/usr/bin/python2.6
++
++import ucred
++import os
++
++uc = ucred.get(os.getpid())
++
++print "pid = %d" % uc.getpid()
++print "euid = %d" % uc.geteuid()
++print "ruid = %d" % uc.getruid()
++print "suid = %d" % uc.getsuid()
++print "egid = %d" % uc.getegid()
++print "rgid = %d" % uc.getrgid()
++print "sgid = %d" % uc.getsgid()
++print "zoneid = %d" % uc.getzoneid()
++print "projid = %d" % uc.getprojid()
++print "groups = %s" % uc.getgroups()
++print "label = %s" % uc.getlabel()
++
++print "getpflags(0x1) = %d" % uc.getpflags(0x1)
++print "getpflags(0x2) = %d" % uc.getpflags(0x2)
++print "has_priv(Effective, proc_fork) = %d" % uc.has_priv("Effective", "proc_fork")
++print "has_priv(Permitted, proc_fork) = %d" % uc.has_priv("Permitted", "proc_fork")
++print "has_priv(Inheritable, proc_fork) = %d" % uc.has_priv("Inheritable", "proc_fork")
++print "has_priv(Limit, file_setid) = %d" % uc.has_priv("Limit", "file_setid")
++print "has_priv(Effective, file_setid) = %d" % uc.has_priv("Effective", "file_setid")
++try:
++    uc.has_priv("Effective", "proc_bork")
++except OSError, e:
++    print e
++try:
++    uc.has_priv("Defective", "proc_fork")
++except OSError, e:
++    print e
++try:
++    uc.has_priv("Defective", "proc_bork")
++except OSError, e:
++    print e
++
++del uc
++uc = ucred.ucred()
++try:
++    uc.getpid()
++except OSError, e:
++    print e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-10-gethostname.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,15 @@
+diff --git Python-2.6.4/Include/pyport.h Python-2.6.4/Include/pyport.h
+--- Python-2.6.4/Include/pyport.h
++++ Python-2.6.4/Include/pyport.h
+@@ -449,11 +449,6 @@
+ in platform-specific #ifdefs.
+ **************************************************************************/
+ 
+-#ifdef SOLARIS
+-/* Unchecked */
+-extern int gethostname(char *, int);
+-#endif
+-
+ #ifdef __BEOS__
+ /* Unchecked */
+ /* It's in the libs, but not the headers... - [cjh] */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-11-dlpi.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,1328 @@
+diff --git Python-2.6.4/Modules/dlpimodule.c Python-2.6.4/Modules/dlpimodule.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/dlpimodule.c
+@@ -0,0 +1,1206 @@
++/*
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++#include <Python.h>
++#include <stdio.h>
++#include <libdlpi.h>
++
++typedef struct {
++	PyObject_HEAD
++	dlpi_handle_t dlpihdl;
++} pylink_t;
++
++typedef struct {
++	PyObject *pyfunc;
++	PyObject *pyarg;
++} callback_data_t;
++
++/*
++ * dlpi_err: the only exception raised for libdlpi related error.
++ * The accompanying value is:
++ * (dlpi_error_number, string), when it's a dlpi specific error,
++ * or, (DL_SYSERR, errno, string), when it's coming from a system call.
++ */
++static PyObject *dlpi_err;
++
++static void
++dlpi_raise_exception(int err)
++{
++	PyObject *e = NULL;
++
++	if (err == DL_SYSERR) {
++		e = Py_BuildValue("(iis)", DL_SYSERR, errno, strerror(errno));
++	} else {
++		e = Py_BuildValue("(is)", err, dlpi_strerror(err));
++	}
++	if (e != NULL) {
++		PyErr_SetObject(dlpi_err, e);
++		Py_DECREF(e);
++	}
++}
++
++PyDoc_STRVAR(link_doc,
++    "link(linkname[, flags]) -> link object\n"
++    "\n"
++    "Open linkname with specified flags.\n"
++    "Three flags are supported: PASSIVE, RAW, NATIVE.\n"
++    "And these flags can be bitwise-OR'ed together(default flag is 0).\n"
++    "You need sys_net_rawaccess privilege to open a link.\n"
++    "See dlpi_open(3DLPI).\n"
++);
++static int
++link_init(PyObject *self, PyObject *args, PyObject *kwds)
++{
++	uint_t flags = 0;
++	dlpi_handle_t dh;
++	char *linkname;
++	int rval;
++	static char *keywords[] = {"linkname", "flags", NULL};
++	pylink_t *link = (pylink_t *)self;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|I", keywords,
++	    &linkname, &flags))
++		return (-1);
++
++	if ((rval = dlpi_open(linkname, &dh, flags)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (-1);
++	}
++
++	link->dlpihdl = dh;
++
++	return (0);
++}
++
++static void
++link_dealloc(pylink_t *link)
++{
++	if (link->dlpihdl != NULL)
++		dlpi_close(link->dlpihdl);
++	link->ob_type->tp_free((PyObject *)link);
++}
++
++PyDoc_STRVAR(bind_doc,
++    "bind(sap) -> unsigned int\n"
++    "\n"
++    "Attempts to bind the link to specified SAP, or ANY_SAP.\n"
++    "Returns the SAP that the function actually bound to, which\n"
++    "could be different from the SAP requested.\n"
++    "See dlpi_bind(3DLPI).\n"
++);
++static PyObject *
++link_bind(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	uint_t sap = 0, boundsap = 0;
++	static char *keywords[] = {"sap", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &sap))
++		return (NULL);
++
++	if ((rval = dlpi_bind(link->dlpihdl, sap, &boundsap)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", boundsap));
++}
++
++PyDoc_STRVAR(unbind_doc,
++    "unbind() -> None\n"
++    "\n"
++    "Attempts to unbind the link from previously bound sap.\n"
++    "See dlpi_unbind(3DLPI).\n"
++);
++static PyObject *
++link_unbind(pylink_t *link)
++{
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_unbind(link->dlpihdl)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(send_doc,
++    "send(destaddr, message[, sap, minpri, maxpri]) -> None\n"
++    "\n"
++    "Attempts to send message over this link to sap on destaddr.\n"
++    "If SAP is not specified, the bound SAP is used\n"
++    "You can also specify priority range (minpri, maxpri).\n"
++    "See dlpi_send(3DLPI).\n"
++);
++static PyObject *
++link_send(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *daddr = NULL, *msgbuf = NULL;
++	size_t daddrlen = 0, msglen = 0;
++	t_scalar_t minpri = DL_QOS_DONT_CARE, maxpri = DL_QOS_DONT_CARE;
++	uint_t sap = DLPI_ANY_SAP;
++	dlpi_sendinfo_t ds, *dsp = NULL;
++	static char *keywords[] =
++	    {"destaddr", "message", "sap", "minpri", "maxpri", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#s#|Iii", keywords,
++	    &daddr, &daddrlen, &msgbuf, &msglen, &sap, &minpri, &maxpri))
++		return (NULL);
++
++	if ((sap != DLPI_ANY_SAP) || (minpri != DL_QOS_DONT_CARE) ||
++	    (maxpri != DL_QOS_DONT_CARE)) {
++		ds.dsi_sap = sap;
++		ds.dsi_prio.dl_min = minpri;
++		ds.dsi_prio.dl_max = maxpri;
++		dsp = &ds;
++	}
++
++	if ((rval = dlpi_send(link->dlpihdl, daddr, daddrlen,
++	    msgbuf, msglen, dsp)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(recv_doc,
++    "recv(msglen[, timeout]) -> (string, string), or (None, None)\n"
++    "\n"
++    "Attempts to receive message over this link.\n"
++    "You need to specify the message length for the received message.\n"
++    "And you can specify timeout value in milliseconds.\n"
++    "The default timeout value is -1 (wait forever).\n"
++    "Returns (source address, message data), or (None, None) when error occurs.\n"
++    "See dlpi_recv(3DLPI).\n"
++);
++static PyObject *
++link_recv(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	PyObject *obj;
++	char *saddr = NULL, *msgbuf = NULL;
++	size_t saddrlen = 0, msglen = 0, *saddrlenp = NULL, *msglenp = NULL;
++	int msec = -1; /* block until receive data */
++	static char *keywords[] = {"msglen", "timeout", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "k|i",
++	    keywords, &msglen, &msec))
++		return (NULL);
++
++	if (msglen > 0) {
++		msgbuf = malloc(msglen);
++		if (msgbuf == NULL) {
++			dlpi_raise_exception(DL_SYSERR);
++			return (NULL);
++		}
++		saddrlen = DLPI_PHYSADDR_MAX;
++		saddr = malloc(saddrlen);
++		if (saddr == NULL) {
++			dlpi_raise_exception(DL_SYSERR);
++			free(msgbuf);
++			return (NULL);
++		}
++		msglenp = &msglen;
++		saddrlenp = &saddrlen;
++	}
++
++	if ((rval = dlpi_recv(link->dlpihdl, saddr, saddrlenp, msgbuf,
++	    msglenp, msec, NULL)) != DLPI_SUCCESS) {
++		if (msgbuf != NULL)
++			free(msgbuf);
++		if (saddr != NULL)
++			free(saddr);
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	obj = Py_BuildValue("s#s#", saddr, saddrlen, msgbuf, msglen);
++	if (msgbuf != NULL)
++		free(msgbuf);
++	if (saddr != NULL)
++		free(saddr);
++	return (obj);
++}
++
++PyDoc_STRVAR(disabmulti_doc,
++    "disabmulti(address) -> None\n"
++    "\n"
++    "Disable a specified multicast address on this link.\n"
++    "See dlpi_disabmulti(3DLPI).\n"
++);
++static PyObject *
++link_disabmulti(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr = NULL;
++	size_t addrlen = 0;
++	static char *keywords[] = {"address", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", keywords,
++	    &addr, &addrlen))
++		return (NULL);
++
++	if ((addrlen == 0) || (addrlen > DLPI_PHYSADDR_MAX)) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_disabmulti(link->dlpihdl, addr, addrlen)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(enabmulti_doc,
++    "enabmulti(address) -> None\n"
++    "\n"
++    "Enable a specified multicast address on this link.\n"
++    "See dlpi_enabmulti(3DLPI).\n"
++);
++static PyObject *
++link_enabmulti(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr = NULL;
++	size_t addrlen = 0;
++	static char *keywords[] = {"address", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", keywords,
++	    &addr, &addrlen))
++		return (NULL);
++
++	if ((addrlen == 0) || (addrlen > DLPI_PHYSADDR_MAX)) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_enabmulti(link->dlpihdl, addr, addrlen)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++static void
++dlpi_callback(dlpi_handle_t hdl, dlpi_notifyinfo_t *ni, void *arg)
++{
++	callback_data_t *cd = (callback_data_t *)arg;
++	PyObject *arglist, *result;
++
++	switch (ni->dni_note) {
++	case DL_NOTE_SPEED:
++		arglist = Py_BuildValue("(OII)",
++		    cd->pyarg, ni->dni_note, ni->dni_speed);
++		break;
++	case DL_NOTE_SDU_SIZE:
++		arglist = Py_BuildValue("(OII)",
++		    cd->pyarg, ni->dni_note, ni->dni_size);
++		break;
++	case DL_NOTE_PHYS_ADDR:
++		arglist = Py_BuildValue("(OIs#)",
++		    cd->pyarg, ni->dni_note, ni->dni_physaddr,
++		    ni->dni_physaddrlen);
++		break;
++	default:
++		arglist = Py_BuildValue("(OIO)", cd->pyarg, ni->dni_note,
++		    Py_None);
++	}
++
++	result = PyEval_CallObject(cd->pyfunc, arglist);
++	Py_DECREF(arglist);
++	if (result == NULL) {
++		PyErr_Clear(); /* cannot raise error */
++	}
++	Py_DECREF(result);
++	Py_DECREF(cd->pyfunc);
++	Py_XDECREF(cd->pyarg);
++	free(cd);
++}
++
++PyDoc_STRVAR(enabnotify_doc,
++    "enabnotify(events, function[, arg]) -> unsigned long\n"
++    "\n"
++    "Enables a notification callback for the set of specified events,\n"
++    "which must be one or more (by a logical OR) events listed as below:\n"
++    "NOTE_LINK_DOWN         Notify when link has gone down\n"
++    "NOTE_LINK_UP           Notify when link has come up\n"
++    "NOTE_PHYS_ADDR         Notify when address changes\n"
++    "NOTE_SDU_SIZE          Notify when MTU changes\n"
++    "NOTE_SPEED             Notify when speed changes\n"
++    "NOTE_PROMISC_ON_PHYS   Notify when PROMISC_PHYS is set\n"
++    "NOTE_PROMISC_OFF_PHYS  Notify when PROMISC_PHYS is cleared\n"
++    "Returns a handle for this registration.\n"
++    "See dlpi_enabnotify(3DLPI).\n"
++);
++static PyObject *
++link_enabnotify(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	PyObject *func = NULL, *arg = NULL;
++	callback_data_t *cd;
++	uint_t notes = 0;
++	static char *keywords[] = {"events", "function", "arg", NULL};
++	dlpi_notifyid_t id;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "IO|O",
++	    keywords, &notes, &func, &arg))
++		return (NULL);
++
++	if (!PyCallable_Check(func)) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	cd = malloc(sizeof(callback_data_t));
++	if (cd == NULL) {
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++	Py_INCREF(func);
++	Py_XINCREF(arg);
++	cd->pyfunc = func;
++	cd->pyarg = arg;
++
++	if ((rval = dlpi_enabnotify(link->dlpihdl, notes, dlpi_callback,
++	    cd, &id)) != DLPI_SUCCESS) {
++		free(cd);
++		Py_DECREF(func);
++		Py_XDECREF(arg);
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("k", id));
++}
++
++PyDoc_STRVAR(disabnotify_doc,
++    "disabnotify(handle) -> argument object, or None\n"
++    "\n"
++    "Disables the notification registration associated with handle.\n"
++    "You should get this handle by calling enabnotify().\n"
++    "Returns the argument passed in when registering the callback, or None.\n"
++    "See dlpi_disabnotify(3DLPI).\n"
++);
++static PyObject *
++link_disabnotify(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	dlpi_notifyid_t id;
++	callback_data_t *arg;
++	PyObject *pyargsaved;
++	static char *keywords[] = {"handle", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "k", keywords, &id))
++		return (NULL);
++
++	if ((rval = dlpi_disabnotify(link->dlpihdl, id, (void **)&arg)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	/* clean up */
++	pyargsaved = arg->pyarg;
++	Py_XINCREF(pyargsaved);
++	Py_XDECREF(arg->pyarg);
++	Py_DECREF(arg->pyfunc);
++	free(arg);
++
++	if (pyargsaved != NULL)
++		return (pyargsaved);
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(get_sap_doc,
++    "get_sap() -> unsigned int\n"
++    "\n"
++    "Returns the sap bound to this link.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_sap(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", info.di_sap));
++}
++
++PyDoc_STRVAR(get_fd_doc,
++    "get_fd() -> int\n"
++    "\n"
++    "Returns the integer file descriptor that can be used to directly\n"
++    "operate on the link.\n"
++    "See dlpi_fd(3DLPI).\n"
++);
++static PyObject *
++link_get_fd(pylink_t *link)
++{
++	int fd;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((fd = dlpi_fd(link->dlpihdl)) == -1) {
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("i", fd));
++}
++
++PyDoc_STRVAR(get_linkname_doc,
++    "get_linkname() -> string\n"
++    "\n"
++    "Returns the name of the link.\n"
++    "See dlpi_linkname(3DLPI).\n"
++);
++static PyObject *
++link_get_linkname(pylink_t *link)
++{
++	const char *name = NULL;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((name = dlpi_linkname(link->dlpihdl)) == NULL) {
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("s", name));
++}
++
++PyDoc_STRVAR(get_bcastaddr_doc,
++    "get_bcastaddr() -> string, or None\n"
++    "\n"
++    "Returns the broadcast address of the link.\n"
++    "Returns None if the broadcast address is empty.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_bcastaddr(pylink_t *link)
++{
++	char *addr[DLPI_PHYSADDR_MAX];
++	size_t addrlen = 0;
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	if (info.di_bcastaddrlen == 0) {
++		Py_INCREF(Py_None);
++		return (Py_None);
++	}
++
++	return (Py_BuildValue("s#", info.di_bcastaddr, info.di_bcastaddrlen));
++}
++
++PyDoc_STRVAR(get_physaddr_doc,
++    "get_physaddr(addrtype) -> string, or None\n"
++    "\n"
++    "Addrtype can be any one of the value listed below:\n"
++    "FACT_PHYS_ADDR    Factory physical address\n"
++    "CURR_PHYS_ADDR    Current physical address\n"
++    "Returns the corresponding physical address of the link.\n"
++    "See dlpi_get_physaddr(3DLPI).\n"
++);
++static PyObject *
++link_get_physaddr(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr[DLPI_PHYSADDR_MAX];
++	size_t addrlen = DLPI_PHYSADDR_MAX;
++	static char *keywords[] = {"addrtype", NULL};
++	uint_t type;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &type))
++		return (NULL);
++
++	if ((rval = dlpi_get_physaddr(link->dlpihdl, type, addr, &addrlen)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("s#", addr, addrlen));
++}
++
++PyDoc_STRVAR(set_physaddr_doc,
++    "set_physaddr(address) -> None\n"
++    "\n"
++    "Sets the physical address of the link.\n"
++    "See dlpi_set_physaddr(3DLPI).\n"
++);
++static PyObject *
++link_set_physaddr(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	char *addr = NULL;
++	size_t addrlen = 0;
++	static char *keywords[] = {"address", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s#", keywords,
++	    &addr, &addrlen))
++		return (NULL);
++
++	if ((rval = dlpi_set_physaddr(link->dlpihdl, DL_CURR_PHYS_ADDR,
++	    addr, addrlen)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(promiscon_doc,
++    "promiscon([level]) -> None\n"
++    "\n"
++    "Enables promiscuous mode for the link at levels:\n"
++    "PROMISC_PHYS     Promiscuous mode at the physical level(default)\n"
++    "PROMISC_SAP      Promiscuous mode at the SAP level\n"
++    "PROMISC_MULTI    Promiscuous mode for all multicast addresses\n"
++    "See dlpi_promiscon(3DLPI).\n"
++);
++static PyObject *
++link_promiscon(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	uint_t level = DL_PROMISC_PHYS;
++	static char *keywords[] = {"level", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|I", keywords, &level))
++		return (NULL);
++
++	if ((rval = dlpi_promiscon(link->dlpihdl, level)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(promiscoff_doc,
++    "promiscoff([level]) -> None\n"
++    "\n"
++    "Disables promiscuous mode for the link at levels:\n"
++    "PROMISC_PHYS     Promiscuous mode at the physical level(default)\n"
++    "PROMISC_SAP      Promiscuous mode at the SAP level\n"
++    "PROMISC_MULTI    Promiscuous mode for all multicast addresses\n"
++    "See dlpi_promiscoff(3DLPI).\n"
++);
++static PyObject *
++link_promiscoff(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	uint_t level = DL_PROMISC_PHYS;
++	static char *keywords[] = {"level", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|I", keywords, &level))
++		return (NULL);
++
++	if ((rval = dlpi_promiscoff(link->dlpihdl, level)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(get_timeout_doc,
++    "get_timeout() -> int\n"
++    "\n"
++    "Returns current time out value of the link.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_timeout(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("i", info.di_timeout));
++}
++
++PyDoc_STRVAR(get_mactype_doc,
++    "get_mactype() -> unsigned char\n"
++    "\n"
++    "Returns MAC type of the link.\n"
++    "See <sys/dlpi.h> for the list of possible MAC types.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_mactype(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("B", info.di_mactype));
++}
++
++PyDoc_STRVAR(set_timeout_doc,
++    "set_timeout(timeout) -> None\n"
++    "\n"
++    "Sets time out value of the link (default value: DEF_TIMEOUT).\n"
++    "See dlpi_set_timeout(3DLPI).\n"
++);
++static PyObject *
++link_set_timeout(pylink_t *link, PyObject *args, PyObject *kwds)
++{
++	int timeout = DLPI_DEF_TIMEOUT;
++	static char *keywords[] = {"timeout", NULL};
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", keywords, &timeout))
++		return (NULL);
++
++	if ((rval = dlpi_set_timeout(link->dlpihdl, timeout)) != DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	Py_INCREF(Py_None);
++	return (Py_None);
++}
++
++PyDoc_STRVAR(get_sdu_doc,
++    "get_sdu() -> (unsigned int, unsigned int)\n"
++    "\n"
++    "Returns (min sdu, max sdu).\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_sdu(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("II", info.di_min_sdu, info.di_max_sdu));
++}
++
++PyDoc_STRVAR(get_state_doc,
++    "get_state() -> unsigned int\n"
++    "\n"
++    "Returns current state of the link (either UNBOUND or IDLE).\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_state(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", info.di_state));
++}
++
++PyDoc_STRVAR(get_qos_select_doc,
++    "get_qos_select() -> (unsigned int, int, int, int)\n"
++    "\n"
++    "Returns (qos type, trans delay, priority, residul err).\n"
++    "Unsupported QOS parameters are set to UNKNOWN.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_qos_select(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("Iiiii",
++	    info.di_qos_sel.dl_qos_type,
++	    info.di_qos_sel.dl_trans_delay,
++	    info.di_qos_sel.dl_priority,
++	    info.di_qos_sel.dl_residual_error));
++}
++
++PyDoc_STRVAR(get_qos_range_doc,
++    "get_qos_range() -> \n"
++    "	(unsigned int, (int, int), (int, int), (int, int), int)\n"
++    "\n"
++    "Returns (qos type, (trans delay target, trans delay accept),\n"
++    "(min priority, max priority), (min protection, max protection),\n"
++    "residual err).\n"
++    "Unsupported QOS range values are set to UNKNOWN.\n"
++    "See dlpi_info(3DLPI).\n"
++);
++static PyObject *
++link_get_qos_range(pylink_t *link)
++{
++	dlpi_info_t info;
++	int rval;
++
++	if (link->dlpihdl == NULL) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	if ((rval = dlpi_info(link->dlpihdl, &info, 0)) !=
++	    DLPI_SUCCESS) {
++		dlpi_raise_exception(rval);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I(ii)(ii)(ii)i",
++	    info.di_qos_range.dl_qos_type,
++	    info.di_qos_range.dl_trans_delay.dl_target_value,
++	    info.di_qos_range.dl_trans_delay.dl_accept_value,
++	    info.di_qos_range.dl_priority.dl_min,
++	    info.di_qos_range.dl_priority.dl_max,
++	    info.di_qos_range.dl_protection.dl_min,
++	    info.di_qos_range.dl_protection.dl_max,
++	    info.di_qos_range.dl_residual_error));
++}
++
++static PyMethodDef pylink_methods[] = {
++	{"bind", (PyCFunction)link_bind, METH_VARARGS|METH_KEYWORDS, bind_doc},
++	{"unbind", (PyCFunction)link_unbind, METH_NOARGS, unbind_doc},
++	{"send", (PyCFunction)link_send, METH_VARARGS|METH_KEYWORDS,
++	    send_doc},
++	{"recv", (PyCFunction)link_recv, METH_VARARGS|METH_KEYWORDS,
++	    recv_doc},
++	{"disabmulti", (PyCFunction)link_disabmulti, METH_VARARGS|METH_KEYWORDS,
++	    disabmulti_doc},
++	{"enabmulti", (PyCFunction)link_enabmulti, METH_VARARGS|METH_KEYWORDS,
++	    enabmulti_doc},
++	{"enabnotify", (PyCFunction)link_enabnotify,
++	    METH_VARARGS|METH_KEYWORDS, enabnotify_doc},
++	{"disabnotify", (PyCFunction)link_disabnotify,
++	    METH_VARARGS|METH_KEYWORDS, disabnotify_doc},
++	{"get_fd", (PyCFunction)link_get_fd, METH_NOARGS, get_fd_doc},
++	{"get_sap", (PyCFunction)link_get_sap, METH_NOARGS, get_sap_doc},
++	{"get_mactype", (PyCFunction)link_get_mactype, METH_NOARGS,
++	    get_mactype_doc},
++	{"get_linkname", (PyCFunction)link_get_linkname, METH_NOARGS,
++	    get_linkname_doc},
++	{"get_bcastaddr", (PyCFunction)link_get_bcastaddr, METH_NOARGS,
++	    get_bcastaddr_doc},
++	{"get_physaddr", (PyCFunction)link_get_physaddr,
++	    METH_VARARGS|METH_KEYWORDS, get_physaddr_doc},
++	{"set_physaddr", (PyCFunction)link_set_physaddr,
++	    METH_VARARGS|METH_KEYWORDS, set_physaddr_doc},
++	{"promiscon", (PyCFunction)link_promiscon, METH_VARARGS|METH_KEYWORDS,
++	    promiscon_doc},
++	{"promiscoff", (PyCFunction)link_promiscoff, METH_VARARGS|METH_KEYWORDS,
++	    promiscoff_doc},
++	{"get_timeout", (PyCFunction)link_get_timeout, METH_NOARGS,
++	    get_timeout_doc},
++	{"set_timeout", (PyCFunction)link_set_timeout,
++	    METH_VARARGS|METH_KEYWORDS, set_timeout_doc},
++	{"get_sdu", (PyCFunction)link_get_sdu, METH_NOARGS, get_sdu_doc},
++	{"get_state", (PyCFunction)link_get_state, METH_NOARGS,
++	    get_state_doc},
++	{"get_qos_select", (PyCFunction)link_get_qos_select, METH_NOARGS,
++	    get_qos_select_doc},
++	{"get_qos_range", (PyCFunction)link_get_qos_range, METH_NOARGS,
++	    get_qos_range_doc},
++	{NULL}
++};
++
++static PyTypeObject pylink_type = {
++	PyObject_HEAD_INIT(0)	/* Must fill in type value later */
++	0,					/* ob_size */
++	"dlpi.link",				/* tp_name */
++	sizeof(pylink_t),			/* tp_basicsize */
++	0,					/* tp_itemsize */
++	(destructor)link_dealloc,		/* tp_dealloc */
++	0,					/* tp_print */
++	0,					/* tp_getattr */
++	0,					/* tp_setattr */
++	0,					/* tp_compare */
++	0,					/* tp_repr */
++	0,					/* tp_as_number */
++	0,					/* tp_as_sequence */
++	0,					/* tp_as_mapping */
++	0,					/* tp_hash */
++	0,					/* tp_call */
++	0,					/* tp_str */
++	0,					/* tp_getattro */
++	0,					/* tp_setattro */
++	0,					/* tp_as_buffer */
++	Py_TPFLAGS_DEFAULT,			/* tp_flags */
++	link_doc,				/* tp_doc */
++	0,					/* tp_traverse */
++	0,					/* tp_clear */
++	0,					/* tp_richcompare */
++	0,					/* tp_weaklistoffset */
++	0,					/* tp_iter */
++	0,					/* tp_iternext */
++	pylink_methods,				/* tp_methods */
++	0,					/* tp_members */
++	0,					/* tp_getset */
++	0,					/* tp_base */
++	0,					/* tp_dict */
++	0,					/* tp_descr_get */
++	0,					/* tp_descr_set */
++	0,					/* tp_dictoffset */
++	(initproc)link_init,			/* tp_init */
++	0,					/* tp_alloc */
++	PyType_GenericNew,			/* tp_new */
++	0,					/* tp_free */
++};
++
++PyDoc_STRVAR(arptype_doc,
++    "arptype(arptype) -> unsigned int\n"
++    "\n"
++    "Converts a DLPI MAC type to an ARP hardware type defined\n"
++    " in <netinet/arp.h>\n"
++    "See dlpi_arptype(3DLPI)\n"
++);
++static PyObject *
++arptype(PyObject *dlpi, PyObject *args, PyObject *kwds)
++{
++	static char *keywords[] = {"arptype", NULL};
++	uint_t dlpityp, arptyp;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &dlpityp))
++		return (NULL);
++
++	if ((arptyp = dlpi_arptype(dlpityp)) == 0) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", arptyp));
++}
++
++PyDoc_STRVAR(iftype_doc,
++    "iftype(iftype) -> unsigned int\n"
++    "\n"
++    "Converts a DLPI MAC type to a BSD socket interface type\n"
++    "defined in <net/if_types.h>\n"
++    "See dlpi_iftype(3DLPI)\n"
++);
++static PyObject *
++iftype(PyObject *dlpi, PyObject *args, PyObject *kwds)
++{
++	static char *keywords[] = {"iftype", NULL};
++	uint_t dlpityp, iftyp;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &dlpityp))
++		return (NULL);
++
++	if ((iftyp = dlpi_iftype(dlpityp)) == 0) {
++		errno = EINVAL;
++		dlpi_raise_exception(DL_SYSERR);
++		return (NULL);
++	}
++
++	return (Py_BuildValue("I", iftyp));
++}
++
++PyDoc_STRVAR(mactype_doc,
++    "mactype(mactype) -> string\n"
++    "\n"
++    "Returns a string that describes the specified mactype.\n"
++    "Valid mac types are defined in <sys/dlpi.h>.\n"
++    "See dlpi_mactype(3DLPI)\n"
++);
++static PyObject *
++mactype(PyObject *dlpi, PyObject *args, PyObject *kwds)
++{
++	static char *keywords[] = {"mactype", NULL};
++	uint_t mactyp;
++
++	if (!PyArg_ParseTupleAndKeywords(args, kwds, "I", keywords, &mactyp))
++		return (NULL);
++
++	return (Py_BuildValue("s", dlpi_mactype(mactyp)));
++}
++
++static boolean_t
++link_walker(const char *name, void *arg)
++{
++	PyObject *linkname;
++	PyObject *list = (PyObject *)arg;
++
++	if ((list == NULL) || !PyList_Check(list))
++		return (_B_FALSE);
++
++	linkname = Py_BuildValue("s", name);
++	if (PyList_Append(list, linkname) == -1)
++		return (_B_TRUE);
++
++	Py_DECREF(linkname);
++	return (_B_FALSE);
++}
++
++PyDoc_STRVAR(listlink_doc,
++    "listlink() -> list\n"
++    "\n"
++    "Returns a list containing link names of all links on the system.\n"
++);
++static PyObject *
++listlink(PyObject *dlpi)
++{
++	PyObject *list;
++
++	if ((list = PyList_New(0)) == NULL)
++		return (NULL);
++
++	dlpi_walk(link_walker, list, 0);
++	return (list);
++}
++
++static PyMethodDef dlpi_methods[] = {
++	{"arptype", (PyCFunction)arptype, METH_VARARGS|METH_KEYWORDS,
++	    arptype_doc},
++	{"iftype", (PyCFunction)iftype, METH_VARARGS|METH_KEYWORDS,
++	    iftype_doc},
++	{"mactype", (PyCFunction)mactype, METH_VARARGS|METH_KEYWORDS,
++	    mactype_doc},
++	{"listlink", (PyCFunction)listlink, METH_NOARGS, listlink_doc},
++	{NULL}
++};
++
++PyMODINIT_FUNC
++initdlpi(void)
++{
++	PyObject *mod;
++
++	if (PyType_Ready(&pylink_type) < 0)
++		return;
++
++	mod = Py_InitModule("dlpi", dlpi_methods);
++	if (mod == NULL)
++		return;
++
++	dlpi_err = PyErr_NewException("dlpi.error", NULL, NULL);
++	if (dlpi_err == NULL)
++		return;
++	PyModule_AddObject(mod, "error", dlpi_err);
++
++	Py_INCREF(&pylink_type);
++	PyModule_AddObject(mod, "link", (PyObject *)&pylink_type);
++	PyModule_AddIntConstant(mod, "PASSIVE", DLPI_PASSIVE);
++	PyModule_AddIntConstant(mod, "RAW", DLPI_RAW);
++	PyModule_AddIntConstant(mod, "NATIVE", DLPI_NATIVE);
++	PyModule_AddIntConstant(mod, "ANY_SAP", DLPI_ANY_SAP);
++	PyModule_AddIntConstant(mod, "DEF_TIMEOUT", DLPI_DEF_TIMEOUT);
++	PyModule_AddIntConstant(mod, "NOTE_LINK_DOWN", DL_NOTE_LINK_DOWN);
++	PyModule_AddIntConstant(mod, "NOTE_LINK_UP", DL_NOTE_LINK_UP);
++	PyModule_AddIntConstant(mod, "NOTE_PHYS_ADDR", DL_NOTE_PHYS_ADDR);
++	PyModule_AddIntConstant(mod, "NOTE_SDU_SIZE", DL_NOTE_SDU_SIZE);
++	PyModule_AddIntConstant(mod, "NOTE_SPEED", DL_NOTE_SPEED);
++	PyModule_AddIntConstant(mod, "NOTE_PROMISC_ON_PHYS",
++	    DL_NOTE_PROMISC_ON_PHYS);
++	PyModule_AddIntConstant(mod, "NOTE_PROMISC_OFF_PHYS",
++	    DL_NOTE_PROMISC_OFF_PHYS);
++	PyModule_AddIntConstant(mod, "FACT_PHYS_ADDR", DL_FACT_PHYS_ADDR);
++	PyModule_AddIntConstant(mod, "CURR_PHYS_ADDR", DL_CURR_PHYS_ADDR);
++	PyModule_AddIntConstant(mod, "PROMISC_PHYS", DL_PROMISC_PHYS);
++	PyModule_AddIntConstant(mod, "PROMISC_SAP", DL_PROMISC_SAP);
++	PyModule_AddIntConstant(mod, "PROMISC_MULTI", DL_PROMISC_MULTI);
++	PyModule_AddIntConstant(mod, "UNKNOWN", DL_UNKNOWN);
++	PyModule_AddIntConstant(mod, "UNBOUND", DL_UNBOUND);
++	PyModule_AddIntConstant(mod, "IDLE", DL_IDLE);
++	PyModule_AddIntConstant(mod, "SYSERR", DL_SYSERR);
++}
+diff --git Python-2.6.4/setup.py Python-2.6.4/setup.py
+--- Python-2.6.4/setup.py
++++ Python-2.6.4/setup.py
+@@ -1284,6 +1284,12 @@
+             exts.append( Extension('ucred', ['ucred.c'],
+                                    libraries = ['tsol']) )
+ 
++        # dlpi module (Solaris)
++        dlpi_inc = find_file('libdlpi.h', [], inc_dirs)
++        if dlpi_inc is not None:
++            exts.append( Extension('dlpi', ['dlpimodule.c'],
++                                   libraries = ['dlpi']) )
++
+         # Thomas Heller's _ctypes module
+         self.detect_ctypes(inc_dirs, lib_dirs)
+ 
+diff --git Python-2.6.4/lib/test/dlpitest.py Python-2.6.4/Lib/test/dlpitest.py
+new file mode 100644
+--- /dev/null	2011-02-12 03:13:26.000000000 -0600
++++ Python-2.6.4/Lib/test/dlpitest.py	2011-01-20 13:52:42.895865414 -0600
+@@ -0,0 +1,96 @@
++#!/usr/bin/python2.6
++
++import dlpi
++import sys
++import time
++import struct
++
++#test listlink
++linklist = dlpi.listlink()
++print "Found %d links:" % len(linklist)
++print linklist
++
++#pick up the first data link for below testing
++linkname = linklist[0]
++
++#open link
++print "opening link: " + linkname + "..."
++testlink = dlpi.link(linkname)
++
++#read some info of testlink
++print "linkname is %s" % testlink.get_linkname()
++print "link fd is %d" % testlink.get_fd()
++mactype = testlink.get_mactype()
++print "dlpi mactype is %d" % mactype
++print "after convert:"
++print "\tmactype is %s" % dlpi.mactype(mactype)
++print "\tiftype is %d" % dlpi.iftype(mactype)
++print "\tarptype is %d" % dlpi.arptype(mactype)
++bcastaddr = testlink.get_bcastaddr()
++print "broadcast addr is: ",
++print struct.unpack("BBBBBB",bcastaddr)
++physaddr = testlink.get_physaddr(dlpi.FACT_PHYS_ADDR)
++print "factory physical address is: ",
++print struct.unpack("BBBBBB",physaddr)
++print "current timeout value is %d" % testlink.get_timeout()
++print "sdu is:",
++print testlink.get_sdu()
++print "qos select is:",
++print testlink.get_qos_select()
++print "qos range is:",
++print testlink.get_qos_range()
++
++#set some config value of testlink and read them again
++print "setting current physiacal addr to aa:0:10:13:27:5"
++testlink.set_physaddr('\xaa\0\x10\x13\x27\5')
++physaddr = testlink.get_physaddr(dlpi.CURR_PHYS_ADDR)
++print "current physical addr is: ",
++print struct.unpack("BBBBBB",physaddr)
++print "set timeout value to 6..."
++testlink.set_timeout(6)
++print "timeout value is %d" % testlink.get_timeout()
++
++#test enable/disable multicast
++print "enable/disable multicast address 1:0:5e:0:0:5"
++testlink.enabmulti('\1\0\x5e\0\0\5')
++testlink.disabmulti('\1\0\x5e\0\0\5')
++
++#test bind
++print "binding to SAP 0x9000..."
++testlink.bind(0x9000)
++print "sap is %x" % testlink.get_sap()
++print "state is: %d"  % testlink.get_state()
++
++#test send
++print "sending broadcast loopback packet..."
++testlink.send(bcastaddr, '\0\1\2\3\4\5')
++
++#test notify functionality
++arg = "notification callback arg"
++def notify(arg, notes, value):
++	print "NOTE_PROMISC_ON_PHYS notification received with arg: '%s'" % arg
++print "enabled notification on NOTE_PROMISC_ON_PHYS"
++id = testlink.enabnotify(dlpi.NOTE_PROMISC_ON_PHYS, notify, arg) #enable notification
++testlink.promiscon() #trigger the event (will be seen while receiving pkt below)
++
++#test receive
++print "testing receiving..."
++try:
++	testlink.recv(0, 0) #should see NOTE_PROMISC_ON_PHYS event here
++except dlpi.error, err:
++	errnum, errinfo = err
++	if errnum == 10006:
++		pass #timeout error is expected here
++	else: #test fails if reach here
++		print "test failed",
++		print errnum,
++		print err
++
++testlink.promiscoff()
++testlink.disabnotify(id) #disable notification
++
++#test unbind
++print "unbinding..."
++testlink.unbind()
++print "sap is %x" % testlink.get_sap()
++print "state is: %d"  % testlink.get_state()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-12-encoding-alias.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,35 @@
+diff --git Python-2.6.4/Lib/encodings/aliases.py Python-2.6.4/Lib/encodings/aliases.py
+--- Python-2.6.4/Lib/encodings/aliases.py
++++ Python-2.6.4/Lib/encodings/aliases.py
+@@ -73,6 +73,7 @@
+ 
+     # cp1251 codec
+     '1251'               : 'cp1251',
++    'ansi_1251'          : 'cp1251',
+     'windows_1251'       : 'cp1251',
+ 
+     # cp1252 codec
+@@ -217,6 +218,7 @@
+     'u_jis'              : 'euc_jp',
+ 
+     # euc_kr codec
++    '5601'               : 'euc_kr',
+     'euckr'              : 'euc_kr',
+     'korean'             : 'euc_kr',
+     'ksc5601'            : 'euc_kr',
+@@ -457,6 +459,7 @@
+     'shiftjis'           : 'shift_jis',
+     'sjis'               : 'shift_jis',
+     's_jis'              : 'shift_jis',
++    'pck'                : 'shift_jis',
+ 
+     # shift_jis_2004 codec
+     'shiftjis2004'       : 'shift_jis_2004',
+@@ -476,6 +479,7 @@
+     'tis_620_0'          : 'tis_620',
+     'tis_620_2529_0'     : 'tis_620',
+     'tis_620_2529_1'     : 'tis_620',
++    'tis620.2533'        : 'tis_620',
+     'iso_ir_166'         : 'tis_620',
+ 
+     # utf_16 codec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-13-cflags.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,12 @@
+diff --git Python-2.6.4/configure.in Python-2.6.4/configure.in
+--- Python-2.6.4/configure.in
++++ Python-2.6.4/configure.in
+@@ -1110,6 +1110,8 @@
+ 	# environment?
+         Darwin*)
+ 	    ;;
++	SunOS*)
++	    ;;
+         *)
+ 	    BASECFLAGS="$BASECFLAGS -OPT:Olimit=0"
+ 	    ;;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-14-ctypes-util-find-library.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,39 @@
+diff --git Python-2.6.4/Lib/ctypes/util.py Python-2.6.4/Lib/ctypes/util.py
+--- Python-2.6.4/Lib/ctypes/util.py
++++ Python-2.6.4/Lib/ctypes/util.py
+@@ -164,6 +164,35 @@
+             res.sort(cmp= lambda x,y: cmp(_num_version(x), _num_version(y)))
+             return res[-1]
+ 
++    elif sys.platform == "sunos5":
++
++        def _findLib_crle(name, is64):
++            if not os.path.exists('/usr/bin/crle'):
++                return None
++
++            if is64:
++                cmd = 'env LC_ALL=C /usr/bin/crle -64 2>/dev/null'
++            else:
++                cmd = 'env LC_ALL=C /usr/bin/crle 2>/dev/null'
++
++            for line in os.popen(cmd).readlines():
++                line = line.strip()
++                if (line.startswith('Default Library Path (ELF):')):
++                    paths = line.split()[4]
++
++            if not paths:
++                return None
++
++            for dir in paths.split(":"):
++                libfile = os.path.join(dir, "lib%s.so" % name)
++                if os.path.exists(libfile):
++                    return libfile
++
++            return None
++        
++        def find_library(name, is64 = False):
++            return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name))
++
+     else:
+ 
+         def _findLib_ldconfig(name):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-15-getcwd.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,21 @@
+diff --git Python-2.6.4/Modules/posixmodule.c Python-2.6.4/Modules/posixmodule.c
+--- Python-2.6.4/Modules/posixmodule.c
++++ Python-2.6.4/Modules/posixmodule.c
+@@ -1978,6 +1978,8 @@
+ 	char *res = NULL;
+ 	PyObject *dynamic_return;
+ 
++	int maxsize = pathconf(".", _PC_PATH_MAX);
++
+ 	Py_BEGIN_ALLOW_THREADS
+ 	do {
+ 		bufsize = bufsize + bufsize_incr;
+@@ -1994,7 +1996,7 @@
+ 		if (res == NULL) {
+ 			free(tmpbuf);
+ 		}
+-	} while ((res == NULL) && (errno == ERANGE));
++	} while ((res == NULL) && (errno == ERANGE) && (bufsize < maxsize));
+ 	Py_END_ALLOW_THREADS
+ 
+ 	if (res == NULL)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-16-privrbac.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,1581 @@
+diff --git Python-2.6.4/Modules/authattr.c Python-2.6.4/Modules/authattr.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/authattr.c
+@@ -0,0 +1,262 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++/*
++ * RBAC Bindings for Python - auth_attr functions
++ */
++
++#include <auth_attr.h>
++#include "Python.h"
++#include "pyrbac.h"
++
++static PyObject*
++pyrbac_setauthattr(PyObject* self, PyObject* args) {
++	setauthattr();
++	return Py_None;
++}
++
++static PyObject*
++pyrbac_endauthattr(PyObject* self, PyObject* args) {
++	endauthattr();
++	return Py_None;
++}
++
++PyObject*
++pyrbac_getauthnamattr(PyObject* self, char* authname, int mode) {
++	
++
++	
++	authattr_t * ret_authattr = (mode == PYRBAC_NAM_MODE) ? getauthnam(authname) : getauthattr();
++	if (ret_authattr == NULL)
++		return Py_None;
++		
++	PyObject* kv_data = PyDict_New();
++	if (kv_data == NULL) {
++		free_authattr(ret_authattr);
++		return NULL;
++	}
++
++	if(ret_authattr->attr != NULL) {
++		int len;
++		for(len = 0; len < ret_authattr->attr->length; len++) {
++			kv_t current = ret_authattr->attr->data[len];
++
++			PyObject* set = PyList_New(NULL);
++			char* saveptr;
++			char* item = strtok_r(current.value, ",", &saveptr);
++			PyList_Append(set, PyString_FromString(item));
++
++			while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++				if(PyList_Append(set, PyString_FromString(item)) != 0) {
++					Py_XDECREF(set);
++					Py_XDECREF(kv_data);
++					free_authattr(ret_authattr);
++					return NULL;
++				}
++			}
++			if(PyDict_SetItemString(kv_data, current.key, set)) {
++					free_authattr(ret_authattr);
++					return NULL;
++			}
++		}
++	}
++	PyObject * retval = Py_BuildValue("{s:s,s:s,s:s,s:s,s:s,s:O}",
++		"name",ret_authattr->name,
++		"res1",ret_authattr->res1,
++		"res2",ret_authattr->res2,
++		"short",ret_authattr->short_desc,
++		"long",ret_authattr->long_desc,
++		"attributes",kv_data);
++
++	free_authattr(ret_authattr);
++	return retval;
++
++}
++
++static PyObject*
++pyrbac_getauthattr(PyObject* self, PyObject* args) {
++	return(pyrbac_getauthnamattr(self, NULL, PYRBAC_ATTR_MODE));
++}
++
++static PyObject*
++pyrbac_getauthnam(PyObject* self, PyObject* args) {
++	char* name = NULL;
++	if(!PyArg_ParseTuple(args, "s:getauthnam", &name))
++		return NULL;
++	return(pyrbac_getauthnamattr(self, name, PYRBAC_NAM_MODE));
++}
++
++static PyObject *
++pyrbac_chkauthattr(PyObject* self, PyObject* args) {
++	char* authstring = NULL;
++	char* username = NULL;
++	if(!PyArg_ParseTuple(args, "ss:chkauthattr", &authstring, &username))
++		return NULL;
++	return PyBool_FromLong((long)chkauthattr(authstring, username));
++}
++
++static PyObject*
++pyrbac_authattr_next(PyObject* self, PyObject* args) {
++	PyObject* retval = pyrbac_getauthattr(self, args);
++	if( retval == Py_None ) {
++		setauthattr();
++		return NULL;
++	}
++	return retval;
++}
++static PyObject*
++pyrbac_authattr__iter__(PyObject* self, PyObject* args) {
++	return self;
++}
++
++typedef struct {
++	PyObject_HEAD
++} Authattr;
++
++static void
++Authattr_dealloc(Authattr* self) {
++	endauthattr();
++	self->ob_type->tp_free((PyObject*) self);
++}
++
++static PyObject*
++Authattr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
++	Authattr *self;
++	self = (Authattr*)type->tp_alloc(type, 0);
++
++	return ((PyObject *) self);
++}
++
++static int
++Authattr_init(Authattr* self, PyObject *args, PyObject *kwargs) {
++	setauthattr();
++	return 0;
++}
++
++static char pyrbac_authattr__doc__[];
++
++PyDoc_STRVAR(pyrbac_authattr__doc__, """provides interfaces to the auth_attr \
++database. may be iterated over to return all auth_attr entries\n\n\
++Methods provided:\n\
++setauthattr\n\
++endauthattr\n\
++getauthattr\n\
++chkauthattr\n\
++getauthnam""");
++
++static char pyrbac_setauthattr__doc__[];
++static char pyrbac_endauthattr__doc__[];
++static char pyrbac_getauthattr__doc__[];
++static char pyrbac_chkauthattr__doc__[];
++
++PyDoc_STRVAR(pyrbac_setauthattr__doc__, 
++"\"rewinds\" the auth_attr functions to the first entry in the db. Called \
++automatically by the constructor\n\tArguments: None\n\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_endauthattr__doc__, 
++"closes the auth_attr database, cleans up storage. called automatically by \
++the destructor\n\tArguments: None\n\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_chkauthattr__doc__, "verifies if a user has a given \
++authorization.\n\tArguments: 2 Python strings, 'authname' and 'username'\n\
++\tReturns: True if the user is authorized, False otherwise");
++
++PyDoc_STRVAR(pyrbac_getauthattr__doc__, 
++"return one entry from the auth_attr database\n\
++\tArguments: None\n\
++\tReturns: a dict representing the authattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"short\": Short Description\n\
++\t\t\"long\": Long Description\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getauthnam__doc__, 
++"searches the auth_attr database for a given authorization name\n\
++\tArguments: a Python string containing the auth name\n\
++\tReturns: a dict representing the authattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"short\": Short Description\n\
++\t\t\"long\": Long Description\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++static PyMethodDef Authattr_methods[] = {
++	{"setauthattr", pyrbac_setauthattr, METH_NOARGS, pyrbac_setauthattr__doc__},
++	{"endauthattr", pyrbac_endauthattr, METH_NOARGS, pyrbac_endauthattr__doc__},
++	{"chkauthattr", pyrbac_chkauthattr, METH_VARARGS, pyrbac_chkauthattr__doc__},
++	{"getauthattr", pyrbac_getauthattr, METH_NOARGS, pyrbac_getauthattr__doc__},
++	{"getauthnam", pyrbac_getauthnam, METH_VARARGS, pyrbac_getauthnam__doc__},
++	{NULL}
++};
++
++PyTypeObject AuthattrType = {
++	PyObject_HEAD_INIT(NULL)
++	0,                         /*ob_size*/
++	"rbac.authattr",             /*tp_name*/
++	sizeof(Authattr),             /*tp_basicsize*/
++	0,                         /*tp_itemsize*/
++	(destructor)Authattr_dealloc, /*tp_dealloc*/
++	0,                         /*tp_print*/
++	0,                         /*tp_getattr*/
++	0,                         /*tp_setattr*/
++	0,                         /*tp_compare*/
++	0,                         /*tp_repr*/
++	0,                         /*tp_as_number*/
++	0,                         /*tp_as_sequence*/
++	0,                         /*tp_as_mapping*/
++	0,                         /*tp_hash */
++	0,                         /*tp_call*/
++	0,                         /*tp_str*/
++	0,                         /*tp_getattro*/
++	0,                         /*tp_setattro*/
++	0,                         /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT |
++	Py_TPFLAGS_BASETYPE |
++	Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
++	pyrbac_authattr__doc__,           /* tp_doc */
++	0,		               /* tp_traverse */
++	0,		               /* tp_clear */
++	0,		               /* tp_richcompare */
++	0,		               /* tp_weaklistoffset */
++	pyrbac_authattr__iter__,		               /* tp_iter */
++	pyrbac_authattr_next,         /* tp_iternext */
++	Authattr_methods,             /* tp_methods */
++	0,             /* tp_members */
++	0,                         /* tp_getset */
++	0,                         /* tp_base */
++	0,                         /* tp_dict */
++	0,                         /* tp_descr_get */
++	0,                         /* tp_descr_set */
++	0,                         /* tp_dictoffset */
++	(initproc)Authattr_init,      /* tp_init */
++	0,                         /* tp_alloc */
++	Authattr_new,                 /* tp_new */
++};
+diff --git Python-2.6.4/Modules/execattr.c Python-2.6.4/Modules/execattr.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/execattr.c
+@@ -0,0 +1,314 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++/*
++ * RBAC Bindings for Python - exec_attr functions
++ */
++
++#include <exec_attr.h>
++#include "Python.h"
++#include "pyrbac.h"
++
++static PyObject *
++pyrbac_setexecattr(PyObject* self, PyObject* args) {
++	setexecattr();
++	return Py_None;
++}
++
++static PyObject *
++pyrbac_endexecattr(PyObject* self, PyObject* args) {
++	endexecattr();
++	return Py_None;
++}
++
++PyObject *
++pyrbac_getexecuserprofattr(PyObject* self, char* userprofname, char* type, char* id, int mode) {
++
++	PyObject* ep_data = (mode == PYRBAC_ATTR_MODE) ? NULL : PyList_New(0);
++	
++	if (ep_data == NULL && mode != PYRBAC_ATTR_MODE )
++		return NULL;
++	
++	execattr_t *execprof;
++	if (mode == PYRBAC_USER_MODE)
++		execprof = getexecuser(userprofname, type, id, GET_ALL);
++	else if (mode == PYRBAC_PROF_MODE)
++		execprof = getexecprof(userprofname, type, id, GET_ALL);
++	else if (mode == PYRBAC_ATTR_MODE)
++		execprof = getexecattr();
++	else
++		return NULL;
++
++	if (execprof == NULL)
++		return Py_None;
++	
++	execattr_t *execprof_head = execprof;
++
++	while(execprof != NULL) {
++		
++		PyObject* kv_data = PyDict_New();
++
++		if(execprof->attr != NULL) {
++			int len;
++			for(len = 0; len < execprof->attr->length; len++) {
++				kv_t current = execprof->attr->data[len];
++
++				PyObject* set = PyList_New(NULL);
++				char* saveptr;
++				char* item = strtok_r(current.value, ",", &saveptr);
++				PyList_Append(set, PyString_FromString(item));
++
++				while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++					if(PyList_Append(set, PyString_FromString(item)) != 0) {
++						Py_XDECREF(set);
++						Py_XDECREF(kv_data);
++						free_execattr(execprof_head);
++						return NULL;
++					}
++				}
++				if(PyDict_SetItemString(kv_data, current.key, set)) {
++						free_execattr(execprof_head);
++						return NULL;
++				}
++			}
++		}
++		PyObject* entry = Py_BuildValue("{s:s,s:s,s:s,s:s,s:s,s:s,s:O}",
++			"name", execprof->name,
++			"type", execprof->type,
++			"policy", execprof->policy,
++			"res1", execprof->res1,
++			"res2", execprof->res2,
++			"id", execprof->id,
++			"attributes", kv_data);
++		
++		if (entry == NULL) {
++			Py_XDECREF(kv_data);
++			free_execattr(execprof_head);
++			return NULL;
++		}
++		
++		if (mode == PYRBAC_ATTR_MODE) {
++			free_execattr(execprof_head);
++			return(entry);
++		}
++		PyList_Append(ep_data, entry);
++		execprof = execprof->next;
++	}
++
++	free_execattr(execprof_head);
++	return(ep_data);
++ 
++}
++
++static PyObject *
++pyrbac_getexecuser(PyObject* self, PyObject* args) {
++	char* username = NULL;
++	char* type = NULL;
++	char* id = NULL;
++	
++	if(!PyArg_ParseTuple(args, "sss:getexecuser", &username, &type, &id))
++		return NULL;
++
++	return (pyrbac_getexecuserprofattr(self, username, type, id, PYRBAC_USER_MODE));
++}
++
++static PyObject *
++pyrbac_getexecprof(PyObject* self, PyObject* args) {
++
++	char* profname = NULL;
++	char* type = NULL;
++	char* id = NULL;
++	
++	if(!PyArg_ParseTuple(args, "sss:getexecprof", &profname, &type, &id))
++		return NULL;
++
++	return (pyrbac_getexecuserprofattr(self, profname, type, id, PYRBAC_PROF_MODE));
++}
++
++static PyObject*
++pyrbac_getexecattr(PyObject* self, PyObject* args) {
++	return pyrbac_getexecuserprofattr(self, NULL, NULL, NULL, PYRBAC_ATTR_MODE);
++}
++
++static PyObject*
++pyrbac_execattr_next(PyObject* self, PyObject* args) {
++	PyObject* retval = pyrbac_getexecattr(self, args);
++	if( retval == Py_None ) {
++		setexecattr();
++		return NULL;
++	}
++	return retval;
++}
++static PyObject*
++pyrbac_execattr__iter__(PyObject* self, PyObject* args) {
++	return self;
++}
++
++typedef struct {
++	PyObject_HEAD
++} Execattr;
++
++static void
++Execattr_dealloc(Execattr* self) {
++	endexecattr();
++	self->ob_type->tp_free((PyObject*) self);
++}
++
++static PyObject*
++Execattr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
++	Execattr *self;
++	self = (Execattr*)type->tp_alloc(type, 0);
++
++	return ((PyObject *) self);
++}
++
++static int
++Execattr_init(Execattr* self, PyObject *args, PyObject *kwargs) {
++	setexecattr();
++	return 0;
++}
++
++static char pyrbac_execattr__doc__[];
++
++PyDoc_STRVAR(pyrbac_execattr__doc__, "provides functions for \
++interacting with the execution profiles database. May be iterated over to \
++enumerate exec_attr(4) entries\n\n\
++Methods provided:\n\
++setexecattr\n\
++endexecattr\n\
++getexecattr\n\
++getexecprof\n\
++getexecuser");
++
++
++static char pyrbac_getexecuser__doc__[];
++static char pyrbac_getexecprof__doc__[];
++static char pyrbac_getexecattr__doc__[];
++static char pyrbac_setexecattr__doc__[];
++static char pyrbac_endexecattr__doc__[];
++
++PyDoc_STRVAR(pyrbac_setexecattr__doc__,
++"\"rewinds\" the exec_attr functions to the first entry in the db. Called \
++automatically by the constructor.\n\
++\tArguments: None\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_endexecattr__doc__, 
++"closes the exec_attr database, cleans up storage. called automatically by \
++the destructor.\n\
++\tArguments: None\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_getexecuser__doc__, "corresponds with getexecuser(3SECDB)\
++\nTakes: \'username\', \'type\', \'id\'\n\
++Return: a single exec_attr entry\n\
++\tArguments: None\n\
++\tReturns: a dict representation of an execattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"type\": Profile Type\n\
++\t\t\"policy\": Policy attributes are relevant in\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"id\": unique identifier\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as\
++either a list or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getexecprof__doc__, "corresponds with getexecprof(3SECDB)\
++\nTakes: \'profile name\', \'type\', \'id\'\n\
++\tReturns: a dict representation of an execattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"type\": Profile Type\n\
++\t\t\"policy\": Policy attributes are relevant in\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"id\": unique identifier\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as\
++either a list or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getexecattr__doc__, "corresponds with getexecattr(3SECDB)\
++\nTakes 0 arguments\n\
++\tReturns: a dict representation of an execattr_t struct:\n\
++\t\t\"name\": Authorization Name\n\
++\t\t\"type\": Profile Type\n\
++\t\t\"policy\": Policy attributes are relevant in\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"id\": unique identifier\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as\
++either a list or a string depending on value");
++
++static PyMethodDef Execattr_methods[] = {
++	{"setexecattr", pyrbac_setexecattr, METH_NOARGS, pyrbac_setexecattr__doc__},
++	{"endexecattr", pyrbac_endexecattr, METH_NOARGS, pyrbac_endexecattr__doc__},
++	{"getexecprof", pyrbac_getexecprof, METH_VARARGS, pyrbac_getexecprof__doc__},	
++	{"getexecuser", pyrbac_getexecuser, METH_VARARGS, pyrbac_getexecuser__doc__},
++	{"getexecattr", pyrbac_getexecattr, METH_NOARGS, pyrbac_getexecattr__doc__},
++	{NULL}
++};
++
++PyTypeObject ExecattrType = {
++	PyObject_HEAD_INIT(NULL)
++	0,                         /*ob_size*/
++	"rbac.execattr",             /*tp_name*/
++	sizeof(Execattr),             /*tp_basicsize*/
++	0,                         /*tp_itemsize*/
++	(destructor)Execattr_dealloc, /*tp_dealloc*/
++	0,                         /*tp_print*/
++	0,                         /*tp_getattr*/
++	0,                         /*tp_setattr*/
++	0,                         /*tp_compare*/
++	0,                         /*tp_repr*/
++	0,                         /*tp_as_number*/
++	0,                         /*tp_as_sequence*/
++	0,                         /*tp_as_mapping*/
++	0,                         /*tp_hash */
++	0,                         /*tp_call*/
++	0,                         /*tp_str*/
++	0,                         /*tp_getattro*/
++	0,                         /*tp_setattro*/
++	0,                         /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT |
++	Py_TPFLAGS_BASETYPE |
++	Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
++	pyrbac_execattr__doc__,           /* tp_doc */
++	0,		               /* tp_traverse */
++	0,		               /* tp_clear */
++	0,		               /* tp_richcompare */
++	0,		               /* tp_weaklistoffset */
++	pyrbac_execattr__iter__,		               /* tp_iter */
++	pyrbac_execattr_next,         /* tp_iternext */
++	Execattr_methods,             /* tp_methods */
++	0,             /* tp_members */
++	0,                         /* tp_getset */
++	0,                         /* tp_base */
++	0,                         /* tp_dict */
++	0,                         /* tp_descr_get */
++	0,                         /* tp_descr_set */
++	0,                         /* tp_dictoffset */
++	(initproc)Execattr_init,      /* tp_init */
++	0,                         /* tp_alloc */
++	Execattr_new,                 /* tp_new */
++};
+diff --git Python-2.6.4/Modules/privileges.c Python-2.6.4/Modules/privileges.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/privileges.c
+@@ -0,0 +1,230 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++/*
++ * privileges(5) bindings for Python
++ */
++
++#include <priv.h>
++#include "Python.h"
++
++static PyObject *
++pyprivileges_setppriv( PyObject *self, PyObject *args) {
++	priv_op_t op = -1 ; 
++	priv_ptype_t which = NULL;
++
++	PyObject* set_list = NULL;
++
++	priv_set_t * set = NULL;
++
++	if(!PyArg_ParseTuple(args, "iiO:setppriv", &op, &which, &set_list))
++		return NULL;
++	
++	if((op != PRIV_ON && op != PRIV_OFF && op != PRIV_SET) ||
++		(which != PRIV_PERMITTED && which != PRIV_EFFECTIVE &&
++		which != PRIV_INHERITABLE && which != PRIV_LIMIT))
++		return NULL;
++	
++	PyObject* set_string = PyList_GetItem(set_list, 0);
++	int i;
++	for (i = 1; i < PyList_Size(set_list); ++i) {
++		PyString_Concat(&set_string, PyString_FromString(","));
++		PyString_Concat(&set_string, PyList_GetItem(set_list, i));
++	}
++
++	set = priv_str_to_set(PyString_AsString(set_string), ",", NULL );
++
++	if ( set == NULL )
++		return NULL;
++
++	long ret = (long) setppriv(op, which, set);
++	priv_freeset(set);	
++	// Python inverts true & false
++	if(ret)
++		Py_RETURN_FALSE;
++	
++	Py_RETURN_TRUE;
++}
++
++static PyObject *
++pyprivileges_getppriv( PyObject *self, PyObject *args) {
++
++	char* set_str = NULL;
++	priv_ptype_t which = NULL;
++	priv_set_t * set = priv_allocset();
++	if (set == NULL)
++		return NULL;
++
++	if(!PyArg_ParseTuple(args, "i:getppriv", &which))
++		return NULL;
++
++	if (which != PRIV_PERMITTED && which != PRIV_EFFECTIVE &&
++	which != PRIV_INHERITABLE && which != PRIV_LIMIT)
++		return NULL;
++
++	if (getppriv(which, set) != 0)
++		return NULL;
++	
++	set_str = priv_set_to_str(set, ',', PRIV_STR_LIT);
++	priv_freeset(set);
++	
++	PyObject* set_list = PyList_New(NULL);
++	char* saveptr;
++	char* item = strtok_r(set_str, ",", &saveptr);
++	PyList_Append(set_list, PyString_FromString(item));
++
++	while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++		if(PyList_Append(set_list, PyString_FromString(item)) != 0) {
++			Py_XDECREF(set_list);
++			return NULL;
++		}
++	}
++
++	return(set_list);
++}
++
++static PyObject *
++pyprivileges_priv_inverse( PyObject *self, PyObject *args ) {
++
++	PyObject* set_list_in = NULL;
++	if(!PyArg_ParseTuple(args, "O:priv_inverse", &set_list_in))
++		return NULL;
++
++	PyObject* set_string = PyList_GetItem(set_list_in, 0);
++	int i;
++	for (i = 1; i < PyList_Size(set_list_in); ++i) {
++		PyString_Concat(set_string, PyString_FromString(","));
++		PyString_Concat(set_string, PyList_GetItem(set_list_in, i));
++	}
++
++	priv_set_t * set = priv_str_to_set(PyString_AsString(set_string), ",", NULL);
++	if (set == NULL)
++		return NULL;
++	priv_inverse(set);
++	char * ret_str = priv_set_to_str(set, ',', PRIV_STR_LIT);
++	priv_freeset(set);
++	
++	PyObject* set_list_out = PyList_New(NULL);
++	char* saveptr;
++	char* item = strtok_r(ret_str, ",", &saveptr);
++	PyList_Append(set_list_out, PyString_FromString(item));
++
++	while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++		if(PyList_Append(set_list_out, PyString_FromString(item)) != 0) {
++			Py_XDECREF(set_list_out);
++			return NULL;
++		}
++	}
++	
++	Py_XDECREF(set_list_in);
++	
++	return(set_list_out);
++}
++
++/* priv_ineffect is a convienient wrapper to priv_get
++ * however priv_set is, in the context of python, not
++ * much of a convienience, so it's omitted
++ */
++static PyObject * 
++pyprivileges_priv_ineffect(PyObject* self, PyObject* args) {
++	char* privstring=NULL;
++	if (!PyArg_ParseTuple(args, "s:priv_ineffect", &privstring))
++		return NULL;
++	return PyBool_FromLong(priv_ineffect(privstring));
++}
++
++
++static char pyprivileges__doc__[];
++PyDoc_STRVAR(pyprivileges__doc__, 
++"Provides functions for interacting with the Solaris privileges(5) framework\n\
++Functions provided:\n\
++setppriv\n\
++getppriv\n\
++priv_ineffect\n\
++priv_inverse");
++
++static char pyprivileges_setppriv__doc__[];
++static char pyprivileges_getppriv__doc__[];
++static char pyprivileges_priv_ineffect__doc__[];
++static char pyprivileges_priv_inverse__doc__[];
++
++PyDoc_STRVAR(pyprivileges_setppriv__doc__, 
++"Facilitates setting the permitted/inheritable/limit/effective privileges set\n\
++\tArguments:\n\
++\t\tone of (PRIV_ON|PRIV_OFF|PRIV_SET)\n\
++\t\tone of (PRIV_PERMITTED|PRIV_INHERITABLE|PRIV_LIMIT|PRIV_EFFECTIVE)\n\
++\t\tset of privileges: a list of strings\n\
++\tReturns: True on success, False on failure\
++");
++
++PyDoc_STRVAR(pyprivileges_getppriv__doc__, 
++"Return the process privilege set\n\
++\tArguments:\n\
++\t\tone of (PRIV_PERMITTED|PRIV_INHERITABLE|PRIV_LIMIT|PRIV_EFFECTIVE)\n\
++\tReturns: a Python list of strings");
++	
++PyDoc_STRVAR(pyprivileges_priv_ineffect__doc__, 
++"Checks for a privileges presence in the effective set\n\
++\tArguments: a String\n\
++\tReturns: True if the privilege is in effect, False otherwise");
++
++PyDoc_STRVAR(pyprivileges_priv_inverse__doc__, 
++"The complement of the set of privileges\n\
++\tArguments: a list of strings\n\tReturns: a list of strings");
++
++static PyMethodDef module_methods[] = {
++	{"setppriv", pyprivileges_setppriv, METH_VARARGS, pyprivileges_setppriv__doc__}, 
++	{"getppriv", pyprivileges_getppriv, METH_VARARGS, pyprivileges_getppriv__doc__}, 
++	{"priv_ineffect", pyprivileges_priv_ineffect, METH_VARARGS, pyprivileges_priv_ineffect__doc__},
++	{"priv_inverse", pyprivileges_priv_inverse, METH_VARARGS, pyprivileges_priv_inverse__doc__},
++	{NULL}
++};
++
++
++#ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
++#define PyMODINIT_FUNC void
++#endif
++PyMODINIT_FUNC
++initprivileges(void) {
++	PyObject* m;
++
++	m = Py_InitModule3("privileges", module_methods, pyprivileges__doc__);
++		if ( m == NULL )
++		return;
++		
++	PyObject* d = PyModule_GetDict(m);
++	if (d == NULL)
++		return;
++
++	PyDict_SetItemString(d, "PRIV_ON", PyInt_FromLong((long)PRIV_ON));
++	PyDict_SetItemString(d, "PRIV_OFF", PyInt_FromLong((long)PRIV_OFF));
++	PyDict_SetItemString(d, "PRIV_SET", PyInt_FromLong((long)PRIV_SET));
++
++	PyDict_SetItemString(d, "PRIV_PERMITTED", PyInt_FromLong((long)PRIV_PERMITTED));
++	PyDict_SetItemString(d, "PRIV_INHERITABLE", PyInt_FromLong((long)PRIV_INHERITABLE));
++	PyDict_SetItemString(d, "PRIV_LIMIT", PyInt_FromLong((long)PRIV_LIMIT));
++	PyDict_SetItemString(d, "PRIV_EFFECTIVE", PyInt_FromLong((long)PRIV_EFFECTIVE));
++}
+diff --git Python-2.6.4/Modules/pyrbac.c Python-2.6.4/Modules/pyrbac.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/pyrbac.c
+@@ -0,0 +1,69 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++/*
++ * RBAC Bindings for Python
++ */
++
++#include <Python.h>
++#include "pyrbac.h"
++
++static PyMethodDef module_methods[] = {NULL};
++static char pyrbac__doc__[];
++
++PyDoc_STRVAR(pyrbac__doc__, "provides access to some objects \
++for interaction with the Solaris Role-Based Access Control \
++framework.\n\nDynamic objects:\n\
++userattr -- for interacting with user_attr(4)\n\
++authattr -- for interacting with auth_attr(4)\n\
++execattr -- for interacting with exec_attr(4)\n");
++
++#ifndef PyMODINIT_FUNC	/* declarations for DLL import/export */
++#define PyMODINIT_FUNC void
++#endif
++PyMODINIT_FUNC
++initrbac(void) {
++	PyObject* m;
++	if (PyType_Ready(&AuthattrType) < 0 || 
++		PyType_Ready(&ExecattrType) < 0 ||
++		PyType_Ready(&UserattrType) < 0 )
++		return;
++
++	m = Py_InitModule3("rbac", module_methods, pyrbac__doc__);
++	if ( m == NULL )
++		return;
++	
++	Py_INCREF(&AuthattrType);
++	PyModule_AddObject(m, "authattr", (PyObject*)&AuthattrType);
++
++	Py_INCREF(&ExecattrType);
++	PyModule_AddObject(m, "execattr", (PyObject*)&ExecattrType);
++
++	Py_INCREF(&UserattrType);
++	PyModule_AddObject(m, "userattr", (PyObject*)&UserattrType);
++
++}
++
+diff --git Python-2.6.4/Modules/pyrbac.h Python-2.6.4/Modules/pyrbac.h
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/pyrbac.h
+@@ -0,0 +1,46 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++/* 
++ * RBAC bindings for python
++ */
++#ifndef PYRBAC_H
++#define PYRBAC_H
++
++#include <secdb.h>
++
++
++#define PYRBAC_USER_MODE 1
++#define PYRBAC_PROF_MODE 2
++#define PYRBAC_ATTR_MODE 3
++#define PYRBAC_NAM_MODE 4
++#define PYRBAC_UID_MODE 5
++
++PyTypeObject AuthattrType;
++PyTypeObject ExecattrType;
++PyTypeObject UserattrType;
++
++#endif
+diff --git Python-2.6.4/Modules/userattr.c Python-2.6.4/Modules/userattr.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/Modules/userattr.c
+@@ -0,0 +1,309 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++/*
++ * RBAC Bindings for Python - user_attr functions
++ */
++
++#include <stdio.h>
++#include <user_attr.h>
++#include "Python.h"
++#include "pyrbac.h"
++
++static PyObject*
++pyrbac_setuserattr(PyObject* self, PyObject* args) {
++	setuserattr();
++	return Py_None;
++}
++
++static PyObject*
++pyrbac_enduserattr(PyObject* self, PyObject* args) {
++	enduserattr();
++	return Py_None;
++}
++
++PyObject*
++pyrbac_getuseruidnamattr(PyObject* self, void* arg, int mode, char* filename) {
++	
++	userattr_t *ret_userattr;
++
++	if (mode == PYRBAC_ATTR_MODE) {
++	    if (filename != NULL) {
++            FILE* file = fopen(filename, "r");
++            if (file == NULL)
++                return NULL;
++	        ret_userattr = fgetuserattr(file);
++	        if (fclose(file))
++                return NULL;
++	    }
++	    else
++	    	ret_userattr = getuserattr();
++	}
++	else if (mode == PYRBAC_NAM_MODE)
++		ret_userattr = getusernam((char*) arg);
++	else if (mode == PYRBAC_UID_MODE)
++		ret_userattr = getuseruid(*((uid_t*) arg));
++	
++	if (ret_userattr == NULL)
++		return Py_None;
++	
++	PyObject* entry = PyTuple_New(5);
++	if (entry == NULL) {
++		free_userattr(ret_userattr);
++		return NULL;
++	}
++	
++	PyObject* kv_data = PyDict_New();
++
++	if(ret_userattr->attr != NULL) {
++		int len;
++		for(len = 0; len < ret_userattr->attr->length; len++) {
++			kv_t current = ret_userattr->attr->data[len];
++
++			PyObject* set = PyList_New(NULL);
++			char* saveptr;
++			char* item = strtok_r(current.value, ",", &saveptr);
++			PyList_Append(set, PyString_FromString(item));
++
++			while((item = strtok_r(NULL, ",", &saveptr)) != NULL) {
++				if(PyList_Append(set, PyString_FromString(item)) != 0) {
++					Py_XDECREF(set);
++					Py_XDECREF(kv_data);
++					free_userattr(ret_userattr);
++					return NULL;
++				}
++			}
++			if(PyDict_SetItemString(kv_data, current.key, set)) {
++					free_userattr(ret_userattr);
++					return NULL;
++			}
++		}
++	}
++	entry = Py_BuildValue("{s:s,s:s,s:s,s:s,s:O}", 
++		"name", ret_userattr->name,
++		"qualifier", ret_userattr->qualifier,
++		"res1", ret_userattr->res1,
++		"res2", ret_userattr->res2,
++		"attributes", kv_data);
++
++	free_userattr(ret_userattr);
++	
++	return entry;
++}
++
++
++static PyObject*
++pyrbac_getuserattr(PyObject* self, PyObject* args) {
++	return(pyrbac_getuseruidnamattr(self, (void*) NULL, PYRBAC_ATTR_MODE, NULL));
++}
++
++static PyObject*
++pyrbac_fgetuserattr(PyObject* self, PyObject* args) {
++	char* filename = NULL;
++	if(!PyArg_ParseTuple(args, "s:fgetuserattr", &filename))
++		return NULL;
++	return(pyrbac_getuseruidnamattr(self, NULL, PYRBAC_ATTR_MODE, filename));
++}
++
++static PyObject*
++pyrbac_getusernam(PyObject* self, PyObject* args) {
++	char* name = NULL;
++	if(!PyArg_ParseTuple(args, "s:getusernam", &name))
++		return NULL;
++	return(pyrbac_getuseruidnamattr(self, (void*) name, PYRBAC_NAM_MODE, NULL));
++}
++
++static PyObject*
++pyrbac_getuseruid(PyObject* self, PyObject* args) {
++	uid_t uid;
++	if(!PyArg_ParseTuple(args, "i:getuseruid", &uid))
++		return NULL;
++	return(pyrbac_getuseruidnamattr(self, (void*) &uid, PYRBAC_UID_MODE, NULL));
++}
++
++static PyObject*
++pyrbac_userattr_next(PyObject* self, PyObject* args) {
++	PyObject* retval = pyrbac_getuserattr(self, args);
++	if( retval == Py_None ) {
++		setuserattr();
++		return NULL;
++	}
++	return retval;
++}
++static PyObject*
++pyrbac_userattr__iter__(PyObject* self, PyObject* args) {
++	return self;
++}
++
++typedef struct {
++	PyObject_HEAD
++} Userattr;
++
++static void
++Userattr_dealloc(Userattr* self) {
++	enduserattr();
++	self->ob_type->tp_free((PyObject*) self);
++}
++
++static PyObject*
++Userattr_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
++	Userattr *self;
++	self = (Userattr*)type->tp_alloc(type, 0);
++
++	return ((PyObject *) self);
++}
++
++static int
++Userattr_init(Userattr* self, PyObject *args, PyObject *kwargs) {
++	setuserattr();
++	return 0;
++}
++
++static char pyrbac_userattr__doc__[];
++PyDoc_STRVAR(pyrbac_userattr__doc__, "provides functions for \
++interacting with the extended user attributes database. May be iterated over \
++to enumerate user_attr(4) entries\n\n\
++Methods provided:\n\
++setuserattr\n\
++enduserattr\n\
++getuserattr\n\
++fgetuserattr\n\
++getusernam\n\
++getuseruid");
++
++static char pyrbac_setuserattr__doc__[];
++static char pyrbac_enduserattr__doc__[];
++static char pyrbac_getuserattr__doc__[];
++static char pyrbac_getusernam__doc__[];
++static char pyrbac_getuseruid__doc__[];
++
++PyDoc_STRVAR(pyrbac_setuserattr__doc__, "\"rewinds\" the user_attr functions \
++to the first entry in the db. Called automatically by the constructor.\n\
++\tArguments: None\n\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_enduserattr__doc__, "closes the user_attr database, \
++cleans up storage. called automatically by the destructor\n\
++\tArguments: None\n\
++\tReturns: None");
++
++PyDoc_STRVAR(pyrbac_getuserattr__doc__, "Return a single user_attr entry\n \
++\tArguments: None\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value"
++);
++
++PyDoc_STRVAR(pyrbac_fgetuserattr__doc__, "Return a single user_attr entry \
++from a file, bypassing nsswitch.conf\n\
++\tArguments: \'filename\'\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getusernam__doc__, "Searches for a user_attr entry with a \
++given user name\n\
++\tArgument: \'username\'\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++PyDoc_STRVAR(pyrbac_getuseruid__doc__, "Searches for a user_attr entry with a \
++given uid\n\
++\tArgument: uid\n\
++\tReturns: a dict representation of a userattr_t struct:\n\
++\t\t\"name\": username\n\
++\t\t\"qualifier\": reserved\n\
++\t\t\"res1\": reserved\n\
++\t\t\"res2\": reserved\n\
++\t\t\"attributes\": A Python dict keyed by attribute & valued as either a list \
++or a string depending on value");
++
++static PyMethodDef Userattr_methods[] = {
++	{"setuserattr", pyrbac_setuserattr, METH_NOARGS, pyrbac_setuserattr__doc__},
++	{"enduserattr", pyrbac_enduserattr, METH_NOARGS, pyrbac_enduserattr__doc__},
++	{"getuserattr", pyrbac_getuserattr, METH_NOARGS, pyrbac_getuserattr__doc__},
++	{"fgetuserattr", pyrbac_fgetuserattr, METH_VARARGS, pyrbac_fgetuserattr__doc__},
++	{"getusernam", pyrbac_getusernam, METH_VARARGS, pyrbac_getusernam__doc__},
++	{"getuseruid", pyrbac_getuseruid, METH_VARARGS, pyrbac_getuseruid__doc__},
++	{NULL}
++};
++
++PyTypeObject UserattrType = {
++	PyObject_HEAD_INIT(NULL)
++	0,                         /*ob_size*/
++	"rbac.userattr",             /*tp_name*/
++	sizeof(Userattr),             /*tp_basicsize*/
++	0,                         /*tp_itemsize*/
++	(destructor)Userattr_dealloc, /*tp_dealloc*/
++	0,                         /*tp_print*/
++	0,                         /*tp_getattr*/
++	0,                         /*tp_setattr*/
++	0,                         /*tp_compare*/
++	0,                         /*tp_repr*/
++	0,                         /*tp_as_number*/
++	0,                         /*tp_as_sequence*/
++	0,                         /*tp_as_mapping*/
++	0,                         /*tp_hash */
++	0,                         /*tp_call*/
++	0,                         /*tp_str*/
++	0,                         /*tp_getattro*/
++	0,                         /*tp_setattro*/
++	0,                         /*tp_as_buffer*/
++	Py_TPFLAGS_DEFAULT |
++	Py_TPFLAGS_BASETYPE |
++	Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
++	pyrbac_userattr__doc__,    /* tp_doc */
++	0,		               /* tp_traverse */
++	0,		               /* tp_clear */
++	0,		               /* tp_richcompare */
++	0,		               /* tp_weaklistoffset */
++	pyrbac_userattr__iter__,		               /* tp_iter */
++	pyrbac_userattr_next,         /* tp_iternext */
++	Userattr_methods,             /* tp_methods */
++	0,             /* tp_members */
++	0,                         /* tp_getset */
++	0,                         /* tp_base */
++	0,                         /* tp_dict */
++	0,                         /* tp_descr_get */
++	0,                         /* tp_descr_set */
++	0,                         /* tp_dictoffset */
++	(initproc)Userattr_init,      /* tp_init */
++	0,                         /* tp_alloc */
++	Userattr_new,                 /* tp_new */
++};
+diff --git Python-2.6.4/setup.py Python-2.6.4/setup.py
+--- Python-2.6.4/setup.py
++++ Python-2.6.4/setup.py
+@@ -1290,6 +1290,22 @@
+             exts.append( Extension('dlpi', ['dlpimodule.c'],
+                                    libraries = ['dlpi']) )
+ 
++        # privileges module (Solaris)
++        priv_inc = find_file('priv.h', [], inc_dirs)
++        if priv_inc is not None:
++            exts.append( Extension('privileges', ['privileges.c']))
++
++        # rbac module (Solaris)
++        secdb_inc = find_file('secdb.h', [], inc_dirs)
++        aa_inc = find_file('auth_attr.h', [], inc_dirs)
++        ea_inc = find_file('exec_attr.h', [], inc_dirs)
++        ua_inc = find_file('user_attr.h', [], inc_dirs)
++        if secdb_inc is not None and aa_inc is not None and \
++            ea_inc is not None and ua_inc is not None:
++            exts.append( Extension('rbac', ['pyrbac.c', 'authattr.c', \
++                                   'execattr.c', 'userattr.c'],
++                                   libraries = ['nsl', 'socket', 'secdb']) )
++
+         # Thomas Heller's _ctypes module
+         self.detect_ctypes(inc_dirs, lib_dirs)
+ 
+diff --git Python-2.6.4/Lib/test/privrbac.py Python-2.6.4/Lib/test/privrbac.py
+new file mode 100644
+--- /dev/null	2011-02-12 03:13:57.000000000 -0600
++++ Python-2.6.4/Lib/test/privrbactest.py	2011-01-20 13:52:42.862305331 -0600
+@@ -0,0 +1,290 @@
++#!/usr/bin/python2.6
++#
++# CDDL HEADER START
++#
++# The contents of this file are subject to the terms of the
++# Common Development and Distribution License (the "License").
++# You may not use this file except in compliance with the License.
++#
++# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++# or http://www.opensolaris.org/os/licensing.
++# See the License for the specific language governing permissions
++# and limitations under the License.
++#
++# When distributing Covered Code, include this CDDL HEADER in each
++# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++# If applicable, add the following below this CDDL HEADER, with the
++# fields enclosed by brackets "[]" replaced with your own identifying
++# information: Portions Copyright [yyyy] [name of copyright owner]
++#
++# CDDL HEADER END
++#
++
++# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
++# Use is subject to license terms.
++
++import privileges
++import rbac
++import os
++import sys
++import tempfile
++
++# privileges tests
++
++def test_setppriv():
++    amchild = os.fork()
++    if amchild == 0:
++        if privileges.setppriv(privileges.PRIV_OFF, privileges.PRIV_EFFECTIVE, 
++            ['proc_fork']):
++            try:
++                os.fork()
++                sys.exit(1)
++            except OSError, e:
++                sys.exit(0)
++
++    child = os.wait()
++    if child[1] is not 0:
++        print "setppriv. Bad exit status from pid %i\n" % child[0]
++        return False
++    return True
++
++def test_getppriv():
++    if 'proc_fork' in privileges.getppriv(privileges.PRIV_LIMIT):
++        return True
++    print "getppriv or PRIV_PROC_FORK not in PRIV_LIMIT.\n"
++    return False
++
++def test_priv_ineffect():
++    if privileges.priv_ineffect('proc_fork'):
++        return True
++    print "priv_ineffect or PRIV_PROC_FORK not in effect\n"
++    return False
++
++# authattr tests
++
++def test_chkauthattr():
++    try:
++        a = rbac.authattr()
++    except Exception, e:
++        print "Could not instantiate authattr object: %s\n" % e
++        return False
++    try:
++        res = a.chkauthattr('solaris.*', 'root')
++    except Exception, e:
++        print "chkauthattr failed: %s\n" % e
++        return False
++    if not res:
++        print "chkauthattr failed or \'root\' lacks \'solaris.*\'\n"
++        return False
++    return True
++
++def test_getauthattr():
++    try:
++        a = rbac.authattr()
++    except Exception, e:
++        print "Could not instantiate authattr object: %s\n" % e
++        return False
++    try:
++        res = a.getauthattr()
++    except Exception, e:
++        print "getauthattr failed: %s\n" % e
++        return False
++    if not 'name' in res.keys():
++        print "getauthattr failed\n"
++        return False
++    return True
++
++def test_getauthnam():
++    try:
++        a = rbac.authattr()
++    except Exception, e:
++        print "Could not instantiate authattr object: %s\n" % e
++        return False
++    try:
++        res = a.getauthnam('solaris.')
++    except Exception, e:
++        print "getauthnam failed: %s\n" % e
++        return False
++    if not res:
++        print "getauthnam failed or \'solaris.\' not in auth_attr(4)\n"
++        return False
++    return True
++
++def test_authattr_iter():
++    try:
++        a = rbac.authattr()
++    except Exception, e:
++        print "Could not instantiate authattr object: %s\n" % e
++        return False
++    res = a.next()
++    if not 'name' in res.keys() or type(a) != type(a.__iter__()):
++        print "authattr object is not an iterable\n"
++        return False
++    return True
++
++# execattr tests
++
++def test_getexecattr():
++    try:
++        a = rbac.execattr()
++    except Exception, e:
++        print "Could not instantiate execattr object: %s\n" % e
++        return False
++    try:
++        res = a.getexecattr()
++    except Exception, e:
++        print "getexecattr failed: %s\n" % e
++        return False
++    if not 'name' in res.keys():
++        print "getexecattr failed\n"
++        return False
++    return True
++
++def test_getexecuser():
++    try:
++        a = rbac.execattr()
++    except Exception, e:
++        print "Could not instantiate execattr object: %s\n" % e
++        return False
++    try:
++        res = a.getexecuser("root", "act", "*;*;*;*;*")
++    except Exception, e:
++        print "getexecuser failed: %s\n" % e
++        return False
++    if not res:
++        print "getexecuser failed or \'root\' not assigned to \'act\', " \
++            "\'*;*;*;*;*\' \n"
++        return False
++    return True
++
++
++def test_getexecprof():
++    try:
++        a = rbac.execattr()
++    except Exception, e:
++        print "Could not instantiate execattr object: %s\n" % e
++        return False
++    try:
++        res = a.getexecprof("All", "cmd", "*")
++    except Exception, e:
++        print "getexecprof failed: %s\n" % e
++        return False
++    if not res:
++        print "getexecprof failed or \'All\' not granted \'cmd\' : \'*\'\n"
++        return False
++    return True
++
++def test_execattr_iter():
++    try:
++        a = rbac.execattr()
++    except Exception, e:
++        print "Could not instantiate execattr object: %s\n" % e
++        return False
++    res = a.next()
++    if not 'name' in res.keys() or type(a) != type(a.__iter__()):
++        print "execattr object is not an iterable\n"
++        return False
++    return True
++
++# userattr tests
++
++def test_getuserattr():
++    try:
++        a = rbac.userattr()
++    except Exception, e:
++        print "Could not instantiate userattr object: %s\n" % e
++        return False
++    try:
++        res = a.getuserattr()
++    except Exception, e:
++        print "getuserattr failed: %s\n" % e
++        return False
++    if not 'name' in res.keys():
++        print "getuserattr failed\n"
++        return False
++    return True
++
++def test_fgetuserattr():
++    temp = tempfile.NamedTemporaryFile()
++    temp.write("user::::profiles=Software Installation;roles=foo;"\
++        "auths=solaris.foo.bar")
++    temp.seek(0)
++    try:
++        a = rbac.userattr()
++    except Exception, e:
++        print "Could not instantiate userattr object: %s\n" % e
++        return False
++    try:
++        res = a.fgetuserattr(temp.name)
++        temp.close()    
++    except Exception, e:
++        print "fgetuserattr failed: %s\n" % e
++        temp.close()
++        return False
++    if not 'name' in res.keys():
++        print "fgetuserattr failed\n"
++        return False
++    return True
++
++def test_getuseruid():
++    try:
++        a = rbac.userattr()
++    except Exception, e:
++        print "Could not instantiate userattr object: %s\n" % e
++        return False
++    try:
++        res = a.getuseruid(0)
++    except Exception, e:
++        print "getusernam failed: %s\n" % e
++        return False
++    if not 'name' in res:
++        print "getusernam failed or no uid 0\n"
++        return False
++    return True
++
++def test_getusernam():
++    try:
++        a = rbac.userattr()
++    except Exception, e:
++        print "Could not instantiate userattr object: %s\n" % e
++        return False
++    try:
++        res = a.getusernam('root')
++    except Exception, e:
++        print "getusernam failed: %s\n" % e
++        return False
++    if not 'name' in res:
++        print "getusernam failed or no \'root\' user\n"
++        return False
++    return True
++
++def test_userattr_iter():
++    try:
++        a = rbac.userattr()
++    except Exception, e:
++        print "Could not instantiate userattr object: %s\n" % e
++        return False
++    res = a.next()
++    if not 'name' in res.keys() or type(a) != type(a.__iter__()):
++        print "userattr object is not an iterable\n"
++        return False
++    return True
++
++if not test_setppriv() or not test_getppriv() or not test_priv_ineffect():
++    print "*** Failures detected in privileges module\n"    
++    sys.exit(1)
++
++if not test_getauthattr() or not test_chkauthattr() or not test_getauthnam() \
++    or not test_authattr_iter:
++    print "*** Failures detected in rbac.authattr\n"
++    sys.exit(1)
++
++if not test_getexecattr() or not test_getexecuser() or not test_getexecprof() \
++    or not test_execattr_iter():
++    print "*** Failures detected in rbac.execattr\n"
++    sys.exit(1)
++
++if not test_getuserattr() or not test_fgetuserattr() or not test_getusernam()\
++    or not test_getuseruid() or not test_userattr_iter():
++    print "*** Failures detected in rbac.userattr\n"
++    sys.exit(1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-17-netpacket-packet-h.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,54 @@
+diff --git Python-2.6.4/Modules/socketmodule.c Python-2.6.4/Modules/socketmodule.c
+--- Python-2.6.4/Modules/socketmodule.c
++++ Python-2.6.4/Modules/socketmodule.c
+@@ -81,6 +81,14 @@
+ 
+ */
+ 
++#ifdef HAVE_NETPACKET_PACKET_H
++#ifdef sun
++#define USE_NETPACKET_PACKET_H 0
++#else
++#define USE_NETPACKET_PACKET_H 1
++#endif
++#endif
++
+ #ifdef __APPLE__
+   /*
+    * inet_aton is not available on OSX 10.3, yet we want to use a binary
+@@ -1092,7 +1100,7 @@
+ 		}
+ #endif
+ 
+-#ifdef HAVE_NETPACKET_PACKET_H
++#if USE_NETPACKET_PACKET_H
+ 	case AF_PACKET:
+ 	{
+ 		struct sockaddr_ll *a = (struct sockaddr_ll *)addr;
+@@ -1382,7 +1390,7 @@
+ 	}
+ #endif
+ 
+-#ifdef HAVE_NETPACKET_PACKET_H
++#if USE_NETPACKET_PACKET_H
+ 	case AF_PACKET:
+ 	{
+ 		struct sockaddr_ll* addr;
+@@ -1559,7 +1567,7 @@
+ 	}
+ #endif
+ 
+-#ifdef HAVE_NETPACKET_PACKET_H
++#if USE_NETPACKET_PACKET_H
+ 	case AF_PACKET:
+ 	{
+ 		*len_ret = sizeof (struct sockaddr_ll);
+@@ -4578,7 +4586,7 @@
+ 	PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF");
+ #endif
+ 
+-#ifdef HAVE_NETPACKET_PACKET_H
++#if USE_NETPACKET_PACKET_H
+ 	PyModule_AddIntConstant(m, "AF_PACKET", AF_PACKET);
+ 	PyModule_AddIntConstant(m, "PF_PACKET", PF_PACKET);
+ 	PyModule_AddIntConstant(m, "PACKET_HOST", PACKET_HOST);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-18-readline.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,31 @@
+diff --git Python-2.6.4/setup.py Python-2.6.4/setup.py
+--- Python-2.6.4/setup.py
++++ Python-2.6.4/setup.py
+@@ -572,6 +572,14 @@
+                 # This way a staticly linked custom readline gets picked up
+                 # before the (broken) dynamic library in /usr/lib.
+                 readline_extra_link_args = ('-Wl,-search_paths_first',)
++            elif sys.platform == 'sunos5':
++                if sys.maxint != 9223372036854775807L:
++                    readline_extra_link_args = ('-Wl,-zrecord,-L/usr/gnu/lib,-R/usr/gnu/lib,-lreadline,-lncurses',)
++                else:
++                    if os.path.exists('/usr/gnu/lib/sparcv9'):
++                        readline_extra_link_args = ('-Wl,-zrecord,-L/usr/gnu/lib/sparcv9,-R/usr/gnu/lib/sparcv9,-lreadline,-lncurses',)
++                    else:
++                        readline_extra_link_args = ('-Wl,-zrecord,-L/usr/gnu/lib/amd64,-R/usr/gnu/lib/amd64,-lreadline,-lncurses',)
+             else:
+                 readline_extra_link_args = ()
+ 
+@@ -588,6 +596,12 @@
+                                                ['/usr/lib/termcap'],
+                                                'termcap'):
+                 readline_libs.append('termcap')
++
++            if sys.platform == 'sunos5':
++                # ugly hack to make the build respect -zrecord set in
++                # readline_extra_link_args above
++                readline_libs = []
++
+             exts.append( Extension('readline', ['readline.c'],
+                                    library_dirs=['/usr/lib/termcap'],
+                                    extra_link_args=readline_extra_link_args,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-19-ext-stdio.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,34 @@
+diff --git Python-2.6.4/Modules/python.c Python-2.6.4/Modules/python.c
+--- Python-2.6.4/Modules/python.c
++++ Python-2.6.4/Modules/python.c
+@@ -6,6 +6,13 @@
+ #include <floatingpoint.h>
+ #endif
+ 
++#if defined(sun) && defined(__SVR4) && !defined(_LP64)
++#define USE_EXTENDED_FILE_STDIO 1
++#include <stdio.h>
++#include <stdio_ext.h>
++#include <signal.h>
++#endif
++
+ int
+ main(int argc, char **argv)
+ {
+@@ -20,5 +27,16 @@
+ 	m = fpgetmask();
+ 	fpsetmask(m & ~FP_X_OFL);
+ #endif
++#ifdef USE_EXTENDED_FILE_STDIO
++	/* enable extended FILE facility on Solaris so that Python
++           apps can keep more than 256 file descriptors open */
++	struct rlimit rlp;
++	(void) getrlimit(RLIMIT_NOFILE, &rlp);
++	rlp.rlim_cur = rlp.rlim_max;
++	if (setrlimit(RLIMIT_NOFILE, &rlp) != -1) {
++		enable_extended_FILE_stdio(-1, SIGABRT);
++	}
++#endif
++
+ 	return Py_Main(argc, argv);
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-20-py_db.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,1047 @@
+diff --git Python-2.6.4/Makefile.pre.in.orig Python-2.6.4/Makefile.pre.in
+--- Python-2.6.4/Makefile.pre.in.orig	Sun Feb 13 19:37:16 2011
++++ Python-2.6.4/Makefile.pre.in	Sun Feb 13 20:55:04 2011
+@@ -354,7 +354,7 @@
+ 
+ # Default target
+ all:		build_all
+-build_all:	$(BUILDPYTHON) oldsharedmods sharedmods
++build_all:	$(BUILDPYTHON) oldsharedmods sharedmods build-py_db
+ 
+ # Compile a binary with gcc profile guided optimization.
+ profile-opt:
+@@ -677,6 +677,20 @@
+ 
+ $(LIBRARY_OBJS) $(MODOBJS) Modules/python.o: $(PYTHON_HEADERS)
+ 
++SHLIB_FLAGS = -shared -fpic -M $(srcdir)/py_db/mapfile-vers
++
++libpython2.6_db.so.1.0:	$(srcdir)/py_db/libpython26_db.c
++	$(CC) -o $@ $(CFLAGS) $(CPPFLAGS) $(SHLIB_FLAGS) $<
++
++check_offset:	$(srcdir)/py_db/check_offsets.c
++	$(CC) -o $@ $(CFLAGS) $(CPPFLAGS) $<
++
++build-py_db:	libpython2.6_db.so.1.0 check_offset
++
++install-py_db:	libpython2.6_db.so.1.0 check_offset
++	$(INSTALL_SHARED) libpython2.6_db.so.1.0 $(DESTDIR)$(LIBDIR)
++	$(INSTALL_PROGRAM) check_offset $(DESTDIR)$(BINDIR)
++
+ install-pycc:	$(srcdir)/pycc
+        $(INSTALL_SCRIPT $< $(DESTDIR)$(BINLIBDEST)
+
+@@ -742,7 +755,7 @@
+ 		$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
+ 
+ # Install everything
+-install:	@FRAMEWORKINSTALLFIRST@ altinstall bininstall maninstall @FRAMEWORKINSTALLLAST@ install-pycc
++install:	@FRAMEWORKINSTALLFIRST@ altinstall bininstall maninstall @FRAMEWORKINSTALLLAST@ install-py_db install-pycc
+ 
+ # Install almost everything without disturbing previous versions
+ altinstall:	@FRAMEWORKALTINSTALLFIRST@ altbininstall libinstall inclinstall libainstall \
+
+diff --git Python-2.6.4/py_db/check_offsets.c Python-2.6.4/py_db/check_offsets.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/py_db/check_offsets.c
+@@ -0,0 +1,88 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++/*
++ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++#include <stdio.h>
++
++#include <Python.h>
++#include <frameobject.h>
++
++#include "libpython26_db_32.h"
++
++#if 0
++#define	offsetof(s, m)	((size_t)(&(((s *)0)->m)))
++#endif
++
++int
++main(void)
++{
++/*
++ * PyCodeObject co_name
++ * PyCodeObject co_filename
++ * PyCodeObject co_lnotab
++ * PyFrameObject f_back
++ * PyFrameObject f_code
++ * PyFrameObject f_lasti
++ * PyInterpreterState next
++ * PyInterpreterState tstate_head
++ * PyStringObject ob_sval
++ * PyStringObject ob_size
++ * PyThreadState frame
++ * PyThreadState next
++ */
++
++	printf("struct member: native 32\n");
++	printf("PyCodeObject co_name: %d %d\n", offsetof(PyCodeObject, co_name),
++	    offsetof(PyCodeObject32, co_name));
++	printf("PyCodeObject co_filename: %d %d\n", offsetof(PyCodeObject,
++	    co_filename), offsetof(PyCodeObject32, co_filename));
++	printf("PyCodeObject co_lnotab: %d %d\n", offsetof(PyCodeObject,
++	    co_lnotab), offsetof(PyCodeObject32, co_lnotab));
++	printf("PyFrameObject f_back: %d %d\n", offsetof(PyFrameObject, f_back),
++	    offsetof(PyFrameObject32, f_back));
++	printf("PyFrameObject f_code: %d %d\n", offsetof(PyFrameObject, f_code),
++	    offsetof(PyFrameObject32, f_code));
++	printf("PyFrameObject f_lasti: %d %d\n", offsetof(PyFrameObject,
++	    f_lasti), offsetof(PyFrameObject32, f_lasti));
++	printf("PyInterpreterState next: %d %d\n", offsetof(PyInterpreterState,
++	    next), offsetof(PyInterpreterState32, next));
++	printf("PyInterpreterState tstate_head: %d %d\n",
++	    offsetof(PyInterpreterState, tstate_head),
++	    offsetof(PyInterpreterState32, tstate_head));
++	printf("PyStringObject ob_sval: %d %d\n", offsetof(PyStringObject,
++	    ob_sval), offsetof(PyStringObject32, ob_sval));
++	printf("PyStringObject ob_size: %d %d\n", offsetof(PyStringObject,
++	    ob_size), offsetof(PyStringObject32, ob_size));
++	printf("PyThreadState frame: %d %d\n", offsetof(PyThreadState, frame),
++	    offsetof(PyThreadState32, frame));
++	printf("PyThreadState next: %d %d\n", offsetof(PyThreadState, next),
++	    offsetof(PyThreadState32, next));
++
++	printf("\nObject sizes\n");
++	printf("PyObject: %d %d\n", sizeof (PyObject), sizeof (PyObject32));
++	printf("PyVarObject: %d %d\n", sizeof (PyVarObject),
++	    sizeof (PyVarObject32));
++
++	return (0);
++}
+diff --git Python-2.6.4/py_db/libpython26_db.c Python-2.6.4/py_db/libpython26_db.c
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/py_db/libpython26_db.c
+@@ -0,0 +1,655 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++/*
++ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++#include <gelf.h>
++
++#include <Python.h>
++#include <frameobject.h>
++
++#include "libpython26_db.h"
++#if defined(_LP64)
++#include "libpython26_db_32.h"
++#endif /* _LP64 */
++
++/*
++ * Because MDB always runs the debugger in the same datamodel as the target,
++ * only functions that are used by the procfs part of this interface (or shared
++ * between the two) are written as 64->32 aware.
++ */
++typedef struct pydb_arch_ops {
++	ssize_t	(*strobj_readdata)(pydb_agent_t *, uintptr_t, unsigned char *,
++	    size_t);
++	int	(*frameinfo)(pydb_agent_t *, uintptr_t, char *,
++	    size_t, char *, size_t, int *);
++} pydb_arch_ops_t;
++
++struct pydb_agent {
++	struct ps_prochandle *pdb_ph;
++	int pdb_vers;
++	int pdb_is_64bit;
++	int pdb_datamodel;
++	const pydb_arch_ops_t *pdb_ops;
++};
++
++typedef uintptr_t (*pdi_next_cb_t)(pydb_iter_t *);
++
++struct pydb_iter {
++	struct ps_prochandle *pdi_ph;
++	uintptr_t pdi_current;
++	pdi_next_cb_t pdi_nextf;
++};
++
++#define	LIBPYTHON	"libpython2.6.so"
++
++#define	MIN(x, y)	(((x) < (y)) ? (x) : (y))
++
++/* Generic interface to helper functions */
++static ssize_t pydb_strobj_readdata(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len);
++static int pydb_getlno(pydb_agent_t *py, uintptr_t lnotab_addr, int firstline,
++    int lastinst);
++static int pydb_frameinfo(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno);
++
++/* datamodel specific implementation of helper functions */
++static ssize_t pydb_strobj_readdata_native(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len);
++static int pydb_frameinfo_native(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno);
++
++#if defined (_LP64)
++static ssize_t pydb_strobj_readdata_32(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len);
++static int pydb_frameinfo_32(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno);
++#endif /* _LP64 */
++
++static ssize_t pydb_strobj_readstr(pydb_agent_t *py, uintptr_t addr, char *buf,
++    size_t len);
++
++/* Iterator function next routines.  Plugable, configured by iterator init */
++static uintptr_t pydb_frame_iter_next(pydb_iter_t *iter);
++static uintptr_t pydb_interp_iter_next(pydb_iter_t *iter);
++static uintptr_t pydb_thread_iter_next(pydb_iter_t *iter);
++
++static const char *strbasename(const char *s);
++
++static const pydb_arch_ops_t arch_ops_native = {
++	.frameinfo = pydb_frameinfo_native,
++	.strobj_readdata = pydb_strobj_readdata_native,
++};
++
++#if defined (_LP64)
++static const pydb_arch_ops_t arch_ops_32 = {
++	.frameinfo = pydb_frameinfo_32,
++	.strobj_readdata = pydb_strobj_readdata_32,
++};
++#endif /* _LP64 */
++
++static const char *
++strbasename(const char *s)
++{
++	const char *p = strrchr(s, '/');
++
++	if (p == NULL)
++		return (s);
++
++	return (++p);
++}
++
++/* Agent creation / destruction routines */
++
++pydb_agent_t *
++pydb_agent_create(struct ps_prochandle *P, int vers)
++{
++	pydb_agent_t *py;
++	int datamodel;
++
++	if (vers != PYDB_VERSION) {
++		errno = ENOTSUP;
++		return (NULL);
++	}
++
++	if (ps_pdmodel(P, &datamodel) != PS_OK) {
++		return (NULL);
++	}
++
++	py = (pydb_agent_t *)malloc(sizeof (pydb_agent_t));
++	if (py == NULL) {
++		return (NULL);
++	}
++
++	py->pdb_ph = P;
++	py->pdb_vers = vers;
++	py->pdb_datamodel = datamodel;
++	py->pdb_is_64bit = 0;
++	py->pdb_ops = &arch_ops_native;
++
++#if defined (_LP64)
++	py->pdb_is_64bit = (datamodel == PR_MODEL_LP64);
++	if (!py->pdb_is_64bit) {
++		py->pdb_ops = &arch_ops_32;
++	}
++#endif /* _LP64 */
++
++	return (py);
++}
++
++void
++pydb_agent_destroy(pydb_agent_t *py)
++{
++	if (py == NULL) {
++		return;
++	}
++
++	free(py);
++}
++
++/* Helper functions */
++static int
++pydb_getlno(pydb_agent_t *py, uintptr_t lnotab_addr, int firstline,
++    int lastinst)
++{
++	unsigned char lnotab[4096];
++	ssize_t lnotab_len;
++	int addr, line;
++	int i;
++
++	lnotab_len = pydb_strobj_readdata(py, lnotab_addr, lnotab,
++	    sizeof (lnotab));
++	if (lnotab_len < 0) {
++		return (-1);
++	}
++
++	/*
++	 * Python's line number algorithm is arcane. See here for details:
++	 * http://svn.python.org/projects/python/trunk/Objects/lnotab_notes.txt
++	 */
++
++	line = firstline;
++	for (addr = i = 0; i < lnotab_len; i += 2) {
++		if (addr + lnotab[i] > lastinst) {
++			break;
++		}
++		addr += lnotab[i];
++		line += lnotab[i + 1];
++	}
++
++	return (line);
++}
++
++static ssize_t
++pydb_strobj_readdata(pydb_agent_t *py, uintptr_t addr, unsigned char *buf,
++    size_t buf_len)
++{
++	return (py->pdb_ops->strobj_readdata(py, addr, buf, buf_len));
++}
++
++static ssize_t
++pydb_strobj_readdata_native(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len)
++{
++	PyStringObject sobj;
++	ssize_t obj_sz;
++	ssize_t read_sz;
++	psaddr_t straddr;
++
++	/*
++	 * PyStringObjects are variable size.  The size of the PyStringObject
++	 * struct is fixed, and known at compile time; however, the size of the
++	 * associated buffer is variable.  The char[1] element at the end of the
++	 * structure contains the string, and the ob_size of the PyStringObject
++	 * indicates how much extra space was allocated to contain the string
++	 * buffer at the object's tail.  Read in the fixed size portion of the
++	 * object first, and then read the contents of the data buffer into the
++	 * buffer passed by the caller.
++	 */
++
++	if (ps_pread(py->pdb_ph, addr, &sobj, sizeof (PyStringObject))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	obj_sz = (ssize_t)PyString_GET_SIZE(&sobj);
++
++	read_sz = MIN(obj_sz, (ssize_t)buf_len);
++	straddr = (psaddr_t)(addr + offsetof(PyStringObject, ob_sval));
++
++	if (ps_pread(py->pdb_ph, straddr, buf, (size_t)read_sz) != PS_OK) {
++		return (-1);
++	}
++
++	return (read_sz);
++}
++
++#if defined(_LP64)
++static ssize_t
++pydb_strobj_readdata_32(pydb_agent_t *py, uintptr_t addr,
++    unsigned char *buf, size_t buf_len)
++{
++	PyStringObject32 sobj;
++	ssize_t obj_sz;
++	ssize_t read_sz;
++	psaddr_t straddr;
++
++	/*
++	 * PyStringObjects are variable size.  The size of the PyStringObject
++	 * struct is fixed, and known at compile time; however, the size of the
++	 * associated buffer is variable.  The char[1] element at the end of the
++	 * structure contains the string, and the ob_size of the PyStringObject
++	 * indicates how much extra space was allocated to contain the string
++	 * buffer at the object's tail.  Read in the fixed size portion of the
++	 * object first, and then read the contents of the data buffer into the
++	 * buffer passed by the caller.
++	 */
++
++	if (ps_pread(py->pdb_ph, addr, &sobj, sizeof (PyStringObject32))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	obj_sz = (ssize_t)PyString_GET_SIZE32(&sobj);
++
++	read_sz = MIN(obj_sz, (ssize_t)buf_len);
++	straddr = (psaddr_t)(addr + offsetof(PyStringObject32, ob_sval));
++
++	if (ps_pread(py->pdb_ph, straddr, buf, (size_t)read_sz) != PS_OK) {
++		return (-1);
++	}
++
++	return (read_sz);
++}
++#endif /* _LP64 */
++
++/*
++ * Most Python PyStringObjects contain strings, as one would expect.  However,
++ * due to some sleazy hackery in parts of the Python code, some string objects
++ * are used as buffers for binary data.  In the general case,
++ * pydb_strobj_readstr() should be used to read strings out of string objects.
++ * It wraps pydb_strobj_readdata(), which should be used by callers only when
++ * trying to retrieve binary data.  (This routine does some string cleanup).
++ */
++static ssize_t
++pydb_strobj_readstr(pydb_agent_t *py, uintptr_t addr, char *buf,
++    size_t buf_len)
++{
++	ssize_t read_sz;
++
++	read_sz = pydb_strobj_readdata(py, addr, (unsigned char *)buf, buf_len);
++
++	if (read_sz >= 0) {
++		if (read_sz >= buf_len) {
++			read_sz = buf_len - 1;
++		}
++
++		buf[read_sz] = '\0';
++	}
++
++	return (read_sz);
++}
++
++
++static int
++pydb_frameinfo(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno)
++{
++	return (py->pdb_ops->frameinfo(py, addr, funcnm, funcnm_sz,
++	    filenm, filenm_sz, lineno));
++}
++
++static int
++pydb_frameinfo_native(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno)
++{
++	PyFrameObject fo;
++	PyCodeObject co;
++	ssize_t rc;
++
++	if (ps_pread(py->pdb_ph, addr, &fo, sizeof (PyFrameObject))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)fo.f_code, &co,
++	    sizeof (PyCodeObject)) != PS_OK) {
++		return (-1);
++	}
++
++	rc = pydb_strobj_readstr(py, (uintptr_t)co.co_name, funcnm, funcnm_sz);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	rc = pydb_strobj_readstr(py, (uintptr_t)co.co_filename, filenm,
++	    filenm_sz);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	*lineno = pydb_getlno(py, (uintptr_t)co.co_lnotab, co.co_firstlineno,
++	    fo.f_lasti);
++	if (*lineno < 0) {
++		return (-1);
++	}
++
++	return (0);
++}
++
++#if defined (_LP64)
++static int
++pydb_frameinfo_32(pydb_agent_t *py, uintptr_t addr, char *funcnm,
++    size_t funcnm_sz, char *filenm, size_t filenm_sz, int *lineno)
++{
++	PyFrameObject32 fo;
++	PyCodeObject32 co;
++	ssize_t rc;
++
++	if (ps_pread(py->pdb_ph, addr, &fo, sizeof (PyFrameObject32))
++	    != PS_OK) {
++		return (-1);
++	}
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)fo.f_code, &co,
++	    sizeof (PyCodeObject32)) != PS_OK) {
++		return (-1);
++	}
++
++	rc = pydb_strobj_readstr(py, (uintptr_t)co.co_name, funcnm, funcnm_sz);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	rc = pydb_strobj_readstr(py, (uintptr_t)co.co_filename, filenm,
++	    filenm_sz);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	*lineno = pydb_getlno(py, (uintptr_t)co.co_lnotab, co.co_firstlineno,
++	    fo.f_lasti);
++	if (*lineno < 0) {
++		return (-1);
++	}
++
++	return (0);
++}
++
++#endif /* _LP64 */
++
++/* Functions that are part of the library's interface */
++
++/*
++ * Given the address of a PyFrameObject, and a buffer of a known size,
++ * fill the buffer with a description of the frame.
++ */
++int
++pydb_get_frameinfo(pydb_agent_t *py, uintptr_t frame_addr, char *fbuf,
++    size_t bufsz, int verbose)
++{
++	char funcname[1024];
++	char filename[1024];
++	char *fn;
++	int lineno;
++	int length = (py->pdb_is_64bit ? 16 : 8);
++	int rc;
++
++	rc = pydb_frameinfo(py, frame_addr, funcname, sizeof (funcname),
++	    filename, sizeof (filename), &lineno);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	if (!verbose) {
++		fn = (char *)strbasename(filename);
++	} else {
++		fn = filename;
++	}
++
++	(void) snprintf(fbuf, bufsz, "%0.*lx %s:%d %s()\n", length,
++	    frame_addr, fn, lineno, funcname);
++
++	return (0);
++}
++
++/*
++ * Return a description about a PyFrameObject, if the object is
++ * actually a PyFrameObject.  In this case, the pc argument is checked
++ * to make sure that it came from a function that takes a PyFrameObject
++ * as its first (argv[0]) argument.
++ */
++int
++pydb_pc_frameinfo(pydb_agent_t *py, uintptr_t pc, uintptr_t frame_addr,
++    char *fbuf, size_t bufsz)
++{
++	char funcname[1024];
++	char filename[1024];
++	int lineno;
++	int rc;
++	ps_sym_t psym;
++
++	/*
++	 * If PC doesn't match PyEval_EvalFrameEx in either libpython
++	 * or the executable, don't decode it.
++	 */
++	if (ps_pglobal_sym(py->pdb_ph, LIBPYTHON, "PyEval_EvalFrameEx", &psym)
++	    != PS_OK) {
++		return (-1);
++	}
++
++	/* If symbol found, ensure that PC falls within PyEval_EvalFrameEx. */
++	if (pc < psym.st_value || pc > psym.st_value + psym.st_size) {
++		return (-1);
++	}
++
++	rc = pydb_frameinfo(py, frame_addr, funcname, sizeof (funcname),
++	    filename, sizeof (filename), &lineno);
++	if (rc < 0) {
++		return (-1);
++	}
++
++	(void) snprintf(fbuf, bufsz, "[ %s:%d (%s) ]\n", filename, lineno,
++	    funcname);
++
++	return (0);
++}
++
++/*
++ * Walks the list of PyInterpreterState objects.  If caller doesn't
++ * supply address of list, this method will look it up.
++ */
++pydb_iter_t *
++pydb_interp_iter_init(pydb_agent_t *py, uintptr_t addr)
++{
++	pydb_iter_t *itr;
++	uintptr_t i_addr;
++	int rc;
++
++	if (addr == 0) {
++		rc = ps_pglobal_lookup(py->pdb_ph, LIBPYTHON, "interp_head",
++		    (psaddr_t *)&addr);
++		if (rc != PS_OK) {
++			return (NULL);
++		}
++	}
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)addr, &i_addr, sizeof (uintptr_t))
++	    != PS_OK) {
++		return (NULL);
++	}
++
++	itr = malloc(sizeof (pydb_iter_t));
++	if (itr == NULL) {
++		return (NULL);
++	}
++
++	itr->pdi_ph = py->pdb_ph;
++	itr->pdi_current = i_addr;
++	itr->pdi_nextf = pydb_interp_iter_next;
++
++	return (itr);
++}
++
++static uintptr_t
++pydb_interp_iter_next(pydb_iter_t *iter)
++{
++	PyInterpreterState st;
++	uintptr_t cur;
++
++	cur = iter->pdi_current;
++
++	if (cur == 0) {
++		return (cur);
++	}
++
++	if (ps_pread(iter->pdi_ph, cur, &st, sizeof (PyInterpreterState))
++	    != PS_OK) {
++		iter->pdi_current = 0;
++		return (0);
++	}
++
++	iter->pdi_current = (uintptr_t)st.next;
++
++	return (cur);
++}
++
++/*
++ * Walk a list of Python PyFrameObjects.  The addr argument must be
++ * the address of a valid PyThreadState object.
++ */
++pydb_iter_t *
++pydb_frame_iter_init(pydb_agent_t *py, uintptr_t addr)
++{
++	pydb_iter_t *itr;
++	PyThreadState ts;
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)addr, &ts, sizeof (PyThreadState))
++	    != PS_OK) {
++		return (NULL);
++	}
++
++	itr = malloc(sizeof (pydb_iter_t));
++	if (itr == NULL) {
++		return (NULL);
++	}
++
++	itr->pdi_ph = py->pdb_ph;
++	itr->pdi_current = (uintptr_t)ts.frame;
++	itr->pdi_nextf = pydb_frame_iter_next;
++
++	return (itr);
++}
++
++static uintptr_t
++pydb_frame_iter_next(pydb_iter_t *iter)
++{
++	PyFrameObject fo;
++	uintptr_t cur;
++
++	cur = iter->pdi_current;
++
++	if (cur == 0) {
++		return (cur);
++	}
++
++	if (ps_pread(iter->pdi_ph, cur, &fo, sizeof (PyFrameObject))
++	    != PS_OK) {
++		iter->pdi_current = 0;
++		return (0);
++	}
++
++	iter->pdi_current = (uintptr_t)fo.f_back;
++
++	return (cur);
++}
++
++/*
++ * Walk a list of Python PyThreadState objects.  The addr argument must be
++ * the address of a valid PyInterpreterState object.
++ */
++pydb_iter_t *
++pydb_thread_iter_init(pydb_agent_t *py, uintptr_t addr)
++{
++	pydb_iter_t *itr;
++	PyInterpreterState is;
++
++	if (ps_pread(py->pdb_ph, (uintptr_t)addr, &is,
++	    sizeof (PyInterpreterState)) != PS_OK) {
++		return (NULL);
++	}
++
++	itr = malloc(sizeof (pydb_iter_t));
++	if (itr == NULL) {
++		return (NULL);
++	}
++
++	itr->pdi_ph = py->pdb_ph;
++	itr->pdi_current = (uintptr_t)is.tstate_head;
++	itr->pdi_nextf = pydb_thread_iter_next;
++
++	return (itr);
++}
++
++static uintptr_t
++pydb_thread_iter_next(pydb_iter_t *iter)
++{
++	PyThreadState ts;
++	uintptr_t cur;
++
++	cur = iter->pdi_current;
++
++	if (cur == 0) {
++		return (cur);
++	}
++
++	if (ps_pread(iter->pdi_ph, cur, &ts, sizeof (PyThreadState)) != PS_OK) {
++		iter->pdi_current = 0;
++		return (0);
++	}
++
++	iter->pdi_current = (uintptr_t)ts.next;
++
++	return (cur);
++}
++
++
++uintptr_t
++pydb_iter_next(pydb_iter_t *iter)
++{
++	return (iter->pdi_nextf(iter));
++}
++
++void
++pydb_iter_fini(pydb_iter_t *iter)
++{
++	if (iter == NULL) {
++		return;
++	}
++
++	free(iter);
++}
+diff --git Python-2.6.4/py_db/libpython26_db.h Python-2.6.4/py_db/libpython26_db.h
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/py_db/libpython26_db.h
+@@ -0,0 +1,74 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++/*
++ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++#ifndef	_LIBPYTHON26_DB_H
++#define	_LIBPYTHON26_DB_H
++
++#include <proc_service.h>
++
++#ifdef	__cplusplus
++extern "C" {
++#endif
++
++/* Agent is opaque to library's consumers.  */
++typedef struct pydb_agent pydb_agent_t;
++
++/*
++ * Library's debug version is 1.  Changes to interface should increase this
++ * number.
++ */
++#define	PYDB_VERSION	1
++
++/* Agent creation/destruction routines */
++extern	pydb_agent_t	*pydb_agent_create(struct ps_prochandle *P, int vers);
++extern	void		pydb_agent_destroy(pydb_agent_t *py);
++
++/* Used by callers that know they are looking at a PyFrameObject */
++extern	int	pydb_get_frameinfo(pydb_agent_t *py, uintptr_t frame_addr,
++    char *fbuf, size_t bufsz, int verbose);
++
++/*
++ * Used by callers that don't know if they're looking at PyFrameObject.
++ * Checks PC for traceable functions.
++ */
++extern	int	pydb_pc_frameinfo(pydb_agent_t *py, uintptr_t pc,
++    uintptr_t frame_addr, char *fbuf, size_t bufsz);
++
++/* Iterator functions */
++typedef struct pydb_iter pydb_iter_t;
++
++extern	pydb_iter_t	*pydb_frame_iter_init(pydb_agent_t *py, uintptr_t addr);
++extern	pydb_iter_t	*pydb_interp_iter_init(pydb_agent_t *py,
++    uintptr_t addr);
++extern	pydb_iter_t	*pydb_thread_iter_init(pydb_agent_t *py,
++    uintptr_t addr);
++extern	void		pydb_iter_fini(pydb_iter_t *iter);
++extern	uintptr_t	pydb_iter_next(pydb_iter_t *iter);
++
++#ifdef	__cplusplus
++}
++#endif
++
++#endif	/* _LIBPYTHON26_DB_H */
+diff --git Python-2.6.4/py_db/libpython26_db_32.h Python-2.6.4/py_db/libpython26_db_32.h
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/py_db/libpython26_db_32.h
+@@ -0,0 +1,122 @@
++/*
++ * CDDL HEADER START
++ *
++ * The contents of this file are subject to the terms of the
++ * Common Development and Distribution License (the "License").
++ * You may not use this file except in compliance with the License.
++ *
++ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++ * or http://www.opensolaris.org/os/licensing.
++ * See the License for the specific language governing permissions
++ * and limitations under the License.
++ *
++ * When distributing Covered Code, include this CDDL HEADER in each
++ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++ * If applicable, add the following below this CDDL HEADER, with the
++ * fields enclosed by brackets "[]" replaced with your own identifying
++ * information: Portions Copyright [yyyy] [name of copyright owner]
++ *
++ * CDDL HEADER END
++ */
++/*
++ * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
++ * Use is subject to license terms.
++ */
++
++#ifndef	_LIBPYTHON26_DB_32_H
++#define	_LIBPYTHON26_DB_32_H
++
++#ifdef	__cplusplus
++extern "C" {
++#endif
++
++#include <sys/types.h>
++
++/*
++ * Define 32-bit Python data structures for use by the 64-bit debugger.  This
++ * is so that a 64-bit debugger may properly examine a 32-bit process.
++ *
++ * In many cases, the debug library is only concerned with a few fields in the
++ * Python structure.  In that case, the other ancillary fields are elided.
++ */
++
++typedef uint32_t uintptr32_t;
++typedef int32_t Py_ssize32_t;
++
++typedef struct _is32 {
++	uintptr32_t	next;
++	uintptr32_t	tstate_head;
++} PyInterpreterState32;
++
++typedef struct _ts32 {
++	uintptr32_t	next;
++	uintptr32_t	interp;
++	uintptr32_t	frame;
++} PyThreadState32;
++
++#define	PyObject_HEAD32			\
++	Py_ssize32_t	ob_refcnt;	\
++	uintptr32_t	ob_type;
++
++#define	PyObject_VAR_HEAD32		\
++	PyObject_HEAD32			\
++	Py_ssize32_t	ob_size;
++
++typedef struct {
++	PyObject_HEAD32
++} PyObject32;
++
++typedef struct {
++	PyObject_VAR_HEAD32
++} PyVarObject32;
++
++typedef struct {
++	PyObject_VAR_HEAD32
++	int32_t		ob_shash;
++	int		ob_sstate;
++	char		ob_sval[1];
++} PyStringObject32;
++
++#define	Py_SIZE32(ob)			(((PyVarObject32*)(ob))->ob_size)
++#define	PyString_GET_SIZE32(op)		Py_SIZE32(op)
++#define	PyString_AS_STRING32(op)	(((PyStringObject32 *)(op))->ob_sval)
++
++typedef struct {
++	PyObject_VAR_HEAD32
++	uintptr32_t	f_back;
++	uintptr32_t	f_code;
++	uintptr32_t	f_builtins;
++	uintptr32_t	f_globals;
++	uintptr32_t	f_locals;
++	uintptr32_t	f_valuestack;
++	uintptr32_t	f_stacktop;
++	uintptr32_t	f_trace;
++	uintptr32_t	f_exc_typpe, f_exc_value, f_exc_traceback;
++	uintptr32_t	f_tstate;
++	int		f_lasti;
++	int		f_lineno;
++} PyFrameObject32;
++
++typedef struct {
++	PyObject_HEAD32
++	int		co_argcount;
++	int		co_nlocals;
++	int		co_stacksize;
++	int		co_flags;
++	uintptr32_t	co_code;
++	uintptr32_t	co_consts;
++	uintptr32_t	co_names;
++	uintptr32_t	co_varnames;
++	uintptr32_t	co_freevars;
++	uintptr32_t	co_cellvars;
++	uintptr32_t	co_filename;
++	uintptr32_t	co_name;
++	int		co_firstlineno;
++	uintptr32_t	co_lnotab;
++} PyCodeObject32;
++
++#ifdef	__cplusplus
++}
++#endif
++
++#endif	/* _LIBPYTHON26_DB_32_H */
+diff --git Python-2.6.4/py_db/mapfile-vers Python-2.6.4/py_db/mapfile-vers
+new file mode 100644
+--- /dev/null
++++ Python-2.6.4/py_db/mapfile-vers
+@@ -0,0 +1,40 @@
++#
++# CDDL HEADER START
++#
++# The contents of this file are subject to the terms of the
++# Common Development and Distribution License (the "License").
++# You may not use this file except in compliance with the License.
++#
++# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
++# or http://www.opensolaris.org/os/licensing.
++# See the License for the specific language governing permissions
++# and limitations under the License.
++#
++# When distributing Covered Code, include this CDDL HEADER in each
++# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
++# If applicable, add the following below this CDDL HEADER, with the
++# fields enclosed by brackets "[]" replaced with your own identifying
++# information: Portions Copyright [yyyy] [name of copyright owner]
++#
++# CDDL HEADER END
++#
++
++#
++# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
++# Use is subject to license terms.
++#
++
++SUNWprivate_1.1 {
++    global:
++	pydb_agent_create;
++	pydb_agent_destroy;
++	pydb_frame_iter_init;
++	pydb_get_frameinfo;
++	pydb_pc_frameinfo;
++	pydb_interp_iter_init;
++	pydb_thread_iter_init;
++	pydb_iter_fini;
++	pydb_iter_next;
++    local:
++	*;
++};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-21-getpass.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,31 @@
+diff --git Python-2.6.4/Lib/getpass.py Python-2.6.4/Lib/getpass.py
+--- Python-2.6.4/Lib/getpass.py
++++ Python-2.6.4/Lib/getpass.py
+@@ -62,12 +62,16 @@
+         try:
+             old = termios.tcgetattr(fd)     # a copy to save
+             new = old[:]
+-            new[3] &= ~termios.ECHO  # 3 == 'lflags'
++            new[3] &= ~(termios.ECHO|termios.ISIG)  # 3 == 'lflags'
++            tcsetattr_flags = termios.TCSAFLUSH
++            if hasattr(termios, 'TCSASOFT'):
++                tcsetattr_flags |= termios.TCSASOFT
+             try:
+-                termios.tcsetattr(fd, termios.TCSADRAIN, new)
++                termios.tcsetattr(fd, tcsetattr_flags, new)
+                 passwd = _raw_input(prompt, stream, input=input)
+             finally:
+-                termios.tcsetattr(fd, termios.TCSADRAIN, old)
++                termios.tcsetattr(fd, tcsetattr_flags, old)
++                stream.flush()  # issue7208
+         except termios.error, e:
+             if passwd is not None:
+                 # _raw_input succeeded.  The final tcsetattr failed.  Reraise
+@@ -125,6 +129,7 @@
+     if prompt:
+         stream.write(prompt)
+         stream.flush()
++    # NOTE: The Python C API calls flockfile() (and unlock) during readline.
+     line = input.readline()
+     if not line:
+         raise EOFError
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/Python26-22-bindir.patch	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,11 @@
+--- Python-2.6.4/Makefile.pre.in.orig	Fri Feb 11 11:35:54 2011
++++ Python-2.6.4/Makefile.pre.in	Fri Feb 11 11:36:15 2011
+@@ -86,7 +86,7 @@
+ datarootdir=    @datarootdir@
+ 
+ # Expanded directories
+-BINDIR=		$(exec_prefix)/bin
++BINDIR=		@bindir@
+ LIBDIR=		@libdir@
+ MANDIR=		@mandir@
+ INCLUDEDIR=	@includedir@
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/SUNWPython26.p5m	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,28 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+set name=pkg.fmri value=pkg:/[email protected],5.11-0.133
+set name=pkg.renamed value=true
+
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+depend fmri=runtime/[email protected] type=require
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/python-26.p5m	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,2962 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri value=pkg:/runtime/python-26@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="The Python interpreter, libraries and utilities"
+set name=info.classification value="org.opensolaris.category.2008:Development/Python"
+set name=info.upstream_url value="http://python.org/"
+set name=info.source_url value=$(COMPONENT_ARCHIVE_URL)
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+
+dir path=usr
+dir path=usr/bin
+dir path=usr/bin/$(MACH32)
+dir path=usr/bin/$(MACH64)
+dir path=usr/include
+dir path=usr/include/python2.6
+dir path=usr/lib
+dir path=usr/lib/$(MACH64)
+dir path=usr/lib/python2.6
+dir path=usr/lib/python2.6/compiler
+dir path=usr/lib/python2.6/config
+dir path=usr/lib/python2.6/ctypes
+dir path=usr/lib/python2.6/ctypes/macholib
+dir path=usr/lib/python2.6/ctypes/test
+dir path=usr/lib/python2.6/curses
+dir path=usr/lib/python2.6/distutils
+dir path=usr/lib/python2.6/distutils/command
+dir path=usr/lib/python2.6/distutils/tests
+dir path=usr/lib/python2.6/email
+dir path=usr/lib/python2.6/email/mime
+dir path=usr/lib/python2.6/email/test
+dir path=usr/lib/python2.6/email/test/data
+dir path=usr/lib/python2.6/encodings
+dir path=usr/lib/python2.6/hotshot
+dir path=usr/lib/python2.6/idlelib
+dir path=usr/lib/python2.6/idlelib/Icons
+dir path=usr/lib/python2.6/json
+dir path=usr/lib/python2.6/json/tests
+dir path=usr/lib/python2.6/lib-dynload
+dir path=usr/lib/python2.6/lib-old
+dir path=usr/lib/python2.6/lib-tk
+dir path=usr/lib/python2.6/lib2to3
+dir path=usr/lib/python2.6/lib2to3/fixes
+dir path=usr/lib/python2.6/lib2to3/pgen2
+dir path=usr/lib/python2.6/lib2to3/tests
+dir path=usr/lib/python2.6/logging
+dir path=usr/lib/python2.6/multiprocessing
+dir path=usr/lib/python2.6/multiprocessing/dummy
+dir path=usr/lib/python2.6/plat-sunos5
+dir path=usr/lib/python2.6/site-packages
+dir path=usr/lib/python2.6/sqlite3
+dir path=usr/lib/python2.6/sqlite3/test
+dir path=usr/lib/python2.6/test
+dir path=usr/lib/python2.6/test/decimaltestdata
+dir path=usr/lib/python2.6/wsgiref
+dir path=usr/lib/python2.6/vendor-packages
+dir path=usr/lib/python2.6/xml
+dir path=usr/lib/python2.6/xml/dom
+dir path=usr/lib/python2.6/xml/etree
+dir path=usr/lib/python2.6/xml/parsers
+dir path=usr/lib/python2.6/xml/sax
+dir path=usr/lib/python2.6
+dir path=usr/lib/python2.6/lib-dynload
+dir path=usr/lib/python2.6/lib-dynload/64
+dir path=usr/share
+dir path=usr/share/man
+dir path=usr/share/man/man1
+
+
+# delivered from python-24, but should be delivered from here
+#file path=usr/bin/idle
+#file path=usr/bin/pydoc
+
+file path=usr/bin/2to3
+
+# isapython2.6
+file usr/bin/python2.6 path=usr/bin/$(MACH32)/isapython2.6
+file usr/bin/$(MACH64)/python2.6 path=usr/bin/$(MACH64)/isapython2.6
+hardlink path=usr/bin/isapython2.6 target=../lib/isaexec pkg.linted=true
+
+# python2.6
+link path=usr/bin/python target=python2.6
+link path=usr/bin/python2.6 target=$(MACH32)/isapython2.6
+link path=usr/bin/$(MACH64)/python target=python2.6
+link path=usr/bin/$(MACH64)/python2.6 target=isapython2.6
+
+link path=usr/bin/python-config target=python2.6-config
+file path=usr/bin/python2.6-config
+file path=usr/bin/$(MACH64)/python2.6-config
+
+link path=usr/lib/$(MACH64)/libpython2.6_db.so target=libpython2.6_db.so.1.0
+file path=usr/lib/$(MACH64)/libpython2.6_db.so.1.0
+link path=usr/lib/libpython2.6_db.so target=libpython2.6_db.so.1.0
+file path=usr/lib/libpython2.6_db.so.1.0
+
+file path=usr/include/python2.6/Python-ast.h
+file path=usr/include/python2.6/Python.h
+file path=usr/include/python2.6/abstract.h
+file path=usr/include/python2.6/asdl.h
+file path=usr/include/python2.6/ast.h
+file path=usr/include/python2.6/bitset.h
+file path=usr/include/python2.6/boolobject.h
+file path=usr/include/python2.6/bufferobject.h
+file path=usr/include/python2.6/bytearrayobject.h
+file path=usr/include/python2.6/bytes_methods.h
+file path=usr/include/python2.6/bytesobject.h
+file path=usr/include/python2.6/cStringIO.h
+file path=usr/include/python2.6/cellobject.h
+file path=usr/include/python2.6/ceval.h
+file path=usr/include/python2.6/classobject.h
+file path=usr/include/python2.6/cobject.h
+file path=usr/include/python2.6/code.h
+file path=usr/include/python2.6/codecs.h
+file path=usr/include/python2.6/compile.h
+file path=usr/include/python2.6/complexobject.h
+file path=usr/include/python2.6/datetime.h
+file path=usr/include/python2.6/descrobject.h
+file path=usr/include/python2.6/dictobject.h
+file path=usr/include/python2.6/enumobject.h
+file path=usr/include/python2.6/errcode.h
+file path=usr/include/python2.6/eval.h
+file path=usr/include/python2.6/fileobject.h
+file path=usr/include/python2.6/floatobject.h
+file path=usr/include/python2.6/frameobject.h
+file path=usr/include/python2.6/funcobject.h
+file path=usr/include/python2.6/genobject.h
+file path=usr/include/python2.6/graminit.h
+file path=usr/include/python2.6/grammar.h
+file path=usr/include/python2.6/import.h
+file path=usr/include/python2.6/intobject.h
+file path=usr/include/python2.6/intrcheck.h
+file path=usr/include/python2.6/iterobject.h
+file path=usr/include/python2.6/listobject.h
+file path=usr/include/python2.6/longintrepr.h
+file path=usr/include/python2.6/longobject.h
+file path=usr/include/python2.6/marshal.h
+file path=usr/include/python2.6/metagrammar.h
+file path=usr/include/python2.6/methodobject.h
+file path=usr/include/python2.6/modsupport.h
+file path=usr/include/python2.6/moduleobject.h
+file path=usr/include/python2.6/node.h
+file path=usr/include/python2.6/object.h
+file path=usr/include/python2.6/objimpl.h
+file path=usr/include/python2.6/opcode.h
+file path=usr/include/python2.6/osdefs.h
+file path=usr/include/python2.6/parsetok.h
+file path=usr/include/python2.6/patchlevel.h
+file path=usr/include/python2.6/pgen.h
+file path=usr/include/python2.6/pgenheaders.h
+file path=usr/include/python2.6/py_curses.h
+file path=usr/include/python2.6/pyarena.h
+file path=usr/include/python2.6/pyconfig.h
+file path=usr/include/python2.6/pydebug.h
+file path=usr/include/python2.6/pyerrors.h
+file path=usr/include/python2.6/pyexpat.h
+file path=usr/include/python2.6/pyfpe.h
+file path=usr/include/python2.6/pygetopt.h
+file path=usr/include/python2.6/pymacconfig.h
+file path=usr/include/python2.6/pymactoolbox.h
+file path=usr/include/python2.6/pymath.h
+file path=usr/include/python2.6/pymem.h
+file path=usr/include/python2.6/pyport.h
+file path=usr/include/python2.6/pystate.h
+file path=usr/include/python2.6/pystrcmp.h
+file path=usr/include/python2.6/pystrtod.h
+file path=usr/include/python2.6/pythonrun.h
+file path=usr/include/python2.6/pythread.h
+file path=usr/include/python2.6/rangeobject.h
+file path=usr/include/python2.6/setobject.h
+file path=usr/include/python2.6/sliceobject.h
+file path=usr/include/python2.6/stringobject.h
+file path=usr/include/python2.6/structmember.h
+file path=usr/include/python2.6/structseq.h
+file path=usr/include/python2.6/symtable.h
+file path=usr/include/python2.6/sysmodule.h
+file path=usr/include/python2.6/timefuncs.h
+file path=usr/include/python2.6/token.h
+file path=usr/include/python2.6/traceback.h
+file path=usr/include/python2.6/tupleobject.h
+file path=usr/include/python2.6/ucnhash.h
+file path=usr/include/python2.6/unicodeobject.h
+file path=usr/include/python2.6/warnings.h
+file path=usr/include/python2.6/weakrefobject.h
+file path=usr/lib/$(MACH64)/libpython2.6.so.1.0
+file path=usr/lib/libpython2.6.so.1.0
+file path=usr/lib/python2.6/BaseHTTPServer.py
+file path=usr/lib/python2.6/BaseHTTPServer.pyc
+file path=usr/lib/python2.6/Bastion.py
+file path=usr/lib/python2.6/Bastion.pyc
+file path=usr/lib/python2.6/CGIHTTPServer.py
+file path=usr/lib/python2.6/CGIHTTPServer.pyc
+file path=usr/lib/python2.6/ConfigParser.py
+file path=usr/lib/python2.6/ConfigParser.pyc
+file path=usr/lib/python2.6/Cookie.py
+file path=usr/lib/python2.6/Cookie.pyc
+file path=usr/lib/python2.6/DocXMLRPCServer.py
+file path=usr/lib/python2.6/DocXMLRPCServer.pyc
+file path=usr/lib/python2.6/HTMLParser.py
+file path=usr/lib/python2.6/HTMLParser.pyc
+file path=usr/lib/python2.6/LICENSE.txt
+file path=usr/lib/python2.6/MimeWriter.py
+file path=usr/lib/python2.6/MimeWriter.pyc
+file path=usr/lib/python2.6/Queue.py
+file path=usr/lib/python2.6/Queue.pyc
+file path=usr/lib/python2.6/SimpleHTTPServer.py
+file path=usr/lib/python2.6/SimpleHTTPServer.pyc
+file path=usr/lib/python2.6/SimpleXMLRPCServer.py
+file path=usr/lib/python2.6/SimpleXMLRPCServer.pyc
+file path=usr/lib/python2.6/SocketServer.py
+file path=usr/lib/python2.6/SocketServer.pyc
+file path=usr/lib/python2.6/StringIO.py
+file path=usr/lib/python2.6/StringIO.pyc
+file path=usr/lib/python2.6/UserDict.py
+file path=usr/lib/python2.6/UserDict.pyc
+file path=usr/lib/python2.6/UserList.py
+file path=usr/lib/python2.6/UserList.pyc
+file path=usr/lib/python2.6/UserString.py
+file path=usr/lib/python2.6/UserString.pyc
+file path=usr/lib/python2.6/_LWPCookieJar.py
+file path=usr/lib/python2.6/_LWPCookieJar.pyc
+file path=usr/lib/python2.6/_MozillaCookieJar.py
+file path=usr/lib/python2.6/_MozillaCookieJar.pyc
+file path=usr/lib/python2.6/__future__.py
+file path=usr/lib/python2.6/__future__.pyc
+file path=usr/lib/python2.6/__phello__.foo.py
+file path=usr/lib/python2.6/__phello__.foo.pyc
+file path=usr/lib/python2.6/_abcoll.py
+file path=usr/lib/python2.6/_abcoll.pyc
+file path=usr/lib/python2.6/_strptime.py
+file path=usr/lib/python2.6/_strptime.pyc
+file path=usr/lib/python2.6/_threading_local.py
+file path=usr/lib/python2.6/_threading_local.pyc
+file path=usr/lib/python2.6/abc.py
+file path=usr/lib/python2.6/abc.pyc
+file path=usr/lib/python2.6/aifc.py
+file path=usr/lib/python2.6/aifc.pyc
+file path=usr/lib/python2.6/anydbm.py
+file path=usr/lib/python2.6/anydbm.pyc
+file path=usr/lib/python2.6/ast.py
+file path=usr/lib/python2.6/ast.pyc
+file path=usr/lib/python2.6/asynchat.py
+file path=usr/lib/python2.6/asynchat.pyc
+file path=usr/lib/python2.6/asyncore.py
+file path=usr/lib/python2.6/asyncore.pyc
+file path=usr/lib/python2.6/atexit.py
+file path=usr/lib/python2.6/atexit.pyc
+file path=usr/lib/python2.6/audiodev.py
+file path=usr/lib/python2.6/audiodev.pyc
+file path=usr/lib/python2.6/base64.py
+file path=usr/lib/python2.6/base64.pyc
+file path=usr/lib/python2.6/bdb.py
+file path=usr/lib/python2.6/bdb.pyc
+file path=usr/lib/python2.6/binhex.py
+file path=usr/lib/python2.6/binhex.pyc
+file path=usr/lib/python2.6/bisect.py
+file path=usr/lib/python2.6/bisect.pyc
+file path=usr/lib/python2.6/cProfile.py
+file path=usr/lib/python2.6/cProfile.pyc
+file path=usr/lib/python2.6/calendar.py
+file path=usr/lib/python2.6/calendar.pyc
+file path=usr/lib/python2.6/cgi.py
+file path=usr/lib/python2.6/cgi.pyc
+file path=usr/lib/python2.6/cgitb.py
+file path=usr/lib/python2.6/cgitb.pyc
+file path=usr/lib/python2.6/chunk.py
+file path=usr/lib/python2.6/chunk.pyc
+file path=usr/lib/python2.6/cmd.py
+file path=usr/lib/python2.6/cmd.pyc
+file path=usr/lib/python2.6/code.py
+file path=usr/lib/python2.6/code.pyc
+file path=usr/lib/python2.6/codecs.py
+file path=usr/lib/python2.6/codecs.pyc
+file path=usr/lib/python2.6/codeop.py
+file path=usr/lib/python2.6/codeop.pyc
+file path=usr/lib/python2.6/collections.py
+file path=usr/lib/python2.6/collections.pyc
+file path=usr/lib/python2.6/colorsys.py
+file path=usr/lib/python2.6/colorsys.pyc
+file path=usr/lib/python2.6/commands.py
+file path=usr/lib/python2.6/commands.pyc
+file path=usr/lib/python2.6/compileall.py
+file path=usr/lib/python2.6/compileall.pyc
+file path=usr/lib/python2.6/compiler/__init__.py
+file path=usr/lib/python2.6/compiler/__init__.pyc
+file path=usr/lib/python2.6/compiler/ast.py
+file path=usr/lib/python2.6/compiler/ast.pyc
+file path=usr/lib/python2.6/compiler/consts.py
+file path=usr/lib/python2.6/compiler/consts.pyc
+file path=usr/lib/python2.6/compiler/future.py
+file path=usr/lib/python2.6/compiler/future.pyc
+file path=usr/lib/python2.6/compiler/misc.py
+file path=usr/lib/python2.6/compiler/misc.pyc
+file path=usr/lib/python2.6/compiler/pyassem.py
+file path=usr/lib/python2.6/compiler/pyassem.pyc
+file path=usr/lib/python2.6/compiler/pycodegen.py
+file path=usr/lib/python2.6/compiler/pycodegen.pyc
+file path=usr/lib/python2.6/compiler/symbols.py
+file path=usr/lib/python2.6/compiler/symbols.pyc
+file path=usr/lib/python2.6/compiler/syntax.py
+file path=usr/lib/python2.6/compiler/syntax.pyc
+file path=usr/lib/python2.6/compiler/transformer.py
+file path=usr/lib/python2.6/compiler/transformer.pyc
+file path=usr/lib/python2.6/compiler/visitor.py
+file path=usr/lib/python2.6/compiler/visitor.pyc
+file path=usr/lib/python2.6/config/Makefile
+file path=usr/lib/python2.6/config/Setup
+file path=usr/lib/python2.6/config/Setup.config
+file path=usr/lib/python2.6/config/Setup.local
+file path=usr/lib/python2.6/config/config.c
+file path=usr/lib/python2.6/config/config.c.in
+file path=usr/lib/python2.6/config/install-sh mode=0555
+file path=usr/lib/python2.6/config/makesetup mode=0555
+file path=usr/lib/python2.6/config/python.o
+file path=usr/lib/python2.6/contextlib.py
+file path=usr/lib/python2.6/contextlib.pyc
+file path=usr/lib/python2.6/cookielib.py
+file path=usr/lib/python2.6/cookielib.pyc
+file path=usr/lib/python2.6/copy.py
+file path=usr/lib/python2.6/copy.pyc
+file path=usr/lib/python2.6/copy_reg.py
+file path=usr/lib/python2.6/copy_reg.pyc
+file path=usr/lib/python2.6/csv.py
+file path=usr/lib/python2.6/csv.pyc
+file path=usr/lib/python2.6/ctypes/__init__.py
+file path=usr/lib/python2.6/ctypes/__init__.pyc
+file path=usr/lib/python2.6/ctypes/_endian.py
+file path=usr/lib/python2.6/ctypes/_endian.pyc
+file path=usr/lib/python2.6/ctypes/macholib/README.ctypes
+file path=usr/lib/python2.6/ctypes/macholib/__init__.py
+file path=usr/lib/python2.6/ctypes/macholib/__init__.pyc
+file path=usr/lib/python2.6/ctypes/macholib/dyld.py
+file path=usr/lib/python2.6/ctypes/macholib/dyld.pyc
+file path=usr/lib/python2.6/ctypes/macholib/dylib.py
+file path=usr/lib/python2.6/ctypes/macholib/dylib.pyc
+file path=usr/lib/python2.6/ctypes/macholib/fetch_macholib mode=0555
+file path=usr/lib/python2.6/ctypes/macholib/fetch_macholib.bat
+file path=usr/lib/python2.6/ctypes/macholib/framework.py
+file path=usr/lib/python2.6/ctypes/macholib/framework.pyc
+file path=usr/lib/python2.6/ctypes/test/__init__.py
+file path=usr/lib/python2.6/ctypes/test/__init__.pyc
+file path=usr/lib/python2.6/ctypes/test/runtests.py
+file path=usr/lib/python2.6/ctypes/test/runtests.pyc
+file path=usr/lib/python2.6/ctypes/test/test_anon.py
+file path=usr/lib/python2.6/ctypes/test/test_anon.pyc
+file path=usr/lib/python2.6/ctypes/test/test_array_in_pointer.py
+file path=usr/lib/python2.6/ctypes/test/test_array_in_pointer.pyc
+file path=usr/lib/python2.6/ctypes/test/test_arrays.py
+file path=usr/lib/python2.6/ctypes/test/test_arrays.pyc
+file path=usr/lib/python2.6/ctypes/test/test_as_parameter.py
+file path=usr/lib/python2.6/ctypes/test/test_as_parameter.pyc
+file path=usr/lib/python2.6/ctypes/test/test_bitfields.py
+file path=usr/lib/python2.6/ctypes/test/test_bitfields.pyc
+file path=usr/lib/python2.6/ctypes/test/test_buffers.py
+file path=usr/lib/python2.6/ctypes/test/test_buffers.pyc
+file path=usr/lib/python2.6/ctypes/test/test_byteswap.py
+file path=usr/lib/python2.6/ctypes/test/test_byteswap.pyc
+file path=usr/lib/python2.6/ctypes/test/test_callbacks.py
+file path=usr/lib/python2.6/ctypes/test/test_callbacks.pyc
+file path=usr/lib/python2.6/ctypes/test/test_cast.py
+file path=usr/lib/python2.6/ctypes/test/test_cast.pyc
+file path=usr/lib/python2.6/ctypes/test/test_cfuncs.py
+file path=usr/lib/python2.6/ctypes/test/test_cfuncs.pyc
+file path=usr/lib/python2.6/ctypes/test/test_checkretval.py
+file path=usr/lib/python2.6/ctypes/test/test_checkretval.pyc
+file path=usr/lib/python2.6/ctypes/test/test_delattr.py
+file path=usr/lib/python2.6/ctypes/test/test_delattr.pyc
+file path=usr/lib/python2.6/ctypes/test/test_errcheck.py
+file path=usr/lib/python2.6/ctypes/test/test_errcheck.pyc
+file path=usr/lib/python2.6/ctypes/test/test_errno.py
+file path=usr/lib/python2.6/ctypes/test/test_errno.pyc
+file path=usr/lib/python2.6/ctypes/test/test_find.py
+file path=usr/lib/python2.6/ctypes/test/test_find.pyc
+file path=usr/lib/python2.6/ctypes/test/test_frombuffer.py
+file path=usr/lib/python2.6/ctypes/test/test_frombuffer.pyc
+file path=usr/lib/python2.6/ctypes/test/test_funcptr.py
+file path=usr/lib/python2.6/ctypes/test/test_funcptr.pyc
+file path=usr/lib/python2.6/ctypes/test/test_functions.py
+file path=usr/lib/python2.6/ctypes/test/test_functions.pyc
+file path=usr/lib/python2.6/ctypes/test/test_incomplete.py
+file path=usr/lib/python2.6/ctypes/test/test_incomplete.pyc
+file path=usr/lib/python2.6/ctypes/test/test_init.py
+file path=usr/lib/python2.6/ctypes/test/test_init.pyc
+file path=usr/lib/python2.6/ctypes/test/test_integers.py
+file path=usr/lib/python2.6/ctypes/test/test_integers.pyc
+file path=usr/lib/python2.6/ctypes/test/test_internals.py
+file path=usr/lib/python2.6/ctypes/test/test_internals.pyc
+file path=usr/lib/python2.6/ctypes/test/test_keeprefs.py
+file path=usr/lib/python2.6/ctypes/test/test_keeprefs.pyc
+file path=usr/lib/python2.6/ctypes/test/test_libc.py
+file path=usr/lib/python2.6/ctypes/test/test_libc.pyc
+file path=usr/lib/python2.6/ctypes/test/test_loading.py
+file path=usr/lib/python2.6/ctypes/test/test_loading.pyc
+file path=usr/lib/python2.6/ctypes/test/test_macholib.py
+file path=usr/lib/python2.6/ctypes/test/test_macholib.pyc
+file path=usr/lib/python2.6/ctypes/test/test_memfunctions.py
+file path=usr/lib/python2.6/ctypes/test/test_memfunctions.pyc
+file path=usr/lib/python2.6/ctypes/test/test_numbers.py
+file path=usr/lib/python2.6/ctypes/test/test_numbers.pyc
+file path=usr/lib/python2.6/ctypes/test/test_objects.py
+file path=usr/lib/python2.6/ctypes/test/test_objects.pyc
+file path=usr/lib/python2.6/ctypes/test/test_parameters.py
+file path=usr/lib/python2.6/ctypes/test/test_parameters.pyc
+file path=usr/lib/python2.6/ctypes/test/test_pep3118.py
+file path=usr/lib/python2.6/ctypes/test/test_pep3118.pyc
+file path=usr/lib/python2.6/ctypes/test/test_pickling.py
+file path=usr/lib/python2.6/ctypes/test/test_pickling.pyc
+file path=usr/lib/python2.6/ctypes/test/test_pointers.py
+file path=usr/lib/python2.6/ctypes/test/test_pointers.pyc
+file path=usr/lib/python2.6/ctypes/test/test_prototypes.py
+file path=usr/lib/python2.6/ctypes/test/test_prototypes.pyc
+file path=usr/lib/python2.6/ctypes/test/test_python_api.py
+file path=usr/lib/python2.6/ctypes/test/test_python_api.pyc
+file path=usr/lib/python2.6/ctypes/test/test_random_things.py
+file path=usr/lib/python2.6/ctypes/test/test_random_things.pyc
+file path=usr/lib/python2.6/ctypes/test/test_refcounts.py
+file path=usr/lib/python2.6/ctypes/test/test_refcounts.pyc
+file path=usr/lib/python2.6/ctypes/test/test_repr.py
+file path=usr/lib/python2.6/ctypes/test/test_repr.pyc
+file path=usr/lib/python2.6/ctypes/test/test_returnfuncptrs.py
+file path=usr/lib/python2.6/ctypes/test/test_returnfuncptrs.pyc
+file path=usr/lib/python2.6/ctypes/test/test_simplesubclasses.py
+file path=usr/lib/python2.6/ctypes/test/test_simplesubclasses.pyc
+file path=usr/lib/python2.6/ctypes/test/test_sizes.py
+file path=usr/lib/python2.6/ctypes/test/test_sizes.pyc
+file path=usr/lib/python2.6/ctypes/test/test_slicing.py
+file path=usr/lib/python2.6/ctypes/test/test_slicing.pyc
+file path=usr/lib/python2.6/ctypes/test/test_stringptr.py
+file path=usr/lib/python2.6/ctypes/test/test_stringptr.pyc
+file path=usr/lib/python2.6/ctypes/test/test_strings.py
+file path=usr/lib/python2.6/ctypes/test/test_strings.pyc
+file path=usr/lib/python2.6/ctypes/test/test_struct_fields.py
+file path=usr/lib/python2.6/ctypes/test/test_struct_fields.pyc
+file path=usr/lib/python2.6/ctypes/test/test_structures.py
+file path=usr/lib/python2.6/ctypes/test/test_structures.pyc
+file path=usr/lib/python2.6/ctypes/test/test_unaligned_structures.py
+file path=usr/lib/python2.6/ctypes/test/test_unaligned_structures.pyc
+file path=usr/lib/python2.6/ctypes/test/test_unicode.py
+file path=usr/lib/python2.6/ctypes/test/test_unicode.pyc
+file path=usr/lib/python2.6/ctypes/test/test_values.py
+file path=usr/lib/python2.6/ctypes/test/test_values.pyc
+file path=usr/lib/python2.6/ctypes/test/test_varsize_struct.py
+file path=usr/lib/python2.6/ctypes/test/test_varsize_struct.pyc
+file path=usr/lib/python2.6/ctypes/test/test_win32.py
+file path=usr/lib/python2.6/ctypes/test/test_win32.pyc
+file path=usr/lib/python2.6/ctypes/util.py
+file path=usr/lib/python2.6/ctypes/util.pyc
+file path=usr/lib/python2.6/ctypes/wintypes.py
+file path=usr/lib/python2.6/ctypes/wintypes.pyc
+file path=usr/lib/python2.6/curses/__init__.py
+file path=usr/lib/python2.6/curses/__init__.pyc
+file path=usr/lib/python2.6/curses/ascii.py
+file path=usr/lib/python2.6/curses/ascii.pyc
+file path=usr/lib/python2.6/curses/has_key.py
+file path=usr/lib/python2.6/curses/has_key.pyc
+file path=usr/lib/python2.6/curses/panel.py
+file path=usr/lib/python2.6/curses/panel.pyc
+file path=usr/lib/python2.6/curses/textpad.py
+file path=usr/lib/python2.6/curses/textpad.pyc
+file path=usr/lib/python2.6/curses/wrapper.py
+file path=usr/lib/python2.6/curses/wrapper.pyc
+file path=usr/lib/python2.6/dbhash.py
+file path=usr/lib/python2.6/dbhash.pyc
+file path=usr/lib/python2.6/decimal.py
+file path=usr/lib/python2.6/decimal.pyc
+file path=usr/lib/python2.6/difflib.py
+file path=usr/lib/python2.6/difflib.pyc
+file path=usr/lib/python2.6/dircache.py
+file path=usr/lib/python2.6/dircache.pyc
+file path=usr/lib/python2.6/dis.py
+file path=usr/lib/python2.6/dis.pyc
+file path=usr/lib/python2.6/distutils/README
+file path=usr/lib/python2.6/distutils/__init__.py
+file path=usr/lib/python2.6/distutils/__init__.pyc
+file path=usr/lib/python2.6/distutils/archive_util.py
+file path=usr/lib/python2.6/distutils/archive_util.pyc
+file path=usr/lib/python2.6/distutils/bcppcompiler.py
+file path=usr/lib/python2.6/distutils/bcppcompiler.pyc
+file path=usr/lib/python2.6/distutils/ccompiler.py
+file path=usr/lib/python2.6/distutils/ccompiler.pyc
+file path=usr/lib/python2.6/distutils/cmd.py
+file path=usr/lib/python2.6/distutils/cmd.pyc
+file path=usr/lib/python2.6/distutils/command/__init__.py
+file path=usr/lib/python2.6/distutils/command/__init__.pyc
+file path=usr/lib/python2.6/distutils/command/bdist.py
+file path=usr/lib/python2.6/distutils/command/bdist.pyc
+file path=usr/lib/python2.6/distutils/command/bdist_dumb.py
+file path=usr/lib/python2.6/distutils/command/bdist_dumb.pyc
+file path=usr/lib/python2.6/distutils/command/bdist_msi.py
+file path=usr/lib/python2.6/distutils/command/bdist_msi.pyc
+file path=usr/lib/python2.6/distutils/command/bdist_rpm.py
+file path=usr/lib/python2.6/distutils/command/bdist_rpm.pyc
+file path=usr/lib/python2.6/distutils/command/bdist_wininst.py
+file path=usr/lib/python2.6/distutils/command/bdist_wininst.pyc
+file path=usr/lib/python2.6/distutils/command/build.py
+file path=usr/lib/python2.6/distutils/command/build.pyc
+file path=usr/lib/python2.6/distutils/command/build_clib.py
+file path=usr/lib/python2.6/distutils/command/build_clib.pyc
+file path=usr/lib/python2.6/distutils/command/build_ext.py
+file path=usr/lib/python2.6/distutils/command/build_ext.pyc
+file path=usr/lib/python2.6/distutils/command/build_py.py
+file path=usr/lib/python2.6/distutils/command/build_py.pyc
+file path=usr/lib/python2.6/distutils/command/build_scripts.py
+file path=usr/lib/python2.6/distutils/command/build_scripts.pyc
+file path=usr/lib/python2.6/distutils/command/clean.py
+file path=usr/lib/python2.6/distutils/command/clean.pyc
+file path=usr/lib/python2.6/distutils/command/command_template
+file path=usr/lib/python2.6/distutils/command/config.py
+file path=usr/lib/python2.6/distutils/command/config.pyc
+file path=usr/lib/python2.6/distutils/command/install.py
+file path=usr/lib/python2.6/distutils/command/install.pyc
+file path=usr/lib/python2.6/distutils/command/install_data.py
+file path=usr/lib/python2.6/distutils/command/install_data.pyc
+file path=usr/lib/python2.6/distutils/command/install_egg_info.py
+file path=usr/lib/python2.6/distutils/command/install_egg_info.pyc
+file path=usr/lib/python2.6/distutils/command/install_headers.py
+file path=usr/lib/python2.6/distutils/command/install_headers.pyc
+file path=usr/lib/python2.6/distutils/command/install_lib.py
+file path=usr/lib/python2.6/distutils/command/install_lib.pyc
+file path=usr/lib/python2.6/distutils/command/install_scripts.py
+file path=usr/lib/python2.6/distutils/command/install_scripts.pyc
+file path=usr/lib/python2.6/distutils/command/register.py
+file path=usr/lib/python2.6/distutils/command/register.pyc
+file path=usr/lib/python2.6/distutils/command/sdist.py
+file path=usr/lib/python2.6/distutils/command/sdist.pyc
+file path=usr/lib/python2.6/distutils/command/upload.py
+file path=usr/lib/python2.6/distutils/command/upload.pyc
+file path=usr/lib/python2.6/distutils/command/wininst-6.0.exe
+file path=usr/lib/python2.6/distutils/command/wininst-7.1.exe
+file path=usr/lib/python2.6/distutils/command/wininst-8.0.exe
+file path=usr/lib/python2.6/distutils/command/wininst-9.0-amd64.exe
+file path=usr/lib/python2.6/distutils/command/wininst-9.0.exe
+file path=usr/lib/python2.6/distutils/config.py
+file path=usr/lib/python2.6/distutils/config.pyc
+file path=usr/lib/python2.6/distutils/core.py
+file path=usr/lib/python2.6/distutils/core.pyc
+file path=usr/lib/python2.6/distutils/cygwinccompiler.py
+file path=usr/lib/python2.6/distutils/cygwinccompiler.pyc
+file path=usr/lib/python2.6/distutils/debug.py
+file path=usr/lib/python2.6/distutils/debug.pyc
+file path=usr/lib/python2.6/distutils/dep_util.py
+file path=usr/lib/python2.6/distutils/dep_util.pyc
+file path=usr/lib/python2.6/distutils/dir_util.py
+file path=usr/lib/python2.6/distutils/dir_util.pyc
+file path=usr/lib/python2.6/distutils/dist.py
+file path=usr/lib/python2.6/distutils/dist.pyc
+file path=usr/lib/python2.6/distutils/emxccompiler.py
+file path=usr/lib/python2.6/distutils/emxccompiler.pyc
+file path=usr/lib/python2.6/distutils/errors.py
+file path=usr/lib/python2.6/distutils/errors.pyc
+file path=usr/lib/python2.6/distutils/extension.py
+file path=usr/lib/python2.6/distutils/extension.pyc
+file path=usr/lib/python2.6/distutils/fancy_getopt.py
+file path=usr/lib/python2.6/distutils/fancy_getopt.pyc
+file path=usr/lib/python2.6/distutils/file_util.py
+file path=usr/lib/python2.6/distutils/file_util.pyc
+file path=usr/lib/python2.6/distutils/filelist.py
+file path=usr/lib/python2.6/distutils/filelist.pyc
+file path=usr/lib/python2.6/distutils/log.py
+file path=usr/lib/python2.6/distutils/log.pyc
+file path=usr/lib/python2.6/distutils/msvc9compiler.py
+file path=usr/lib/python2.6/distutils/msvc9compiler.pyc
+file path=usr/lib/python2.6/distutils/msvccompiler.py
+file path=usr/lib/python2.6/distutils/msvccompiler.pyc
+file path=usr/lib/python2.6/distutils/mwerkscompiler.py
+file path=usr/lib/python2.6/distutils/mwerkscompiler.pyc
+file path=usr/lib/python2.6/distutils/spawn.py
+file path=usr/lib/python2.6/distutils/spawn.pyc
+file path=usr/lib/python2.6/distutils/sysconfig.py
+file path=usr/lib/python2.6/distutils/sysconfig.pyc
+file path=usr/lib/python2.6/distutils/tests/__init__.py
+file path=usr/lib/python2.6/distutils/tests/__init__.pyc
+file path=usr/lib/python2.6/distutils/tests/setuptools_build_ext.py
+file path=usr/lib/python2.6/distutils/tests/setuptools_build_ext.pyc
+file path=usr/lib/python2.6/distutils/tests/setuptools_extension.py
+file path=usr/lib/python2.6/distutils/tests/setuptools_extension.pyc
+file path=usr/lib/python2.6/distutils/tests/support.py
+file path=usr/lib/python2.6/distutils/tests/support.pyc
+file path=usr/lib/python2.6/distutils/tests/test_bdist_wininst.py
+file path=usr/lib/python2.6/distutils/tests/test_bdist_wininst.pyc
+file path=usr/lib/python2.6/distutils/tests/test_build_ext.py
+file path=usr/lib/python2.6/distutils/tests/test_build_ext.pyc
+file path=usr/lib/python2.6/distutils/tests/test_build_py.py
+file path=usr/lib/python2.6/distutils/tests/test_build_py.pyc
+file path=usr/lib/python2.6/distutils/tests/test_build_scripts.py
+file path=usr/lib/python2.6/distutils/tests/test_build_scripts.pyc
+file path=usr/lib/python2.6/distutils/tests/test_config.py
+file path=usr/lib/python2.6/distutils/tests/test_config.pyc
+file path=usr/lib/python2.6/distutils/tests/test_core.py
+file path=usr/lib/python2.6/distutils/tests/test_core.pyc
+file path=usr/lib/python2.6/distutils/tests/test_dist.py
+file path=usr/lib/python2.6/distutils/tests/test_dist.pyc
+file path=usr/lib/python2.6/distutils/tests/test_filelist.py
+file path=usr/lib/python2.6/distutils/tests/test_filelist.pyc
+file path=usr/lib/python2.6/distutils/tests/test_install.py
+file path=usr/lib/python2.6/distutils/tests/test_install.pyc
+file path=usr/lib/python2.6/distutils/tests/test_install_scripts.py
+file path=usr/lib/python2.6/distutils/tests/test_install_scripts.pyc
+file path=usr/lib/python2.6/distutils/tests/test_msvc9compiler.py
+file path=usr/lib/python2.6/distutils/tests/test_msvc9compiler.pyc
+file path=usr/lib/python2.6/distutils/tests/test_register.py
+file path=usr/lib/python2.6/distutils/tests/test_register.pyc
+file path=usr/lib/python2.6/distutils/tests/test_sdist.py
+file path=usr/lib/python2.6/distutils/tests/test_sdist.pyc
+file path=usr/lib/python2.6/distutils/tests/test_sysconfig.py
+file path=usr/lib/python2.6/distutils/tests/test_sysconfig.pyc
+file path=usr/lib/python2.6/distutils/tests/test_upload.py
+file path=usr/lib/python2.6/distutils/tests/test_upload.pyc
+file path=usr/lib/python2.6/distutils/tests/test_versionpredicate.py
+file path=usr/lib/python2.6/distutils/tests/test_versionpredicate.pyc
+file path=usr/lib/python2.6/distutils/text_file.py
+file path=usr/lib/python2.6/distutils/text_file.pyc
+file path=usr/lib/python2.6/distutils/unixccompiler.py
+file path=usr/lib/python2.6/distutils/unixccompiler.pyc
+file path=usr/lib/python2.6/distutils/util.py
+file path=usr/lib/python2.6/distutils/util.pyc
+file path=usr/lib/python2.6/distutils/version.py
+file path=usr/lib/python2.6/distutils/version.pyc
+file path=usr/lib/python2.6/distutils/versionpredicate.py
+file path=usr/lib/python2.6/distutils/versionpredicate.pyc
+file path=usr/lib/python2.6/doctest.py
+file path=usr/lib/python2.6/doctest.pyc
+file path=usr/lib/python2.6/dumbdbm.py
+file path=usr/lib/python2.6/dumbdbm.pyc
+file path=usr/lib/python2.6/dummy_thread.py
+file path=usr/lib/python2.6/dummy_thread.pyc
+file path=usr/lib/python2.6/dummy_threading.py
+file path=usr/lib/python2.6/dummy_threading.pyc
+file path=usr/lib/python2.6/email/__init__.py
+file path=usr/lib/python2.6/email/__init__.pyc
+file path=usr/lib/python2.6/email/_parseaddr.py
+file path=usr/lib/python2.6/email/_parseaddr.pyc
+file path=usr/lib/python2.6/email/base64mime.py
+file path=usr/lib/python2.6/email/base64mime.pyc
+file path=usr/lib/python2.6/email/charset.py
+file path=usr/lib/python2.6/email/charset.pyc
+file path=usr/lib/python2.6/email/encoders.py
+file path=usr/lib/python2.6/email/encoders.pyc
+file path=usr/lib/python2.6/email/errors.py
+file path=usr/lib/python2.6/email/errors.pyc
+file path=usr/lib/python2.6/email/feedparser.py
+file path=usr/lib/python2.6/email/feedparser.pyc
+file path=usr/lib/python2.6/email/generator.py
+file path=usr/lib/python2.6/email/generator.pyc
+file path=usr/lib/python2.6/email/header.py
+file path=usr/lib/python2.6/email/header.pyc
+file path=usr/lib/python2.6/email/iterators.py
+file path=usr/lib/python2.6/email/iterators.pyc
+file path=usr/lib/python2.6/email/message.py
+file path=usr/lib/python2.6/email/message.pyc
+file path=usr/lib/python2.6/email/mime/__init__.py
+file path=usr/lib/python2.6/email/mime/__init__.pyc
+file path=usr/lib/python2.6/email/mime/application.py
+file path=usr/lib/python2.6/email/mime/application.pyc
+file path=usr/lib/python2.6/email/mime/audio.py
+file path=usr/lib/python2.6/email/mime/audio.pyc
+file path=usr/lib/python2.6/email/mime/base.py
+file path=usr/lib/python2.6/email/mime/base.pyc
+file path=usr/lib/python2.6/email/mime/image.py
+file path=usr/lib/python2.6/email/mime/image.pyc
+file path=usr/lib/python2.6/email/mime/message.py
+file path=usr/lib/python2.6/email/mime/message.pyc
+file path=usr/lib/python2.6/email/mime/multipart.py
+file path=usr/lib/python2.6/email/mime/multipart.pyc
+file path=usr/lib/python2.6/email/mime/nonmultipart.py
+file path=usr/lib/python2.6/email/mime/nonmultipart.pyc
+file path=usr/lib/python2.6/email/mime/text.py
+file path=usr/lib/python2.6/email/mime/text.pyc
+file path=usr/lib/python2.6/email/parser.py
+file path=usr/lib/python2.6/email/parser.pyc
+file path=usr/lib/python2.6/email/quoprimime.py
+file path=usr/lib/python2.6/email/quoprimime.pyc
+file path=usr/lib/python2.6/email/test/__init__.py
+file path=usr/lib/python2.6/email/test/__init__.pyc
+file path=usr/lib/python2.6/email/test/data/PyBanner048.gif
+file path=usr/lib/python2.6/email/test/data/audiotest.au
+file path=usr/lib/python2.6/email/test/data/msg_01.txt
+file path=usr/lib/python2.6/email/test/data/msg_02.txt
+file path=usr/lib/python2.6/email/test/data/msg_03.txt
+file path=usr/lib/python2.6/email/test/data/msg_04.txt
+file path=usr/lib/python2.6/email/test/data/msg_05.txt
+file path=usr/lib/python2.6/email/test/data/msg_06.txt
+file path=usr/lib/python2.6/email/test/data/msg_07.txt
+file path=usr/lib/python2.6/email/test/data/msg_08.txt
+file path=usr/lib/python2.6/email/test/data/msg_09.txt
+file path=usr/lib/python2.6/email/test/data/msg_10.txt
+file path=usr/lib/python2.6/email/test/data/msg_11.txt
+file path=usr/lib/python2.6/email/test/data/msg_12.txt
+file path=usr/lib/python2.6/email/test/data/msg_12a.txt
+file path=usr/lib/python2.6/email/test/data/msg_13.txt
+file path=usr/lib/python2.6/email/test/data/msg_14.txt
+file path=usr/lib/python2.6/email/test/data/msg_15.txt
+file path=usr/lib/python2.6/email/test/data/msg_16.txt
+file path=usr/lib/python2.6/email/test/data/msg_17.txt
+file path=usr/lib/python2.6/email/test/data/msg_18.txt
+file path=usr/lib/python2.6/email/test/data/msg_19.txt
+file path=usr/lib/python2.6/email/test/data/msg_20.txt
+file path=usr/lib/python2.6/email/test/data/msg_21.txt
+file path=usr/lib/python2.6/email/test/data/msg_22.txt
+file path=usr/lib/python2.6/email/test/data/msg_23.txt
+file path=usr/lib/python2.6/email/test/data/msg_24.txt
+file path=usr/lib/python2.6/email/test/data/msg_25.txt
+file path=usr/lib/python2.6/email/test/data/msg_26.txt
+file path=usr/lib/python2.6/email/test/data/msg_27.txt
+file path=usr/lib/python2.6/email/test/data/msg_28.txt
+file path=usr/lib/python2.6/email/test/data/msg_29.txt
+file path=usr/lib/python2.6/email/test/data/msg_30.txt
+file path=usr/lib/python2.6/email/test/data/msg_31.txt
+file path=usr/lib/python2.6/email/test/data/msg_32.txt
+file path=usr/lib/python2.6/email/test/data/msg_33.txt
+file path=usr/lib/python2.6/email/test/data/msg_34.txt
+file path=usr/lib/python2.6/email/test/data/msg_35.txt
+file path=usr/lib/python2.6/email/test/data/msg_36.txt
+file path=usr/lib/python2.6/email/test/data/msg_37.txt
+file path=usr/lib/python2.6/email/test/data/msg_38.txt
+file path=usr/lib/python2.6/email/test/data/msg_39.txt
+file path=usr/lib/python2.6/email/test/data/msg_40.txt
+file path=usr/lib/python2.6/email/test/data/msg_41.txt
+file path=usr/lib/python2.6/email/test/data/msg_42.txt
+file path=usr/lib/python2.6/email/test/data/msg_43.txt
+file path=usr/lib/python2.6/email/test/data/msg_44.txt
+file path=usr/lib/python2.6/email/test/test_email.py
+file path=usr/lib/python2.6/email/test/test_email.pyc
+file path=usr/lib/python2.6/email/test/test_email_codecs.py
+file path=usr/lib/python2.6/email/test/test_email_codecs.pyc
+file path=usr/lib/python2.6/email/test/test_email_codecs_renamed.py
+file path=usr/lib/python2.6/email/test/test_email_codecs_renamed.pyc
+file path=usr/lib/python2.6/email/test/test_email_renamed.py
+file path=usr/lib/python2.6/email/test/test_email_renamed.pyc
+file path=usr/lib/python2.6/email/test/test_email_torture.py
+file path=usr/lib/python2.6/email/test/test_email_torture.pyc
+file path=usr/lib/python2.6/email/utils.py
+file path=usr/lib/python2.6/email/utils.pyc
+file path=usr/lib/python2.6/encodings/__init__.py
+file path=usr/lib/python2.6/encodings/__init__.pyc
+file path=usr/lib/python2.6/encodings/aliases.py
+file path=usr/lib/python2.6/encodings/aliases.pyc
+file path=usr/lib/python2.6/encodings/ascii.py
+file path=usr/lib/python2.6/encodings/ascii.pyc
+file path=usr/lib/python2.6/encodings/base64_codec.py
+file path=usr/lib/python2.6/encodings/base64_codec.pyc
+file path=usr/lib/python2.6/encodings/big5.py
+file path=usr/lib/python2.6/encodings/big5.pyc
+file path=usr/lib/python2.6/encodings/big5hkscs.py
+file path=usr/lib/python2.6/encodings/big5hkscs.pyc
+file path=usr/lib/python2.6/encodings/bz2_codec.py
+file path=usr/lib/python2.6/encodings/bz2_codec.pyc
+file path=usr/lib/python2.6/encodings/charmap.py
+file path=usr/lib/python2.6/encodings/charmap.pyc
+file path=usr/lib/python2.6/encodings/cp037.py
+file path=usr/lib/python2.6/encodings/cp037.pyc
+file path=usr/lib/python2.6/encodings/cp1006.py
+file path=usr/lib/python2.6/encodings/cp1006.pyc
+file path=usr/lib/python2.6/encodings/cp1026.py
+file path=usr/lib/python2.6/encodings/cp1026.pyc
+file path=usr/lib/python2.6/encodings/cp1140.py
+file path=usr/lib/python2.6/encodings/cp1140.pyc
+file path=usr/lib/python2.6/encodings/cp1250.py
+file path=usr/lib/python2.6/encodings/cp1250.pyc
+file path=usr/lib/python2.6/encodings/cp1251.py
+file path=usr/lib/python2.6/encodings/cp1251.pyc
+file path=usr/lib/python2.6/encodings/cp1252.py
+file path=usr/lib/python2.6/encodings/cp1252.pyc
+file path=usr/lib/python2.6/encodings/cp1253.py
+file path=usr/lib/python2.6/encodings/cp1253.pyc
+file path=usr/lib/python2.6/encodings/cp1254.py
+file path=usr/lib/python2.6/encodings/cp1254.pyc
+file path=usr/lib/python2.6/encodings/cp1255.py
+file path=usr/lib/python2.6/encodings/cp1255.pyc
+file path=usr/lib/python2.6/encodings/cp1256.py
+file path=usr/lib/python2.6/encodings/cp1256.pyc
+file path=usr/lib/python2.6/encodings/cp1257.py
+file path=usr/lib/python2.6/encodings/cp1257.pyc
+file path=usr/lib/python2.6/encodings/cp1258.py
+file path=usr/lib/python2.6/encodings/cp1258.pyc
+file path=usr/lib/python2.6/encodings/cp424.py
+file path=usr/lib/python2.6/encodings/cp424.pyc
+file path=usr/lib/python2.6/encodings/cp437.py
+file path=usr/lib/python2.6/encodings/cp437.pyc
+file path=usr/lib/python2.6/encodings/cp500.py
+file path=usr/lib/python2.6/encodings/cp500.pyc
+file path=usr/lib/python2.6/encodings/cp737.py
+file path=usr/lib/python2.6/encodings/cp737.pyc
+file path=usr/lib/python2.6/encodings/cp775.py
+file path=usr/lib/python2.6/encodings/cp775.pyc
+file path=usr/lib/python2.6/encodings/cp850.py
+file path=usr/lib/python2.6/encodings/cp850.pyc
+file path=usr/lib/python2.6/encodings/cp852.py
+file path=usr/lib/python2.6/encodings/cp852.pyc
+file path=usr/lib/python2.6/encodings/cp855.py
+file path=usr/lib/python2.6/encodings/cp855.pyc
+file path=usr/lib/python2.6/encodings/cp856.py
+file path=usr/lib/python2.6/encodings/cp856.pyc
+file path=usr/lib/python2.6/encodings/cp857.py
+file path=usr/lib/python2.6/encodings/cp857.pyc
+file path=usr/lib/python2.6/encodings/cp860.py
+file path=usr/lib/python2.6/encodings/cp860.pyc
+file path=usr/lib/python2.6/encodings/cp861.py
+file path=usr/lib/python2.6/encodings/cp861.pyc
+file path=usr/lib/python2.6/encodings/cp862.py
+file path=usr/lib/python2.6/encodings/cp862.pyc
+file path=usr/lib/python2.6/encodings/cp863.py
+file path=usr/lib/python2.6/encodings/cp863.pyc
+file path=usr/lib/python2.6/encodings/cp864.py
+file path=usr/lib/python2.6/encodings/cp864.pyc
+file path=usr/lib/python2.6/encodings/cp865.py
+file path=usr/lib/python2.6/encodings/cp865.pyc
+file path=usr/lib/python2.6/encodings/cp866.py
+file path=usr/lib/python2.6/encodings/cp866.pyc
+file path=usr/lib/python2.6/encodings/cp869.py
+file path=usr/lib/python2.6/encodings/cp869.pyc
+file path=usr/lib/python2.6/encodings/cp874.py
+file path=usr/lib/python2.6/encodings/cp874.pyc
+file path=usr/lib/python2.6/encodings/cp875.py
+file path=usr/lib/python2.6/encodings/cp875.pyc
+file path=usr/lib/python2.6/encodings/cp932.py
+file path=usr/lib/python2.6/encodings/cp932.pyc
+file path=usr/lib/python2.6/encodings/cp949.py
+file path=usr/lib/python2.6/encodings/cp949.pyc
+file path=usr/lib/python2.6/encodings/cp950.py
+file path=usr/lib/python2.6/encodings/cp950.pyc
+file path=usr/lib/python2.6/encodings/euc_jis_2004.py
+file path=usr/lib/python2.6/encodings/euc_jis_2004.pyc
+file path=usr/lib/python2.6/encodings/euc_jisx0213.py
+file path=usr/lib/python2.6/encodings/euc_jisx0213.pyc
+file path=usr/lib/python2.6/encodings/euc_jp.py
+file path=usr/lib/python2.6/encodings/euc_jp.pyc
+file path=usr/lib/python2.6/encodings/euc_kr.py
+file path=usr/lib/python2.6/encodings/euc_kr.pyc
+file path=usr/lib/python2.6/encodings/gb18030.py
+file path=usr/lib/python2.6/encodings/gb18030.pyc
+file path=usr/lib/python2.6/encodings/gb2312.py
+file path=usr/lib/python2.6/encodings/gb2312.pyc
+file path=usr/lib/python2.6/encodings/gbk.py
+file path=usr/lib/python2.6/encodings/gbk.pyc
+file path=usr/lib/python2.6/encodings/hex_codec.py
+file path=usr/lib/python2.6/encodings/hex_codec.pyc
+file path=usr/lib/python2.6/encodings/hp_roman8.py
+file path=usr/lib/python2.6/encodings/hp_roman8.pyc
+file path=usr/lib/python2.6/encodings/hz.py
+file path=usr/lib/python2.6/encodings/hz.pyc
+file path=usr/lib/python2.6/encodings/idna.py
+file path=usr/lib/python2.6/encodings/idna.pyc
+file path=usr/lib/python2.6/encodings/iso2022_jp.py
+file path=usr/lib/python2.6/encodings/iso2022_jp.pyc
+file path=usr/lib/python2.6/encodings/iso2022_jp_1.py
+file path=usr/lib/python2.6/encodings/iso2022_jp_1.pyc
+file path=usr/lib/python2.6/encodings/iso2022_jp_2.py
+file path=usr/lib/python2.6/encodings/iso2022_jp_2.pyc
+file path=usr/lib/python2.6/encodings/iso2022_jp_2004.py
+file path=usr/lib/python2.6/encodings/iso2022_jp_2004.pyc
+file path=usr/lib/python2.6/encodings/iso2022_jp_3.py
+file path=usr/lib/python2.6/encodings/iso2022_jp_3.pyc
+file path=usr/lib/python2.6/encodings/iso2022_jp_ext.py
+file path=usr/lib/python2.6/encodings/iso2022_jp_ext.pyc
+file path=usr/lib/python2.6/encodings/iso2022_kr.py
+file path=usr/lib/python2.6/encodings/iso2022_kr.pyc
+file path=usr/lib/python2.6/encodings/iso8859_1.py
+file path=usr/lib/python2.6/encodings/iso8859_1.pyc
+file path=usr/lib/python2.6/encodings/iso8859_10.py
+file path=usr/lib/python2.6/encodings/iso8859_10.pyc
+file path=usr/lib/python2.6/encodings/iso8859_11.py
+file path=usr/lib/python2.6/encodings/iso8859_11.pyc
+file path=usr/lib/python2.6/encodings/iso8859_13.py
+file path=usr/lib/python2.6/encodings/iso8859_13.pyc
+file path=usr/lib/python2.6/encodings/iso8859_14.py
+file path=usr/lib/python2.6/encodings/iso8859_14.pyc
+file path=usr/lib/python2.6/encodings/iso8859_15.py
+file path=usr/lib/python2.6/encodings/iso8859_15.pyc
+file path=usr/lib/python2.6/encodings/iso8859_16.py
+file path=usr/lib/python2.6/encodings/iso8859_16.pyc
+file path=usr/lib/python2.6/encodings/iso8859_2.py
+file path=usr/lib/python2.6/encodings/iso8859_2.pyc
+file path=usr/lib/python2.6/encodings/iso8859_3.py
+file path=usr/lib/python2.6/encodings/iso8859_3.pyc
+file path=usr/lib/python2.6/encodings/iso8859_4.py
+file path=usr/lib/python2.6/encodings/iso8859_4.pyc
+file path=usr/lib/python2.6/encodings/iso8859_5.py
+file path=usr/lib/python2.6/encodings/iso8859_5.pyc
+file path=usr/lib/python2.6/encodings/iso8859_6.py
+file path=usr/lib/python2.6/encodings/iso8859_6.pyc
+file path=usr/lib/python2.6/encodings/iso8859_7.py
+file path=usr/lib/python2.6/encodings/iso8859_7.pyc
+file path=usr/lib/python2.6/encodings/iso8859_8.py
+file path=usr/lib/python2.6/encodings/iso8859_8.pyc
+file path=usr/lib/python2.6/encodings/iso8859_9.py
+file path=usr/lib/python2.6/encodings/iso8859_9.pyc
+file path=usr/lib/python2.6/encodings/johab.py
+file path=usr/lib/python2.6/encodings/johab.pyc
+file path=usr/lib/python2.6/encodings/koi8_r.py
+file path=usr/lib/python2.6/encodings/koi8_r.pyc
+file path=usr/lib/python2.6/encodings/koi8_u.py
+file path=usr/lib/python2.6/encodings/koi8_u.pyc
+file path=usr/lib/python2.6/encodings/latin_1.py
+file path=usr/lib/python2.6/encodings/latin_1.pyc
+file path=usr/lib/python2.6/encodings/mac_arabic.py
+file path=usr/lib/python2.6/encodings/mac_arabic.pyc
+file path=usr/lib/python2.6/encodings/mac_centeuro.py
+file path=usr/lib/python2.6/encodings/mac_centeuro.pyc
+file path=usr/lib/python2.6/encodings/mac_croatian.py
+file path=usr/lib/python2.6/encodings/mac_croatian.pyc
+file path=usr/lib/python2.6/encodings/mac_cyrillic.py
+file path=usr/lib/python2.6/encodings/mac_cyrillic.pyc
+file path=usr/lib/python2.6/encodings/mac_farsi.py
+file path=usr/lib/python2.6/encodings/mac_farsi.pyc
+file path=usr/lib/python2.6/encodings/mac_greek.py
+file path=usr/lib/python2.6/encodings/mac_greek.pyc
+file path=usr/lib/python2.6/encodings/mac_iceland.py
+file path=usr/lib/python2.6/encodings/mac_iceland.pyc
+file path=usr/lib/python2.6/encodings/mac_latin2.py
+file path=usr/lib/python2.6/encodings/mac_latin2.pyc
+file path=usr/lib/python2.6/encodings/mac_roman.py
+file path=usr/lib/python2.6/encodings/mac_roman.pyc
+file path=usr/lib/python2.6/encodings/mac_romanian.py
+file path=usr/lib/python2.6/encodings/mac_romanian.pyc
+file path=usr/lib/python2.6/encodings/mac_turkish.py
+file path=usr/lib/python2.6/encodings/mac_turkish.pyc
+file path=usr/lib/python2.6/encodings/mbcs.py
+file path=usr/lib/python2.6/encodings/mbcs.pyc
+file path=usr/lib/python2.6/encodings/palmos.py
+file path=usr/lib/python2.6/encodings/palmos.pyc
+file path=usr/lib/python2.6/encodings/ptcp154.py
+file path=usr/lib/python2.6/encodings/ptcp154.pyc
+file path=usr/lib/python2.6/encodings/punycode.py
+file path=usr/lib/python2.6/encodings/punycode.pyc
+file path=usr/lib/python2.6/encodings/quopri_codec.py
+file path=usr/lib/python2.6/encodings/quopri_codec.pyc
+file path=usr/lib/python2.6/encodings/raw_unicode_escape.py
+file path=usr/lib/python2.6/encodings/raw_unicode_escape.pyc
+file path=usr/lib/python2.6/encodings/rot_13.py
+file path=usr/lib/python2.6/encodings/rot_13.pyc
+file path=usr/lib/python2.6/encodings/shift_jis.py
+file path=usr/lib/python2.6/encodings/shift_jis.pyc
+file path=usr/lib/python2.6/encodings/shift_jis_2004.py
+file path=usr/lib/python2.6/encodings/shift_jis_2004.pyc
+file path=usr/lib/python2.6/encodings/shift_jisx0213.py
+file path=usr/lib/python2.6/encodings/shift_jisx0213.pyc
+file path=usr/lib/python2.6/encodings/string_escape.py
+file path=usr/lib/python2.6/encodings/string_escape.pyc
+file path=usr/lib/python2.6/encodings/tis_620.py
+file path=usr/lib/python2.6/encodings/tis_620.pyc
+file path=usr/lib/python2.6/encodings/undefined.py
+file path=usr/lib/python2.6/encodings/undefined.pyc
+file path=usr/lib/python2.6/encodings/unicode_escape.py
+file path=usr/lib/python2.6/encodings/unicode_escape.pyc
+file path=usr/lib/python2.6/encodings/unicode_internal.py
+file path=usr/lib/python2.6/encodings/unicode_internal.pyc
+file path=usr/lib/python2.6/encodings/utf_16.py
+file path=usr/lib/python2.6/encodings/utf_16.pyc
+file path=usr/lib/python2.6/encodings/utf_16_be.py
+file path=usr/lib/python2.6/encodings/utf_16_be.pyc
+file path=usr/lib/python2.6/encodings/utf_16_le.py
+file path=usr/lib/python2.6/encodings/utf_16_le.pyc
+file path=usr/lib/python2.6/encodings/utf_32.py
+file path=usr/lib/python2.6/encodings/utf_32.pyc
+file path=usr/lib/python2.6/encodings/utf_32_be.py
+file path=usr/lib/python2.6/encodings/utf_32_be.pyc
+file path=usr/lib/python2.6/encodings/utf_32_le.py
+file path=usr/lib/python2.6/encodings/utf_32_le.pyc
+file path=usr/lib/python2.6/encodings/utf_7.py
+file path=usr/lib/python2.6/encodings/utf_7.pyc
+file path=usr/lib/python2.6/encodings/utf_8.py
+file path=usr/lib/python2.6/encodings/utf_8.pyc
+file path=usr/lib/python2.6/encodings/utf_8_sig.py
+file path=usr/lib/python2.6/encodings/utf_8_sig.pyc
+file path=usr/lib/python2.6/encodings/uu_codec.py
+file path=usr/lib/python2.6/encodings/uu_codec.pyc
+file path=usr/lib/python2.6/encodings/zlib_codec.py
+file path=usr/lib/python2.6/encodings/zlib_codec.pyc
+file path=usr/lib/python2.6/filecmp.py
+file path=usr/lib/python2.6/filecmp.pyc
+file path=usr/lib/python2.6/fileinput.py
+file path=usr/lib/python2.6/fileinput.pyc
+file path=usr/lib/python2.6/fnmatch.py
+file path=usr/lib/python2.6/fnmatch.pyc
+file path=usr/lib/python2.6/formatter.py
+file path=usr/lib/python2.6/formatter.pyc
+file path=usr/lib/python2.6/fpformat.py
+file path=usr/lib/python2.6/fpformat.pyc
+file path=usr/lib/python2.6/fractions.py
+file path=usr/lib/python2.6/fractions.pyc
+file path=usr/lib/python2.6/ftplib.py
+file path=usr/lib/python2.6/ftplib.pyc
+file path=usr/lib/python2.6/functools.py
+file path=usr/lib/python2.6/functools.pyc
+file path=usr/lib/python2.6/genericpath.py
+file path=usr/lib/python2.6/genericpath.pyc
+file path=usr/lib/python2.6/getopt.py
+file path=usr/lib/python2.6/getopt.pyc
+file path=usr/lib/python2.6/getpass.py
+file path=usr/lib/python2.6/getpass.pyc
+file path=usr/lib/python2.6/gettext.py
+file path=usr/lib/python2.6/gettext.pyc
+file path=usr/lib/python2.6/glob.py
+file path=usr/lib/python2.6/glob.pyc
+file path=usr/lib/python2.6/gzip.py
+file path=usr/lib/python2.6/gzip.pyc
+file path=usr/lib/python2.6/hashlib.py
+file path=usr/lib/python2.6/hashlib.pyc
+file path=usr/lib/python2.6/heapq.py
+file path=usr/lib/python2.6/heapq.pyc
+file path=usr/lib/python2.6/hmac.py
+file path=usr/lib/python2.6/hmac.pyc
+file path=usr/lib/python2.6/hotshot/__init__.py
+file path=usr/lib/python2.6/hotshot/__init__.pyc
+file path=usr/lib/python2.6/hotshot/log.py
+file path=usr/lib/python2.6/hotshot/log.pyc
+file path=usr/lib/python2.6/hotshot/stats.py
+file path=usr/lib/python2.6/hotshot/stats.pyc
+file path=usr/lib/python2.6/hotshot/stones.py
+file path=usr/lib/python2.6/hotshot/stones.pyc
+file path=usr/lib/python2.6/htmlentitydefs.py
+file path=usr/lib/python2.6/htmlentitydefs.pyc
+file path=usr/lib/python2.6/htmllib.py
+file path=usr/lib/python2.6/htmllib.pyc
+file path=usr/lib/python2.6/httplib.py
+file path=usr/lib/python2.6/httplib.pyc
+file path=usr/lib/python2.6/idlelib/AutoComplete.py
+file path=usr/lib/python2.6/idlelib/AutoComplete.pyc
+file path=usr/lib/python2.6/idlelib/AutoCompleteWindow.py
+file path=usr/lib/python2.6/idlelib/AutoCompleteWindow.pyc
+file path=usr/lib/python2.6/idlelib/AutoExpand.py
+file path=usr/lib/python2.6/idlelib/AutoExpand.pyc
+file path=usr/lib/python2.6/idlelib/Bindings.py
+file path=usr/lib/python2.6/idlelib/Bindings.pyc
+file path=usr/lib/python2.6/idlelib/CREDITS.txt
+file path=usr/lib/python2.6/idlelib/CallTipWindow.py
+file path=usr/lib/python2.6/idlelib/CallTipWindow.pyc
+file path=usr/lib/python2.6/idlelib/CallTips.py
+file path=usr/lib/python2.6/idlelib/CallTips.pyc
+file path=usr/lib/python2.6/idlelib/ChangeLog
+file path=usr/lib/python2.6/idlelib/ClassBrowser.py
+file path=usr/lib/python2.6/idlelib/ClassBrowser.pyc
+file path=usr/lib/python2.6/idlelib/CodeContext.py
+file path=usr/lib/python2.6/idlelib/CodeContext.pyc
+file path=usr/lib/python2.6/idlelib/ColorDelegator.py
+file path=usr/lib/python2.6/idlelib/ColorDelegator.pyc
+file path=usr/lib/python2.6/idlelib/Debugger.py
+file path=usr/lib/python2.6/idlelib/Debugger.pyc
+file path=usr/lib/python2.6/idlelib/Delegator.py
+file path=usr/lib/python2.6/idlelib/Delegator.pyc
+file path=usr/lib/python2.6/idlelib/EditorWindow.py
+file path=usr/lib/python2.6/idlelib/EditorWindow.pyc
+file path=usr/lib/python2.6/idlelib/FileList.py
+file path=usr/lib/python2.6/idlelib/FileList.pyc
+file path=usr/lib/python2.6/idlelib/FormatParagraph.py
+file path=usr/lib/python2.6/idlelib/FormatParagraph.pyc
+file path=usr/lib/python2.6/idlelib/GrepDialog.py
+file path=usr/lib/python2.6/idlelib/GrepDialog.pyc
+file path=usr/lib/python2.6/idlelib/HISTORY.txt
+file path=usr/lib/python2.6/idlelib/HyperParser.py
+file path=usr/lib/python2.6/idlelib/HyperParser.pyc
+file path=usr/lib/python2.6/idlelib/IOBinding.py
+file path=usr/lib/python2.6/idlelib/IOBinding.pyc
+file path=usr/lib/python2.6/idlelib/Icons/folder.gif
+file path=usr/lib/python2.6/idlelib/Icons/idle.icns
+file path=usr/lib/python2.6/idlelib/Icons/minusnode.gif
+file path=usr/lib/python2.6/idlelib/Icons/openfolder.gif
+file path=usr/lib/python2.6/idlelib/Icons/plusnode.gif
+file path=usr/lib/python2.6/idlelib/Icons/python.gif
+file path=usr/lib/python2.6/idlelib/Icons/tk.gif
+file path=usr/lib/python2.6/idlelib/IdleHistory.py
+file path=usr/lib/python2.6/idlelib/IdleHistory.pyc
+file path=usr/lib/python2.6/idlelib/MultiCall.py
+file path=usr/lib/python2.6/idlelib/MultiCall.pyc
+file path=usr/lib/python2.6/idlelib/MultiStatusBar.py
+file path=usr/lib/python2.6/idlelib/MultiStatusBar.pyc
+file path=usr/lib/python2.6/idlelib/NEWS.txt
+file path=usr/lib/python2.6/idlelib/ObjectBrowser.py
+file path=usr/lib/python2.6/idlelib/ObjectBrowser.pyc
+file path=usr/lib/python2.6/idlelib/OutputWindow.py
+file path=usr/lib/python2.6/idlelib/OutputWindow.pyc
+file path=usr/lib/python2.6/idlelib/ParenMatch.py
+file path=usr/lib/python2.6/idlelib/ParenMatch.pyc
+file path=usr/lib/python2.6/idlelib/PathBrowser.py
+file path=usr/lib/python2.6/idlelib/PathBrowser.pyc
+file path=usr/lib/python2.6/idlelib/Percolator.py
+file path=usr/lib/python2.6/idlelib/Percolator.pyc
+file path=usr/lib/python2.6/idlelib/PyParse.py
+file path=usr/lib/python2.6/idlelib/PyParse.pyc
+file path=usr/lib/python2.6/idlelib/PyShell.py
+file path=usr/lib/python2.6/idlelib/PyShell.pyc
+file path=usr/lib/python2.6/idlelib/README.txt
+file path=usr/lib/python2.6/idlelib/RemoteDebugger.py
+file path=usr/lib/python2.6/idlelib/RemoteDebugger.pyc
+file path=usr/lib/python2.6/idlelib/RemoteObjectBrowser.py
+file path=usr/lib/python2.6/idlelib/RemoteObjectBrowser.pyc
+file path=usr/lib/python2.6/idlelib/ReplaceDialog.py
+file path=usr/lib/python2.6/idlelib/ReplaceDialog.pyc
+file path=usr/lib/python2.6/idlelib/ScriptBinding.py
+file path=usr/lib/python2.6/idlelib/ScriptBinding.pyc
+file path=usr/lib/python2.6/idlelib/ScrolledList.py
+file path=usr/lib/python2.6/idlelib/ScrolledList.pyc
+file path=usr/lib/python2.6/idlelib/SearchDialog.py
+file path=usr/lib/python2.6/idlelib/SearchDialog.pyc
+file path=usr/lib/python2.6/idlelib/SearchDialogBase.py
+file path=usr/lib/python2.6/idlelib/SearchDialogBase.pyc
+file path=usr/lib/python2.6/idlelib/SearchEngine.py
+file path=usr/lib/python2.6/idlelib/SearchEngine.pyc
+file path=usr/lib/python2.6/idlelib/StackViewer.py
+file path=usr/lib/python2.6/idlelib/StackViewer.pyc
+file path=usr/lib/python2.6/idlelib/TODO.txt
+file path=usr/lib/python2.6/idlelib/ToolTip.py
+file path=usr/lib/python2.6/idlelib/ToolTip.pyc
+file path=usr/lib/python2.6/idlelib/TreeWidget.py
+file path=usr/lib/python2.6/idlelib/TreeWidget.pyc
+file path=usr/lib/python2.6/idlelib/UndoDelegator.py
+file path=usr/lib/python2.6/idlelib/UndoDelegator.pyc
+file path=usr/lib/python2.6/idlelib/WidgetRedirector.py
+file path=usr/lib/python2.6/idlelib/WidgetRedirector.pyc
+file path=usr/lib/python2.6/idlelib/WindowList.py
+file path=usr/lib/python2.6/idlelib/WindowList.pyc
+file path=usr/lib/python2.6/idlelib/ZoomHeight.py
+file path=usr/lib/python2.6/idlelib/ZoomHeight.pyc
+file path=usr/lib/python2.6/idlelib/__init__.py
+file path=usr/lib/python2.6/idlelib/__init__.pyc
+file path=usr/lib/python2.6/idlelib/aboutDialog.py
+file path=usr/lib/python2.6/idlelib/aboutDialog.pyc
+file path=usr/lib/python2.6/idlelib/config-extensions.def
+file path=usr/lib/python2.6/idlelib/config-highlight.def
+file path=usr/lib/python2.6/idlelib/config-keys.def
+file path=usr/lib/python2.6/idlelib/config-main.def
+file path=usr/lib/python2.6/idlelib/configDialog.py
+file path=usr/lib/python2.6/idlelib/configDialog.pyc
+file path=usr/lib/python2.6/idlelib/configHandler.py
+file path=usr/lib/python2.6/idlelib/configHandler.pyc
+file path=usr/lib/python2.6/idlelib/configHelpSourceEdit.py
+file path=usr/lib/python2.6/idlelib/configHelpSourceEdit.pyc
+file path=usr/lib/python2.6/idlelib/configSectionNameDialog.py
+file path=usr/lib/python2.6/idlelib/configSectionNameDialog.pyc
+file path=usr/lib/python2.6/idlelib/dynOptionMenuWidget.py
+file path=usr/lib/python2.6/idlelib/dynOptionMenuWidget.pyc
+file path=usr/lib/python2.6/idlelib/extend.txt
+file path=usr/lib/python2.6/idlelib/help.txt
+file path=usr/lib/python2.6/idlelib/idle.bat mode=0555
+file path=usr/lib/python2.6/idlelib/idle.py
+file path=usr/lib/python2.6/idlelib/idle.pyc
+file path=usr/lib/python2.6/idlelib/idle.pyw
+file path=usr/lib/python2.6/idlelib/idlever.py
+file path=usr/lib/python2.6/idlelib/idlever.pyc
+file path=usr/lib/python2.6/idlelib/keybindingDialog.py
+file path=usr/lib/python2.6/idlelib/keybindingDialog.pyc
+file path=usr/lib/python2.6/idlelib/macosxSupport.py
+file path=usr/lib/python2.6/idlelib/macosxSupport.pyc
+file path=usr/lib/python2.6/idlelib/rpc.py
+file path=usr/lib/python2.6/idlelib/rpc.pyc
+file path=usr/lib/python2.6/idlelib/run.py
+file path=usr/lib/python2.6/idlelib/run.pyc
+file path=usr/lib/python2.6/idlelib/tabbedpages.py
+file path=usr/lib/python2.6/idlelib/tabbedpages.pyc
+file path=usr/lib/python2.6/idlelib/testcode.py
+file path=usr/lib/python2.6/idlelib/testcode.pyc
+file path=usr/lib/python2.6/idlelib/textView.py
+file path=usr/lib/python2.6/idlelib/textView.pyc
+file path=usr/lib/python2.6/ihooks.py
+file path=usr/lib/python2.6/ihooks.pyc
+file path=usr/lib/python2.6/imaplib.py
+file path=usr/lib/python2.6/imaplib.pyc
+file path=usr/lib/python2.6/imghdr.py
+file path=usr/lib/python2.6/imghdr.pyc
+file path=usr/lib/python2.6/imputil.py
+file path=usr/lib/python2.6/imputil.pyc
+file path=usr/lib/python2.6/inspect.py
+file path=usr/lib/python2.6/inspect.pyc
+file path=usr/lib/python2.6/io.py
+file path=usr/lib/python2.6/io.pyc
+file path=usr/lib/python2.6/json/__init__.py
+file path=usr/lib/python2.6/json/__init__.pyc
+file path=usr/lib/python2.6/json/decoder.py
+file path=usr/lib/python2.6/json/decoder.pyc
+file path=usr/lib/python2.6/json/encoder.py
+file path=usr/lib/python2.6/json/encoder.pyc
+file path=usr/lib/python2.6/json/scanner.py
+file path=usr/lib/python2.6/json/scanner.pyc
+file path=usr/lib/python2.6/json/tests/__init__.py
+file path=usr/lib/python2.6/json/tests/__init__.pyc
+file path=usr/lib/python2.6/json/tests/test_decode.py
+file path=usr/lib/python2.6/json/tests/test_decode.pyc
+file path=usr/lib/python2.6/json/tests/test_default.py
+file path=usr/lib/python2.6/json/tests/test_default.pyc
+file path=usr/lib/python2.6/json/tests/test_dump.py
+file path=usr/lib/python2.6/json/tests/test_dump.pyc
+file path=usr/lib/python2.6/json/tests/test_encode_basestring_ascii.py
+file path=usr/lib/python2.6/json/tests/test_encode_basestring_ascii.pyc
+file path=usr/lib/python2.6/json/tests/test_fail.py
+file path=usr/lib/python2.6/json/tests/test_fail.pyc
+file path=usr/lib/python2.6/json/tests/test_float.py
+file path=usr/lib/python2.6/json/tests/test_float.pyc
+file path=usr/lib/python2.6/json/tests/test_indent.py
+file path=usr/lib/python2.6/json/tests/test_indent.pyc
+file path=usr/lib/python2.6/json/tests/test_pass1.py
+file path=usr/lib/python2.6/json/tests/test_pass1.pyc
+file path=usr/lib/python2.6/json/tests/test_pass2.py
+file path=usr/lib/python2.6/json/tests/test_pass2.pyc
+file path=usr/lib/python2.6/json/tests/test_pass3.py
+file path=usr/lib/python2.6/json/tests/test_pass3.pyc
+file path=usr/lib/python2.6/json/tests/test_recursion.py
+file path=usr/lib/python2.6/json/tests/test_recursion.pyc
+file path=usr/lib/python2.6/json/tests/test_scanstring.py
+file path=usr/lib/python2.6/json/tests/test_scanstring.pyc
+file path=usr/lib/python2.6/json/tests/test_separators.py
+file path=usr/lib/python2.6/json/tests/test_separators.pyc
+file path=usr/lib/python2.6/json/tests/test_speedups.py
+file path=usr/lib/python2.6/json/tests/test_speedups.pyc
+file path=usr/lib/python2.6/json/tests/test_unicode.py
+file path=usr/lib/python2.6/json/tests/test_unicode.pyc
+file path=usr/lib/python2.6/json/tool.py
+file path=usr/lib/python2.6/json/tool.pyc
+file path=usr/lib/python2.6/keyword.py
+file path=usr/lib/python2.6/keyword.pyc
+file path=usr/lib/python2.6/lib-dynload/Python-2.6.4-py2.6.egg-info
+file path=usr/lib/python2.6/lib-dynload/_bisect.so
+file path=usr/lib/python2.6/lib-dynload/_bytesio.so
+file path=usr/lib/python2.6/lib-dynload/_codecs_cn.so
+file path=usr/lib/python2.6/lib-dynload/_codecs_hk.so
+file path=usr/lib/python2.6/lib-dynload/_codecs_iso2022.so
+file path=usr/lib/python2.6/lib-dynload/_codecs_jp.so
+file path=usr/lib/python2.6/lib-dynload/_codecs_kr.so
+file path=usr/lib/python2.6/lib-dynload/_codecs_tw.so
+file path=usr/lib/python2.6/lib-dynload/_collections.so
+file path=usr/lib/python2.6/lib-dynload/_csv.so
+file path=usr/lib/python2.6/lib-dynload/_ctypes.so
+file path=usr/lib/python2.6/lib-dynload/_ctypes_test.so
+file path=usr/lib/python2.6/lib-dynload/_curses.so
+file path=usr/lib/python2.6/lib-dynload/_curses_panel.so
+file path=usr/lib/python2.6/lib-dynload/_elementtree.so
+file path=usr/lib/python2.6/lib-dynload/_fileio.so
+file path=usr/lib/python2.6/lib-dynload/_functools.so
+file path=usr/lib/python2.6/lib-dynload/_hashlib.so
+file path=usr/lib/python2.6/lib-dynload/_heapq.so
+file path=usr/lib/python2.6/lib-dynload/_hotshot.so
+file path=usr/lib/python2.6/lib-dynload/_json.so
+file path=usr/lib/python2.6/lib-dynload/_locale.so
+file path=usr/lib/python2.6/lib-dynload/_lsprof.so
+file path=usr/lib/python2.6/lib-dynload/_multibytecodec.so
+file path=usr/lib/python2.6/lib-dynload/_multiprocessing.so
+file path=usr/lib/python2.6/lib-dynload/_random.so
+file path=usr/lib/python2.6/lib-dynload/_socket.so
+file path=usr/lib/python2.6/lib-dynload/_sqlite3.so
+file path=usr/lib/python2.6/lib-dynload/_ssl.so
+file path=usr/lib/python2.6/lib-dynload/_struct.so
+file path=usr/lib/python2.6/lib-dynload/_testcapi.so
+file path=usr/lib/python2.6/lib-dynload/_tkinter.so
+file path=usr/lib/python2.6/lib-dynload/_weakref.so
+file path=usr/lib/python2.6/lib-dynload/array.so
+file path=usr/lib/python2.6/lib-dynload/audioop.so
+file path=usr/lib/python2.6/lib-dynload/binascii.so
+file path=usr/lib/python2.6/lib-dynload/bz2.so
+file path=usr/lib/python2.6/lib-dynload/cPickle.so
+file path=usr/lib/python2.6/lib-dynload/cStringIO.so
+file path=usr/lib/python2.6/lib-dynload/cmath.so
+file path=usr/lib/python2.6/lib-dynload/crypt.so
+file path=usr/lib/python2.6/lib-dynload/datetime.so
+file path=usr/lib/python2.6/lib-dynload/dbm.so
+file path=usr/lib/python2.6/lib-dynload/dl.so
+file path=usr/lib/python2.6/lib-dynload/dlpi.so
+file path=usr/lib/python2.6/lib-dynload/fcntl.so
+file path=usr/lib/python2.6/lib-dynload/future_builtins.so
+file path=usr/lib/python2.6/lib-dynload/gdbm.so
+file path=usr/lib/python2.6/lib-dynload/grp.so
+file path=usr/lib/python2.6/lib-dynload/imageop.so
+file path=usr/lib/python2.6/lib-dynload/itertools.so
+file path=usr/lib/python2.6/lib-dynload/math.so
+file path=usr/lib/python2.6/lib-dynload/mmap.so
+file path=usr/lib/python2.6/lib-dynload/nis.so
+file path=usr/lib/python2.6/lib-dynload/operator.so
+file path=usr/lib/python2.6/lib-dynload/parser.so
+file path=usr/lib/python2.6/lib-dynload/privileges.so
+file path=usr/lib/python2.6/lib-dynload/pyexpat.so
+file path=usr/lib/python2.6/lib-dynload/rbac.so
+file path=usr/lib/python2.6/lib-dynload/readline.so
+file path=usr/lib/python2.6/lib-dynload/resource.so
+file path=usr/lib/python2.6/lib-dynload/select.so
+file path=usr/lib/python2.6/lib-dynload/spwd.so
+file path=usr/lib/python2.6/lib-dynload/strop.so
+file path=usr/lib/python2.6/lib-dynload/sunaudiodev.so
+file path=usr/lib/python2.6/lib-dynload/syslog.so
+file path=usr/lib/python2.6/lib-dynload/termios.so
+file path=usr/lib/python2.6/lib-dynload/time.so
+file path=usr/lib/python2.6/lib-dynload/ucred.so
+file path=usr/lib/python2.6/lib-dynload/unicodedata.so
+file path=usr/lib/python2.6/lib-dynload/zlib.so
+file path=usr/lib/python2.6/lib-tk/Canvas.py
+file path=usr/lib/python2.6/lib-tk/Canvas.pyc
+file path=usr/lib/python2.6/lib-tk/Dialog.py
+file path=usr/lib/python2.6/lib-tk/Dialog.pyc
+file path=usr/lib/python2.6/lib-tk/FileDialog.py
+file path=usr/lib/python2.6/lib-tk/FileDialog.pyc
+file path=usr/lib/python2.6/lib-tk/FixTk.py
+file path=usr/lib/python2.6/lib-tk/FixTk.pyc
+file path=usr/lib/python2.6/lib-tk/ScrolledText.py
+file path=usr/lib/python2.6/lib-tk/ScrolledText.pyc
+file path=usr/lib/python2.6/lib-tk/SimpleDialog.py
+file path=usr/lib/python2.6/lib-tk/SimpleDialog.pyc
+file path=usr/lib/python2.6/lib-tk/Tix.py
+file path=usr/lib/python2.6/lib-tk/Tix.pyc
+file path=usr/lib/python2.6/lib-tk/Tkconstants.py
+file path=usr/lib/python2.6/lib-tk/Tkconstants.pyc
+file path=usr/lib/python2.6/lib-tk/Tkdnd.py
+file path=usr/lib/python2.6/lib-tk/Tkdnd.pyc
+file path=usr/lib/python2.6/lib-tk/Tkinter.py
+file path=usr/lib/python2.6/lib-tk/Tkinter.pyc
+file path=usr/lib/python2.6/lib-tk/tkColorChooser.py
+file path=usr/lib/python2.6/lib-tk/tkColorChooser.pyc
+file path=usr/lib/python2.6/lib-tk/tkCommonDialog.py
+file path=usr/lib/python2.6/lib-tk/tkCommonDialog.pyc
+file path=usr/lib/python2.6/lib-tk/tkFileDialog.py
+file path=usr/lib/python2.6/lib-tk/tkFileDialog.pyc
+file path=usr/lib/python2.6/lib-tk/tkFont.py
+file path=usr/lib/python2.6/lib-tk/tkFont.pyc
+file path=usr/lib/python2.6/lib-tk/tkMessageBox.py
+file path=usr/lib/python2.6/lib-tk/tkMessageBox.pyc
+file path=usr/lib/python2.6/lib-tk/tkSimpleDialog.py
+file path=usr/lib/python2.6/lib-tk/tkSimpleDialog.pyc
+file path=usr/lib/python2.6/lib-tk/turtle.py
+file path=usr/lib/python2.6/lib-tk/turtle.pyc
+file path=usr/lib/python2.6/lib2to3/Grammar.txt
+file path=usr/lib/python2.6/lib2to3/Grammar2.6.4.final.0.pickle
+file path=usr/lib/python2.6/lib2to3/PatternGrammar.txt
+file path=usr/lib/python2.6/lib2to3/PatternGrammar2.6.4.final.0.pickle
+file path=usr/lib/python2.6/lib2to3/__init__.py
+file path=usr/lib/python2.6/lib2to3/__init__.pyc
+file path=usr/lib/python2.6/lib2to3/fixer_base.py
+file path=usr/lib/python2.6/lib2to3/fixer_base.pyc
+file path=usr/lib/python2.6/lib2to3/fixer_util.py
+file path=usr/lib/python2.6/lib2to3/fixer_util.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/__init__.py
+file path=usr/lib/python2.6/lib2to3/fixes/__init__.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_apply.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_apply.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_basestring.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_basestring.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_buffer.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_buffer.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_callable.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_callable.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_dict.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_dict.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_except.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_except.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_exec.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_exec.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_execfile.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_execfile.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_filter.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_filter.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_funcattrs.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_funcattrs.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_future.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_future.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_getcwdu.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_getcwdu.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_has_key.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_has_key.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_idioms.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_idioms.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_import.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_import.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_imports.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_imports.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_imports2.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_imports2.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_input.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_input.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_intern.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_intern.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_isinstance.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_isinstance.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_itertools.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_itertools.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_itertools_imports.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_itertools_imports.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_long.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_long.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_map.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_map.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_metaclass.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_metaclass.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_methodattrs.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_methodattrs.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_ne.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_ne.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_next.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_next.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_nonzero.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_nonzero.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_numliterals.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_numliterals.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_paren.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_paren.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_print.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_print.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_raise.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_raise.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_raw_input.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_raw_input.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_reduce.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_reduce.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_renames.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_renames.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_repr.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_repr.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_set_literal.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_set_literal.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_standarderror.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_standarderror.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_sys_exc.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_sys_exc.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_throw.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_throw.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_tuple_params.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_types.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_types.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_unicode.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_unicode.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_urllib.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_urllib.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_ws_comma.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_ws_comma.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_xrange.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_xrange.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_xreadlines.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_xreadlines.pyc
+file path=usr/lib/python2.6/lib2to3/fixes/fix_zip.py
+file path=usr/lib/python2.6/lib2to3/fixes/fix_zip.pyc
+file path=usr/lib/python2.6/lib2to3/main.py
+file path=usr/lib/python2.6/lib2to3/main.pyc
+file path=usr/lib/python2.6/lib2to3/patcomp.py
+file path=usr/lib/python2.6/lib2to3/patcomp.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/__init__.py
+file path=usr/lib/python2.6/lib2to3/pgen2/__init__.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/conv.py
+file path=usr/lib/python2.6/lib2to3/pgen2/conv.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/driver.py
+file path=usr/lib/python2.6/lib2to3/pgen2/driver.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/grammar.py
+file path=usr/lib/python2.6/lib2to3/pgen2/grammar.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/literals.py
+file path=usr/lib/python2.6/lib2to3/pgen2/literals.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/parse.py
+file path=usr/lib/python2.6/lib2to3/pgen2/parse.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/pgen.py
+file path=usr/lib/python2.6/lib2to3/pgen2/pgen.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/token.py
+file path=usr/lib/python2.6/lib2to3/pgen2/token.pyc
+file path=usr/lib/python2.6/lib2to3/pgen2/tokenize.py
+file path=usr/lib/python2.6/lib2to3/pgen2/tokenize.pyc
+file path=usr/lib/python2.6/lib2to3/pygram.py
+file path=usr/lib/python2.6/lib2to3/pygram.pyc
+file path=usr/lib/python2.6/lib2to3/pytree.py
+file path=usr/lib/python2.6/lib2to3/pytree.pyc
+file path=usr/lib/python2.6/lib2to3/refactor.py
+file path=usr/lib/python2.6/lib2to3/refactor.pyc
+file path=usr/lib/python2.6/lib2to3/tests/__init__.py
+file path=usr/lib/python2.6/lib2to3/tests/__init__.pyc
+file path=usr/lib/python2.6/lib2to3/tests/pytree_idempotency.py
+file path=usr/lib/python2.6/lib2to3/tests/pytree_idempotency.pyc
+file path=usr/lib/python2.6/lib2to3/tests/support.py
+file path=usr/lib/python2.6/lib2to3/tests/support.pyc
+file path=usr/lib/python2.6/lib2to3/tests/test_all_fixers.py
+file path=usr/lib/python2.6/lib2to3/tests/test_all_fixers.pyc
+file path=usr/lib/python2.6/lib2to3/tests/test_fixers.py
+file path=usr/lib/python2.6/lib2to3/tests/test_fixers.pyc
+file path=usr/lib/python2.6/lib2to3/tests/test_parser.py
+file path=usr/lib/python2.6/lib2to3/tests/test_parser.pyc
+file path=usr/lib/python2.6/lib2to3/tests/test_pytree.py
+file path=usr/lib/python2.6/lib2to3/tests/test_pytree.pyc
+file path=usr/lib/python2.6/lib2to3/tests/test_refactor.py
+file path=usr/lib/python2.6/lib2to3/tests/test_refactor.pyc
+file path=usr/lib/python2.6/lib2to3/tests/test_util.py
+file path=usr/lib/python2.6/lib2to3/tests/test_util.pyc
+file path=usr/lib/python2.6/linecache.py
+file path=usr/lib/python2.6/linecache.pyc
+file path=usr/lib/python2.6/locale.py
+file path=usr/lib/python2.6/locale.pyc
+file path=usr/lib/python2.6/logging/__init__.py
+file path=usr/lib/python2.6/logging/__init__.pyc
+file path=usr/lib/python2.6/logging/config.py
+file path=usr/lib/python2.6/logging/config.pyc
+file path=usr/lib/python2.6/logging/handlers.py
+file path=usr/lib/python2.6/logging/handlers.pyc
+file path=usr/lib/python2.6/macpath.py
+file path=usr/lib/python2.6/macpath.pyc
+file path=usr/lib/python2.6/macurl2path.py
+file path=usr/lib/python2.6/macurl2path.pyc
+file path=usr/lib/python2.6/mailbox.py
+file path=usr/lib/python2.6/mailbox.pyc
+file path=usr/lib/python2.6/mailcap.py
+file path=usr/lib/python2.6/mailcap.pyc
+file path=usr/lib/python2.6/markupbase.py
+file path=usr/lib/python2.6/markupbase.pyc
+file path=usr/lib/python2.6/md5.py
+file path=usr/lib/python2.6/md5.pyc
+file path=usr/lib/python2.6/mhlib.py
+file path=usr/lib/python2.6/mhlib.pyc
+file path=usr/lib/python2.6/mimetools.py
+file path=usr/lib/python2.6/mimetools.pyc
+file path=usr/lib/python2.6/mimetypes.py
+file path=usr/lib/python2.6/mimetypes.pyc
+file path=usr/lib/python2.6/mimify.py
+file path=usr/lib/python2.6/mimify.pyc
+file path=usr/lib/python2.6/modulefinder.py
+file path=usr/lib/python2.6/modulefinder.pyc
+file path=usr/lib/python2.6/multifile.py
+file path=usr/lib/python2.6/multifile.pyc
+file path=usr/lib/python2.6/multiprocessing/__init__.py
+file path=usr/lib/python2.6/multiprocessing/__init__.pyc
+file path=usr/lib/python2.6/multiprocessing/connection.py
+file path=usr/lib/python2.6/multiprocessing/connection.pyc
+file path=usr/lib/python2.6/multiprocessing/dummy/__init__.py
+file path=usr/lib/python2.6/multiprocessing/dummy/__init__.pyc
+file path=usr/lib/python2.6/multiprocessing/dummy/connection.py
+file path=usr/lib/python2.6/multiprocessing/dummy/connection.pyc
+file path=usr/lib/python2.6/multiprocessing/forking.py
+file path=usr/lib/python2.6/multiprocessing/forking.pyc
+file path=usr/lib/python2.6/multiprocessing/heap.py
+file path=usr/lib/python2.6/multiprocessing/heap.pyc
+file path=usr/lib/python2.6/multiprocessing/managers.py
+file path=usr/lib/python2.6/multiprocessing/managers.pyc
+file path=usr/lib/python2.6/multiprocessing/pool.py
+file path=usr/lib/python2.6/multiprocessing/pool.pyc
+file path=usr/lib/python2.6/multiprocessing/process.py
+file path=usr/lib/python2.6/multiprocessing/process.pyc
+file path=usr/lib/python2.6/multiprocessing/queues.py
+file path=usr/lib/python2.6/multiprocessing/queues.pyc
+file path=usr/lib/python2.6/multiprocessing/reduction.py
+file path=usr/lib/python2.6/multiprocessing/reduction.pyc
+file path=usr/lib/python2.6/multiprocessing/sharedctypes.py
+file path=usr/lib/python2.6/multiprocessing/sharedctypes.pyc
+file path=usr/lib/python2.6/multiprocessing/synchronize.py
+file path=usr/lib/python2.6/multiprocessing/synchronize.pyc
+file path=usr/lib/python2.6/multiprocessing/util.py
+file path=usr/lib/python2.6/multiprocessing/util.pyc
+file path=usr/lib/python2.6/mutex.py
+file path=usr/lib/python2.6/mutex.pyc
+file path=usr/lib/python2.6/netrc.py
+file path=usr/lib/python2.6/netrc.pyc
+file path=usr/lib/python2.6/new.py
+file path=usr/lib/python2.6/new.pyc
+file path=usr/lib/python2.6/nntplib.py
+file path=usr/lib/python2.6/nntplib.pyc
+file path=usr/lib/python2.6/ntpath.py
+file path=usr/lib/python2.6/ntpath.pyc
+file path=usr/lib/python2.6/nturl2path.py
+file path=usr/lib/python2.6/nturl2path.pyc
+file path=usr/lib/python2.6/numbers.py
+file path=usr/lib/python2.6/numbers.pyc
+file path=usr/lib/python2.6/opcode.py
+file path=usr/lib/python2.6/opcode.pyc
+file path=usr/lib/python2.6/optparse.py
+file path=usr/lib/python2.6/optparse.pyc
+file path=usr/lib/python2.6/os.py
+file path=usr/lib/python2.6/os.pyc
+file path=usr/lib/python2.6/os2emxpath.py
+file path=usr/lib/python2.6/os2emxpath.pyc
+file path=usr/lib/python2.6/pdb.doc
+file path=usr/lib/python2.6/pdb.py
+file path=usr/lib/python2.6/pdb.pyc
+file path=usr/lib/python2.6/pickle.py
+file path=usr/lib/python2.6/pickle.pyc
+file path=usr/lib/python2.6/pickletools.py
+file path=usr/lib/python2.6/pickletools.pyc
+file path=usr/lib/python2.6/pipes.py
+file path=usr/lib/python2.6/pipes.pyc
+file path=usr/lib/python2.6/pkgutil.py
+file path=usr/lib/python2.6/pkgutil.pyc
+file path=usr/lib/python2.6/plat-sunos5/CDIO.py
+file path=usr/lib/python2.6/plat-sunos5/CDIO.pyc
+file path=usr/lib/python2.6/plat-sunos5/DLFCN.py
+file path=usr/lib/python2.6/plat-sunos5/DLFCN.pyc
+file path=usr/lib/python2.6/plat-sunos5/IN.py
+file path=usr/lib/python2.6/plat-sunos5/IN.pyc
+file path=usr/lib/python2.6/plat-sunos5/STROPTS.py
+file path=usr/lib/python2.6/plat-sunos5/STROPTS.pyc
+file path=usr/lib/python2.6/plat-sunos5/SUNAUDIODEV.py
+file path=usr/lib/python2.6/plat-sunos5/SUNAUDIODEV.pyc
+file path=usr/lib/python2.6/plat-sunos5/TYPES.py
+file path=usr/lib/python2.6/plat-sunos5/TYPES.pyc
+file path=usr/lib/python2.6/plat-sunos5/regen mode=0555
+file path=usr/lib/python2.6/platform.py
+file path=usr/lib/python2.6/platform.pyc
+file path=usr/lib/python2.6/plistlib.py
+file path=usr/lib/python2.6/plistlib.pyc
+file path=usr/lib/python2.6/popen2.py
+file path=usr/lib/python2.6/popen2.pyc
+file path=usr/lib/python2.6/poplib.py
+file path=usr/lib/python2.6/poplib.pyc
+file path=usr/lib/python2.6/posixfile.py
+file path=usr/lib/python2.6/posixfile.pyc
+file path=usr/lib/python2.6/posixpath.py
+file path=usr/lib/python2.6/posixpath.pyc
+file path=usr/lib/python2.6/pprint.py
+file path=usr/lib/python2.6/pprint.pyc
+file path=usr/lib/python2.6/profile.py
+file path=usr/lib/python2.6/profile.pyc
+file path=usr/lib/python2.6/pstats.py
+file path=usr/lib/python2.6/pstats.pyc
+file path=usr/lib/python2.6/pty.py
+file path=usr/lib/python2.6/pty.pyc
+link path=usr/lib/python2.6/pyCC target=pycc
+file path=usr/lib/python2.6/pycc
+file path=usr/lib/python2.6/py_compile.py
+file path=usr/lib/python2.6/py_compile.pyc
+file path=usr/lib/python2.6/pyclbr.py
+file path=usr/lib/python2.6/pyclbr.pyc
+file path=usr/lib/python2.6/pydoc.py
+file path=usr/lib/python2.6/pydoc.pyc
+file path=usr/lib/python2.6/pydoc_topics.py
+file path=usr/lib/python2.6/pydoc_topics.pyc
+file path=usr/lib/python2.6/quopri.py
+file path=usr/lib/python2.6/quopri.pyc
+file path=usr/lib/python2.6/random.py
+file path=usr/lib/python2.6/random.pyc
+file path=usr/lib/python2.6/re.py
+file path=usr/lib/python2.6/re.pyc
+file path=usr/lib/python2.6/repr.py
+file path=usr/lib/python2.6/repr.pyc
+file path=usr/lib/python2.6/rexec.py
+file path=usr/lib/python2.6/rexec.pyc
+file path=usr/lib/python2.6/rfc822.py
+file path=usr/lib/python2.6/rfc822.pyc
+file path=usr/lib/python2.6/rlcompleter.py
+file path=usr/lib/python2.6/rlcompleter.pyc
+file path=usr/lib/python2.6/robotparser.py
+file path=usr/lib/python2.6/robotparser.pyc
+file path=usr/lib/python2.6/runpy.py
+file path=usr/lib/python2.6/runpy.pyc
+file path=usr/lib/python2.6/sched.py
+file path=usr/lib/python2.6/sched.pyc
+file path=usr/lib/python2.6/sets.py
+file path=usr/lib/python2.6/sets.pyc
+file path=usr/lib/python2.6/sgmllib.py
+file path=usr/lib/python2.6/sgmllib.pyc
+file path=usr/lib/python2.6/sha.py
+file path=usr/lib/python2.6/sha.pyc
+file path=usr/lib/python2.6/shelve.py
+file path=usr/lib/python2.6/shelve.pyc
+file path=usr/lib/python2.6/shlex.py
+file path=usr/lib/python2.6/shlex.pyc
+file path=usr/lib/python2.6/shutil.py
+file path=usr/lib/python2.6/shutil.pyc
+file path=usr/lib/python2.6/site-packages/README
+file path=usr/lib/python2.6/site-packages/vendor-packages.pth
+file path=usr/lib/python2.6/site.py
+file path=usr/lib/python2.6/site.pyc
+file path=usr/lib/python2.6/smtpd.py
+file path=usr/lib/python2.6/smtpd.pyc
+file path=usr/lib/python2.6/smtplib.py
+file path=usr/lib/python2.6/smtplib.pyc
+file path=usr/lib/python2.6/sndhdr.py
+file path=usr/lib/python2.6/sndhdr.pyc
+file path=usr/lib/python2.6/socket.py
+file path=usr/lib/python2.6/socket.pyc
+file path=usr/lib/python2.6/sqlite3/__init__.py
+file path=usr/lib/python2.6/sqlite3/__init__.pyc
+file path=usr/lib/python2.6/sqlite3/dbapi2.py
+file path=usr/lib/python2.6/sqlite3/dbapi2.pyc
+file path=usr/lib/python2.6/sqlite3/dump.py
+file path=usr/lib/python2.6/sqlite3/dump.pyc
+file path=usr/lib/python2.6/sqlite3/test/__init__.py
+file path=usr/lib/python2.6/sqlite3/test/__init__.pyc
+file path=usr/lib/python2.6/sqlite3/test/dbapi.py
+file path=usr/lib/python2.6/sqlite3/test/dbapi.pyc
+file path=usr/lib/python2.6/sqlite3/test/dump.py
+file path=usr/lib/python2.6/sqlite3/test/dump.pyc
+file path=usr/lib/python2.6/sqlite3/test/factory.py
+file path=usr/lib/python2.6/sqlite3/test/factory.pyc
+file path=usr/lib/python2.6/sqlite3/test/hooks.py
+file path=usr/lib/python2.6/sqlite3/test/hooks.pyc
+file path=usr/lib/python2.6/sqlite3/test/py25tests.py
+file path=usr/lib/python2.6/sqlite3/test/py25tests.pyc
+file path=usr/lib/python2.6/sqlite3/test/regression.py
+file path=usr/lib/python2.6/sqlite3/test/regression.pyc
+file path=usr/lib/python2.6/sqlite3/test/transactions.py
+file path=usr/lib/python2.6/sqlite3/test/transactions.pyc
+file path=usr/lib/python2.6/sqlite3/test/types.py
+file path=usr/lib/python2.6/sqlite3/test/types.pyc
+file path=usr/lib/python2.6/sqlite3/test/userfunctions.py
+file path=usr/lib/python2.6/sqlite3/test/userfunctions.pyc
+file path=usr/lib/python2.6/sre.py
+file path=usr/lib/python2.6/sre.pyc
+file path=usr/lib/python2.6/sre_compile.py
+file path=usr/lib/python2.6/sre_compile.pyc
+file path=usr/lib/python2.6/sre_constants.py
+file path=usr/lib/python2.6/sre_constants.pyc
+file path=usr/lib/python2.6/sre_parse.py
+file path=usr/lib/python2.6/sre_parse.pyc
+file path=usr/lib/python2.6/ssl.py
+file path=usr/lib/python2.6/ssl.pyc
+file path=usr/lib/python2.6/stat.py
+file path=usr/lib/python2.6/stat.pyc
+file path=usr/lib/python2.6/statvfs.py
+file path=usr/lib/python2.6/statvfs.pyc
+file path=usr/lib/python2.6/string.py
+file path=usr/lib/python2.6/string.pyc
+file path=usr/lib/python2.6/stringold.py
+file path=usr/lib/python2.6/stringold.pyc
+file path=usr/lib/python2.6/stringprep.py
+file path=usr/lib/python2.6/stringprep.pyc
+file path=usr/lib/python2.6/struct.py
+file path=usr/lib/python2.6/struct.pyc
+file path=usr/lib/python2.6/subprocess.py
+file path=usr/lib/python2.6/subprocess.pyc
+file path=usr/lib/python2.6/sunau.py
+file path=usr/lib/python2.6/sunau.pyc
+file path=usr/lib/python2.6/sunaudio.py
+file path=usr/lib/python2.6/sunaudio.pyc
+file path=usr/lib/python2.6/symbol.py
+file path=usr/lib/python2.6/symbol.pyc
+file path=usr/lib/python2.6/symtable.py
+file path=usr/lib/python2.6/symtable.pyc
+file path=usr/lib/python2.6/tabnanny.py
+file path=usr/lib/python2.6/tabnanny.pyc
+file path=usr/lib/python2.6/tarfile.py
+file path=usr/lib/python2.6/tarfile.pyc
+file path=usr/lib/python2.6/telnetlib.py
+file path=usr/lib/python2.6/telnetlib.pyc
+file path=usr/lib/python2.6/tempfile.py
+file path=usr/lib/python2.6/tempfile.pyc
+file path=usr/lib/python2.6/test/185test.db
+file path=usr/lib/python2.6/test/README
+file path=usr/lib/python2.6/test/Sine-1000Hz-300ms.aif
+file path=usr/lib/python2.6/test/__init__.py
+file path=usr/lib/python2.6/test/__init__.pyc
+file path=usr/lib/python2.6/test/audiotest.au
+file path=usr/lib/python2.6/test/autotest.py
+file path=usr/lib/python2.6/test/autotest.pyc
+file path=usr/lib/python2.6/test/bad_coding.py
+file path=usr/lib/python2.6/test/bad_coding2.py
+file path=usr/lib/python2.6/test/badcert.pem
+file path=usr/lib/python2.6/test/badkey.pem
+file path=usr/lib/python2.6/test/badsyntax_future3.py
+file path=usr/lib/python2.6/test/badsyntax_future4.py
+file path=usr/lib/python2.6/test/badsyntax_future5.py
+file path=usr/lib/python2.6/test/badsyntax_future6.py
+file path=usr/lib/python2.6/test/badsyntax_future7.py
+file path=usr/lib/python2.6/test/badsyntax_future8.py
+file path=usr/lib/python2.6/test/badsyntax_future9.py
+file path=usr/lib/python2.6/test/badsyntax_nocaret.py
+file path=usr/lib/python2.6/test/buffer_tests.py
+file path=usr/lib/python2.6/test/buffer_tests.pyc
+file path=usr/lib/python2.6/test/cfgparser.1
+file path=usr/lib/python2.6/test/check_soundcard.vbs
+file usr/bin/check_offset path=usr/lib/python2.6/test/check_offset
+file usr/bin/$(MACH64)/check_offset path=usr/lib/python2.6/test/check_offset64
+file path=usr/lib/python2.6/test/cjkencodings_test.py
+file path=usr/lib/python2.6/test/cjkencodings_test.pyc
+file path=usr/lib/python2.6/test/cmath_testcases.txt
+file path=usr/lib/python2.6/test/curses_tests.py
+file path=usr/lib/python2.6/test/curses_tests.pyc
+file path=usr/lib/python2.6/test/decimaltestdata/abs.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/add.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/and.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/base.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/clamp.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/class.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/compare.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/comparetotal.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/comparetotmag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/copy.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/copyabs.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/copynegate.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/copysign.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddAbs.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddAdd.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddAnd.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddBase.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCanonical.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddClass.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCompare.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCompareSig.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCompareTotal.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCompareTotalMag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCopy.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCopyAbs.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCopyNegate.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddCopySign.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddDivide.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddDivideInt.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddEncode.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddFMA.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddInvert.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddLogB.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddMax.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddMaxMag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddMin.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddMinMag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddMinus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddMultiply.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddNextMinus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddNextPlus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddNextToward.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddOr.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddPlus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddQuantize.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddReduce.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddRemainder.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddRemainderNear.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddRotate.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddSameQuantum.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddScaleB.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddShift.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddSubtract.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddToIntegral.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ddXor.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/decDouble.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/decQuad.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/decSingle.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/divide.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/divideint.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqAbs.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqAdd.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqAnd.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqBase.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCanonical.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqClass.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCompare.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCompareSig.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCompareTotal.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCompareTotalMag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCopy.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCopyAbs.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCopyNegate.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqCopySign.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqDivide.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqDivideInt.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqEncode.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqFMA.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqInvert.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqLogB.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqMax.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqMaxMag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqMin.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqMinMag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqMinus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqMultiply.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqNextMinus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqNextPlus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqNextToward.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqOr.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqPlus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqQuantize.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqReduce.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqRemainder.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqRemainderNear.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqRotate.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqSameQuantum.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqScaleB.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqShift.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqSubtract.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqToIntegral.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dqXor.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dsBase.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/dsEncode.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/exp.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/extra.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/fma.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/inexact.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/invert.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/ln.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/log10.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/logb.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/max.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/maxmag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/min.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/minmag.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/minus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/multiply.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/nextminus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/nextplus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/nexttoward.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/or.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/plus.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/power.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/powersqrt.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/quantize.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/randomBound32.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/randoms.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/reduce.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/remainder.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/remainderNear.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/rescale.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/rotate.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/rounding.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/samequantum.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/scaleb.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/shift.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/squareroot.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/subtract.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/testall.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/tointegral.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/tointegralx.decTest
+file path=usr/lib/python2.6/test/decimaltestdata/xor.decTest
+file path=usr/lib/python2.6/test/dlpitest.py
+file path=usr/lib/python2.6/test/dlpitest.pyc
+file path=usr/lib/python2.6/test/doctest_aliases.py
+file path=usr/lib/python2.6/test/doctest_aliases.pyc
+file path=usr/lib/python2.6/test/double_const.py
+file path=usr/lib/python2.6/test/double_const.pyc
+file path=usr/lib/python2.6/test/empty.vbs
+file path=usr/lib/python2.6/test/exception_hierarchy.txt
+file path=usr/lib/python2.6/test/floating_points.txt
+file path=usr/lib/python2.6/test/fork_wait.py
+file path=usr/lib/python2.6/test/fork_wait.pyc
+file path=usr/lib/python2.6/test/greyrgb.uue
+file path=usr/lib/python2.6/test/https_svn_python_org_root.pem
+file path=usr/lib/python2.6/test/ieee754.txt
+file path=usr/lib/python2.6/test/infinite_reload.py
+file path=usr/lib/python2.6/test/infinite_reload.pyc
+file path=usr/lib/python2.6/test/inspect_fodder.py
+file path=usr/lib/python2.6/test/inspect_fodder.pyc
+file path=usr/lib/python2.6/test/inspect_fodder2.py
+file path=usr/lib/python2.6/test/inspect_fodder2.pyc
+file path=usr/lib/python2.6/test/keycert.pem
+file path=usr/lib/python2.6/test/list_tests.py
+file path=usr/lib/python2.6/test/list_tests.pyc
+file path=usr/lib/python2.6/test/mapping_tests.py
+file path=usr/lib/python2.6/test/mapping_tests.pyc
+file path=usr/lib/python2.6/test/nullcert.pem
+file path=usr/lib/python2.6/test/outstanding_bugs.py
+file path=usr/lib/python2.6/test/outstanding_bugs.pyc
+file path=usr/lib/python2.6/test/pickletester.py
+file path=usr/lib/python2.6/test/pickletester.pyc
+file path=usr/lib/python2.6/test/privrbactest.py
+file path=usr/lib/python2.6/test/privrbactest.pyc
+file path=usr/lib/python2.6/test/profilee.py
+file path=usr/lib/python2.6/test/profilee.pyc
+file path=usr/lib/python2.6/test/pyclbr_input.py
+file path=usr/lib/python2.6/test/pyclbr_input.pyc
+file path=usr/lib/python2.6/test/pydoc_mod.py
+file path=usr/lib/python2.6/test/pydoc_mod.pyc
+file path=usr/lib/python2.6/test/pydocfodder.py
+file path=usr/lib/python2.6/test/pydocfodder.pyc
+file path=usr/lib/python2.6/test/pystone.py
+file path=usr/lib/python2.6/test/pystone.pyc
+file path=usr/lib/python2.6/test/randv2_32.pck
+file path=usr/lib/python2.6/test/randv2_64.pck
+file path=usr/lib/python2.6/test/randv3.pck
+file path=usr/lib/python2.6/test/re_tests.py
+file path=usr/lib/python2.6/test/re_tests.pyc
+file path=usr/lib/python2.6/test/regex_tests.py
+file path=usr/lib/python2.6/test/regex_tests.pyc
+file path=usr/lib/python2.6/test/regrtest.py
+file path=usr/lib/python2.6/test/regrtest.pyc
+file path=usr/lib/python2.6/test/relimport.py
+file path=usr/lib/python2.6/test/relimport.pyc
+file path=usr/lib/python2.6/test/reperf.py
+file path=usr/lib/python2.6/test/reperf.pyc
+file path=usr/lib/python2.6/test/sample_doctest.py
+file path=usr/lib/python2.6/test/sample_doctest.pyc
+file path=usr/lib/python2.6/test/seq_tests.py
+file path=usr/lib/python2.6/test/seq_tests.pyc
+file path=usr/lib/python2.6/test/sgml_input.html
+file path=usr/lib/python2.6/test/sortperf.py
+file path=usr/lib/python2.6/test/sortperf.pyc
+file path=usr/lib/python2.6/test/ssl_cert.pem
+file path=usr/lib/python2.6/test/ssl_key.pem
+file path=usr/lib/python2.6/test/string_tests.py
+file path=usr/lib/python2.6/test/string_tests.pyc
+file path=usr/lib/python2.6/test/svn_python_org_https_cert.pem
+file path=usr/lib/python2.6/test/test.xml
+file path=usr/lib/python2.6/test/test.xml.out
+file path=usr/lib/python2.6/test/test_MimeWriter.py
+file path=usr/lib/python2.6/test/test_MimeWriter.pyc
+file path=usr/lib/python2.6/test/test_SimpleHTTPServer.py
+file path=usr/lib/python2.6/test/test_SimpleHTTPServer.pyc
+file path=usr/lib/python2.6/test/test_StringIO.py
+file path=usr/lib/python2.6/test/test_StringIO.pyc
+file path=usr/lib/python2.6/test/test___all__.py
+file path=usr/lib/python2.6/test/test___all__.pyc
+file path=usr/lib/python2.6/test/test___future__.py
+file path=usr/lib/python2.6/test/test___future__.pyc
+file path=usr/lib/python2.6/test/test__locale.py
+file path=usr/lib/python2.6/test/test__locale.pyc
+file path=usr/lib/python2.6/test/test_abc.py
+file path=usr/lib/python2.6/test/test_abc.pyc
+file path=usr/lib/python2.6/test/test_abstract_numbers.py
+file path=usr/lib/python2.6/test/test_abstract_numbers.pyc
+file path=usr/lib/python2.6/test/test_aepack.py
+file path=usr/lib/python2.6/test/test_aepack.pyc
+file path=usr/lib/python2.6/test/test_aifc.py
+file path=usr/lib/python2.6/test/test_aifc.pyc
+file path=usr/lib/python2.6/test/test_al.py
+file path=usr/lib/python2.6/test/test_al.pyc
+file path=usr/lib/python2.6/test/test_anydbm.py
+file path=usr/lib/python2.6/test/test_anydbm.pyc
+file path=usr/lib/python2.6/test/test_applesingle.py
+file path=usr/lib/python2.6/test/test_applesingle.pyc
+file path=usr/lib/python2.6/test/test_array.py
+file path=usr/lib/python2.6/test/test_array.pyc
+file path=usr/lib/python2.6/test/test_ast.py
+file path=usr/lib/python2.6/test/test_ast.pyc
+file path=usr/lib/python2.6/test/test_asynchat.py
+file path=usr/lib/python2.6/test/test_asynchat.pyc
+file path=usr/lib/python2.6/test/test_asyncore.py
+file path=usr/lib/python2.6/test/test_asyncore.pyc
+file path=usr/lib/python2.6/test/test_atexit.py
+file path=usr/lib/python2.6/test/test_atexit.pyc
+file path=usr/lib/python2.6/test/test_audioop.py
+file path=usr/lib/python2.6/test/test_audioop.pyc
+file path=usr/lib/python2.6/test/test_augassign.py
+file path=usr/lib/python2.6/test/test_augassign.pyc
+file path=usr/lib/python2.6/test/test_base64.py
+file path=usr/lib/python2.6/test/test_base64.pyc
+file path=usr/lib/python2.6/test/test_bastion.py
+file path=usr/lib/python2.6/test/test_bastion.pyc
+file path=usr/lib/python2.6/test/test_bigaddrspace.py
+file path=usr/lib/python2.6/test/test_bigaddrspace.pyc
+file path=usr/lib/python2.6/test/test_bigmem.py
+file path=usr/lib/python2.6/test/test_bigmem.pyc
+file path=usr/lib/python2.6/test/test_binascii.py
+file path=usr/lib/python2.6/test/test_binascii.pyc
+file path=usr/lib/python2.6/test/test_binhex.py
+file path=usr/lib/python2.6/test/test_binhex.pyc
+file path=usr/lib/python2.6/test/test_binop.py
+file path=usr/lib/python2.6/test/test_binop.pyc
+file path=usr/lib/python2.6/test/test_bisect.py
+file path=usr/lib/python2.6/test/test_bisect.pyc
+file path=usr/lib/python2.6/test/test_bool.py
+file path=usr/lib/python2.6/test/test_bool.pyc
+file path=usr/lib/python2.6/test/test_bsddb.py
+file path=usr/lib/python2.6/test/test_bsddb.pyc
+file path=usr/lib/python2.6/test/test_bsddb185.py
+file path=usr/lib/python2.6/test/test_bsddb185.pyc
+file path=usr/lib/python2.6/test/test_bsddb3.py
+file path=usr/lib/python2.6/test/test_bsddb3.pyc
+file path=usr/lib/python2.6/test/test_buffer.py
+file path=usr/lib/python2.6/test/test_buffer.pyc
+file path=usr/lib/python2.6/test/test_bufio.py
+file path=usr/lib/python2.6/test/test_bufio.pyc
+file path=usr/lib/python2.6/test/test_builtin.py
+file path=usr/lib/python2.6/test/test_builtin.pyc
+file path=usr/lib/python2.6/test/test_bytes.py
+file path=usr/lib/python2.6/test/test_bytes.pyc
+file path=usr/lib/python2.6/test/test_bz2.py
+file path=usr/lib/python2.6/test/test_bz2.pyc
+file path=usr/lib/python2.6/test/test_calendar.py
+file path=usr/lib/python2.6/test/test_calendar.pyc
+file path=usr/lib/python2.6/test/test_call.py
+file path=usr/lib/python2.6/test/test_call.pyc
+file path=usr/lib/python2.6/test/test_capi.py
+file path=usr/lib/python2.6/test/test_capi.pyc
+file path=usr/lib/python2.6/test/test_cd.py
+file path=usr/lib/python2.6/test/test_cd.pyc
+file path=usr/lib/python2.6/test/test_cfgparser.py
+file path=usr/lib/python2.6/test/test_cfgparser.pyc
+file path=usr/lib/python2.6/test/test_cgi.py
+file path=usr/lib/python2.6/test/test_cgi.pyc
+file path=usr/lib/python2.6/test/test_charmapcodec.py
+file path=usr/lib/python2.6/test/test_charmapcodec.pyc
+file path=usr/lib/python2.6/test/test_cl.py
+file path=usr/lib/python2.6/test/test_cl.pyc
+file path=usr/lib/python2.6/test/test_class.py
+file path=usr/lib/python2.6/test/test_class.pyc
+file path=usr/lib/python2.6/test/test_cmath.py
+file path=usr/lib/python2.6/test/test_cmath.pyc
+file path=usr/lib/python2.6/test/test_cmd.py
+file path=usr/lib/python2.6/test/test_cmd.pyc
+file path=usr/lib/python2.6/test/test_cmd_line.py
+file path=usr/lib/python2.6/test/test_cmd_line.pyc
+file path=usr/lib/python2.6/test/test_cmd_line_script.py
+file path=usr/lib/python2.6/test/test_cmd_line_script.pyc
+file path=usr/lib/python2.6/test/test_code.py
+file path=usr/lib/python2.6/test/test_code.pyc
+file path=usr/lib/python2.6/test/test_codeccallbacks.py
+file path=usr/lib/python2.6/test/test_codeccallbacks.pyc
+file path=usr/lib/python2.6/test/test_codecencodings_cn.py
+file path=usr/lib/python2.6/test/test_codecencodings_cn.pyc
+file path=usr/lib/python2.6/test/test_codecencodings_hk.py
+file path=usr/lib/python2.6/test/test_codecencodings_hk.pyc
+file path=usr/lib/python2.6/test/test_codecencodings_jp.py
+file path=usr/lib/python2.6/test/test_codecencodings_jp.pyc
+file path=usr/lib/python2.6/test/test_codecencodings_kr.py
+file path=usr/lib/python2.6/test/test_codecencodings_kr.pyc
+file path=usr/lib/python2.6/test/test_codecencodings_tw.py
+file path=usr/lib/python2.6/test/test_codecencodings_tw.pyc
+file path=usr/lib/python2.6/test/test_codecmaps_cn.py
+file path=usr/lib/python2.6/test/test_codecmaps_cn.pyc
+file path=usr/lib/python2.6/test/test_codecmaps_hk.py
+file path=usr/lib/python2.6/test/test_codecmaps_hk.pyc
+file path=usr/lib/python2.6/test/test_codecmaps_jp.py
+file path=usr/lib/python2.6/test/test_codecmaps_jp.pyc
+file path=usr/lib/python2.6/test/test_codecmaps_kr.py
+file path=usr/lib/python2.6/test/test_codecmaps_kr.pyc
+file path=usr/lib/python2.6/test/test_codecmaps_tw.py
+file path=usr/lib/python2.6/test/test_codecmaps_tw.pyc
+file path=usr/lib/python2.6/test/test_codecs.py
+file path=usr/lib/python2.6/test/test_codecs.pyc
+file path=usr/lib/python2.6/test/test_codeop.py
+file path=usr/lib/python2.6/test/test_codeop.pyc
+file path=usr/lib/python2.6/test/test_coding.py
+file path=usr/lib/python2.6/test/test_coding.pyc
+file path=usr/lib/python2.6/test/test_coercion.py
+file path=usr/lib/python2.6/test/test_coercion.pyc
+file path=usr/lib/python2.6/test/test_collections.py
+file path=usr/lib/python2.6/test/test_collections.pyc
+file path=usr/lib/python2.6/test/test_colorsys.py
+file path=usr/lib/python2.6/test/test_colorsys.pyc
+file path=usr/lib/python2.6/test/test_commands.py
+file path=usr/lib/python2.6/test/test_commands.pyc
+file path=usr/lib/python2.6/test/test_compare.py
+file path=usr/lib/python2.6/test/test_compare.pyc
+file path=usr/lib/python2.6/test/test_compile.py
+file path=usr/lib/python2.6/test/test_compile.pyc
+file path=usr/lib/python2.6/test/test_compiler.py
+file path=usr/lib/python2.6/test/test_compiler.pyc
+file path=usr/lib/python2.6/test/test_complex.py
+file path=usr/lib/python2.6/test/test_complex.pyc
+file path=usr/lib/python2.6/test/test_complex_args.py
+file path=usr/lib/python2.6/test/test_complex_args.pyc
+file path=usr/lib/python2.6/test/test_contains.py
+file path=usr/lib/python2.6/test/test_contains.pyc
+file path=usr/lib/python2.6/test/test_contextlib.py
+file path=usr/lib/python2.6/test/test_contextlib.pyc
+file path=usr/lib/python2.6/test/test_cookie.py
+file path=usr/lib/python2.6/test/test_cookie.pyc
+file path=usr/lib/python2.6/test/test_cookielib.py
+file path=usr/lib/python2.6/test/test_cookielib.pyc
+file path=usr/lib/python2.6/test/test_copy.py
+file path=usr/lib/python2.6/test/test_copy.pyc
+file path=usr/lib/python2.6/test/test_copy_reg.py
+file path=usr/lib/python2.6/test/test_copy_reg.pyc
+file path=usr/lib/python2.6/test/test_cpickle.py
+file path=usr/lib/python2.6/test/test_cpickle.pyc
+file path=usr/lib/python2.6/test/test_cprofile.py
+file path=usr/lib/python2.6/test/test_cprofile.pyc
+file path=usr/lib/python2.6/test/test_crypt.py
+file path=usr/lib/python2.6/test/test_crypt.pyc
+file path=usr/lib/python2.6/test/test_csv.py
+file path=usr/lib/python2.6/test/test_csv.pyc
+file path=usr/lib/python2.6/test/test_ctypes.py
+file path=usr/lib/python2.6/test/test_ctypes.pyc
+file path=usr/lib/python2.6/test/test_curses.py
+file path=usr/lib/python2.6/test/test_curses.pyc
+file path=usr/lib/python2.6/test/test_datetime.py
+file path=usr/lib/python2.6/test/test_datetime.pyc
+file path=usr/lib/python2.6/test/test_dbm.py
+file path=usr/lib/python2.6/test/test_dbm.pyc
+file path=usr/lib/python2.6/test/test_decimal.py
+file path=usr/lib/python2.6/test/test_decimal.pyc
+file path=usr/lib/python2.6/test/test_decorators.py
+file path=usr/lib/python2.6/test/test_decorators.pyc
+file path=usr/lib/python2.6/test/test_defaultdict.py
+file path=usr/lib/python2.6/test/test_defaultdict.pyc
+file path=usr/lib/python2.6/test/test_deque.py
+file path=usr/lib/python2.6/test/test_deque.pyc
+file path=usr/lib/python2.6/test/test_descr.py
+file path=usr/lib/python2.6/test/test_descr.pyc
+file path=usr/lib/python2.6/test/test_descrtut.py
+file path=usr/lib/python2.6/test/test_descrtut.pyc
+file path=usr/lib/python2.6/test/test_dict.py
+file path=usr/lib/python2.6/test/test_dict.pyc
+file path=usr/lib/python2.6/test/test_difflib.py
+file path=usr/lib/python2.6/test/test_difflib.pyc
+file path=usr/lib/python2.6/test/test_difflib_expect.html
+file path=usr/lib/python2.6/test/test_dircache.py
+file path=usr/lib/python2.6/test/test_dircache.pyc
+file path=usr/lib/python2.6/test/test_dis.py
+file path=usr/lib/python2.6/test/test_dis.pyc
+file path=usr/lib/python2.6/test/test_distutils.py
+file path=usr/lib/python2.6/test/test_distutils.pyc
+file path=usr/lib/python2.6/test/test_dl.py
+file path=usr/lib/python2.6/test/test_dl.pyc
+file path=usr/lib/python2.6/test/test_doctest.py
+file path=usr/lib/python2.6/test/test_doctest.pyc
+file path=usr/lib/python2.6/test/test_doctest.txt
+file path=usr/lib/python2.6/test/test_doctest2.py
+file path=usr/lib/python2.6/test/test_doctest2.pyc
+file path=usr/lib/python2.6/test/test_doctest2.txt
+file path=usr/lib/python2.6/test/test_doctest3.txt
+file path=usr/lib/python2.6/test/test_doctest4.txt
+file path=usr/lib/python2.6/test/test_docxmlrpc.py
+file path=usr/lib/python2.6/test/test_docxmlrpc.pyc
+file path=usr/lib/python2.6/test/test_dumbdbm.py
+file path=usr/lib/python2.6/test/test_dumbdbm.pyc
+file path=usr/lib/python2.6/test/test_dummy_thread.py
+file path=usr/lib/python2.6/test/test_dummy_thread.pyc
+file path=usr/lib/python2.6/test/test_dummy_threading.py
+file path=usr/lib/python2.6/test/test_dummy_threading.pyc
+file path=usr/lib/python2.6/test/test_email.py
+file path=usr/lib/python2.6/test/test_email.pyc
+file path=usr/lib/python2.6/test/test_email_codecs.py
+file path=usr/lib/python2.6/test/test_email_codecs.pyc
+file path=usr/lib/python2.6/test/test_email_renamed.py
+file path=usr/lib/python2.6/test/test_email_renamed.pyc
+file path=usr/lib/python2.6/test/test_enumerate.py
+file path=usr/lib/python2.6/test/test_enumerate.pyc
+file path=usr/lib/python2.6/test/test_eof.py
+file path=usr/lib/python2.6/test/test_eof.pyc
+file path=usr/lib/python2.6/test/test_epoll.py
+file path=usr/lib/python2.6/test/test_epoll.pyc
+file path=usr/lib/python2.6/test/test_errno.py
+file path=usr/lib/python2.6/test/test_errno.pyc
+file path=usr/lib/python2.6/test/test_exception_variations.py
+file path=usr/lib/python2.6/test/test_exception_variations.pyc
+file path=usr/lib/python2.6/test/test_exceptions.py
+file path=usr/lib/python2.6/test/test_exceptions.pyc
+file path=usr/lib/python2.6/test/test_extcall.py
+file path=usr/lib/python2.6/test/test_extcall.pyc
+file path=usr/lib/python2.6/test/test_fcntl.py
+file path=usr/lib/python2.6/test/test_fcntl.pyc
+file path=usr/lib/python2.6/test/test_file.py
+file path=usr/lib/python2.6/test/test_file.pyc
+file path=usr/lib/python2.6/test/test_filecmp.py
+file path=usr/lib/python2.6/test/test_filecmp.pyc
+file path=usr/lib/python2.6/test/test_fileinput.py
+file path=usr/lib/python2.6/test/test_fileinput.pyc
+file path=usr/lib/python2.6/test/test_fileio.py
+file path=usr/lib/python2.6/test/test_fileio.pyc
+file path=usr/lib/python2.6/test/test_float.py
+file path=usr/lib/python2.6/test/test_float.pyc
+file path=usr/lib/python2.6/test/test_fnmatch.py
+file path=usr/lib/python2.6/test/test_fnmatch.pyc
+file path=usr/lib/python2.6/test/test_fork1.py
+file path=usr/lib/python2.6/test/test_fork1.pyc
+file path=usr/lib/python2.6/test/test_format.py
+file path=usr/lib/python2.6/test/test_format.pyc
+file path=usr/lib/python2.6/test/test_fpformat.py
+file path=usr/lib/python2.6/test/test_fpformat.pyc
+file path=usr/lib/python2.6/test/test_fractions.py
+file path=usr/lib/python2.6/test/test_fractions.pyc
+file path=usr/lib/python2.6/test/test_frozen.py
+file path=usr/lib/python2.6/test/test_frozen.pyc
+file path=usr/lib/python2.6/test/test_ftplib.py
+file path=usr/lib/python2.6/test/test_ftplib.pyc
+file path=usr/lib/python2.6/test/test_funcattrs.py
+file path=usr/lib/python2.6/test/test_funcattrs.pyc
+file path=usr/lib/python2.6/test/test_functools.py
+file path=usr/lib/python2.6/test/test_functools.pyc
+file path=usr/lib/python2.6/test/test_future.py
+file path=usr/lib/python2.6/test/test_future.pyc
+file path=usr/lib/python2.6/test/test_future1.py
+file path=usr/lib/python2.6/test/test_future1.pyc
+file path=usr/lib/python2.6/test/test_future2.py
+file path=usr/lib/python2.6/test/test_future2.pyc
+file path=usr/lib/python2.6/test/test_future3.py
+file path=usr/lib/python2.6/test/test_future3.pyc
+file path=usr/lib/python2.6/test/test_future4.py
+file path=usr/lib/python2.6/test/test_future4.pyc
+file path=usr/lib/python2.6/test/test_future5.py
+file path=usr/lib/python2.6/test/test_future5.pyc
+file path=usr/lib/python2.6/test/test_future_builtins.py
+file path=usr/lib/python2.6/test/test_future_builtins.pyc
+file path=usr/lib/python2.6/test/test_gc.py
+file path=usr/lib/python2.6/test/test_gc.pyc
+file path=usr/lib/python2.6/test/test_gdbm.py
+file path=usr/lib/python2.6/test/test_gdbm.pyc
+file path=usr/lib/python2.6/test/test_generators.py
+file path=usr/lib/python2.6/test/test_generators.pyc
+file path=usr/lib/python2.6/test/test_genericpath.py
+file path=usr/lib/python2.6/test/test_genericpath.pyc
+file path=usr/lib/python2.6/test/test_genexps.py
+file path=usr/lib/python2.6/test/test_genexps.pyc
+file path=usr/lib/python2.6/test/test_getargs.py
+file path=usr/lib/python2.6/test/test_getargs.pyc
+file path=usr/lib/python2.6/test/test_getargs2.py
+file path=usr/lib/python2.6/test/test_getargs2.pyc
+file path=usr/lib/python2.6/test/test_getopt.py
+file path=usr/lib/python2.6/test/test_getopt.pyc
+file path=usr/lib/python2.6/test/test_gettext.py
+file path=usr/lib/python2.6/test/test_gettext.pyc
+file path=usr/lib/python2.6/test/test_gl.py
+file path=usr/lib/python2.6/test/test_gl.pyc
+file path=usr/lib/python2.6/test/test_glob.py
+file path=usr/lib/python2.6/test/test_glob.pyc
+file path=usr/lib/python2.6/test/test_global.py
+file path=usr/lib/python2.6/test/test_global.pyc
+file path=usr/lib/python2.6/test/test_grammar.py
+file path=usr/lib/python2.6/test/test_grammar.pyc
+file path=usr/lib/python2.6/test/test_grp.py
+file path=usr/lib/python2.6/test/test_grp.pyc
+file path=usr/lib/python2.6/test/test_gzip.py
+file path=usr/lib/python2.6/test/test_gzip.pyc
+file path=usr/lib/python2.6/test/test_hash.py
+file path=usr/lib/python2.6/test/test_hash.pyc
+file path=usr/lib/python2.6/test/test_hashlib.py
+file path=usr/lib/python2.6/test/test_hashlib.pyc
+file path=usr/lib/python2.6/test/test_heapq.py
+file path=usr/lib/python2.6/test/test_heapq.pyc
+file path=usr/lib/python2.6/test/test_hmac.py
+file path=usr/lib/python2.6/test/test_hmac.pyc
+file path=usr/lib/python2.6/test/test_hotshot.py
+file path=usr/lib/python2.6/test/test_hotshot.pyc
+file path=usr/lib/python2.6/test/test_htmllib.py
+file path=usr/lib/python2.6/test/test_htmllib.pyc
+file path=usr/lib/python2.6/test/test_htmlparser.py
+file path=usr/lib/python2.6/test/test_htmlparser.pyc
+file path=usr/lib/python2.6/test/test_httplib.py
+file path=usr/lib/python2.6/test/test_httplib.pyc
+file path=usr/lib/python2.6/test/test_httpservers.py
+file path=usr/lib/python2.6/test/test_httpservers.pyc
+file path=usr/lib/python2.6/test/test_imageop.py
+file path=usr/lib/python2.6/test/test_imageop.pyc
+file path=usr/lib/python2.6/test/test_imaplib.py
+file path=usr/lib/python2.6/test/test_imaplib.pyc
+file path=usr/lib/python2.6/test/test_imgfile.py
+file path=usr/lib/python2.6/test/test_imgfile.pyc
+file path=usr/lib/python2.6/test/test_imp.py
+file path=usr/lib/python2.6/test/test_imp.pyc
+file path=usr/lib/python2.6/test/test_import.py
+file path=usr/lib/python2.6/test/test_import.pyc
+file path=usr/lib/python2.6/test/test_importhooks.py
+file path=usr/lib/python2.6/test/test_importhooks.pyc
+file path=usr/lib/python2.6/test/test_index.py
+file path=usr/lib/python2.6/test/test_index.pyc
+file path=usr/lib/python2.6/test/test_inspect.py
+file path=usr/lib/python2.6/test/test_inspect.pyc
+file path=usr/lib/python2.6/test/test_int.py
+file path=usr/lib/python2.6/test/test_int.pyc
+file path=usr/lib/python2.6/test/test_int_literal.py
+file path=usr/lib/python2.6/test/test_int_literal.pyc
+file path=usr/lib/python2.6/test/test_io.py
+file path=usr/lib/python2.6/test/test_io.pyc
+file path=usr/lib/python2.6/test/test_ioctl.py
+file path=usr/lib/python2.6/test/test_ioctl.pyc
+file path=usr/lib/python2.6/test/test_isinstance.py
+file path=usr/lib/python2.6/test/test_isinstance.pyc
+file path=usr/lib/python2.6/test/test_iter.py
+file path=usr/lib/python2.6/test/test_iter.pyc
+file path=usr/lib/python2.6/test/test_iterlen.py
+file path=usr/lib/python2.6/test/test_iterlen.pyc
+file path=usr/lib/python2.6/test/test_itertools.py
+file path=usr/lib/python2.6/test/test_itertools.pyc
+file path=usr/lib/python2.6/test/test_json.py
+file path=usr/lib/python2.6/test/test_json.pyc
+file path=usr/lib/python2.6/test/test_kqueue.py
+file path=usr/lib/python2.6/test/test_kqueue.pyc
+file path=usr/lib/python2.6/test/test_largefile.py
+file path=usr/lib/python2.6/test/test_largefile.pyc
+file path=usr/lib/python2.6/test/test_lib2to3.py
+file path=usr/lib/python2.6/test/test_lib2to3.pyc
+file path=usr/lib/python2.6/test/test_linecache.py
+file path=usr/lib/python2.6/test/test_linecache.pyc
+file path=usr/lib/python2.6/test/test_linuxaudiodev.py
+file path=usr/lib/python2.6/test/test_linuxaudiodev.pyc
+file path=usr/lib/python2.6/test/test_list.py
+file path=usr/lib/python2.6/test/test_list.pyc
+file path=usr/lib/python2.6/test/test_locale.py
+file path=usr/lib/python2.6/test/test_locale.pyc
+file path=usr/lib/python2.6/test/test_logging.py
+file path=usr/lib/python2.6/test/test_logging.pyc
+file path=usr/lib/python2.6/test/test_long.py
+file path=usr/lib/python2.6/test/test_long.pyc
+file path=usr/lib/python2.6/test/test_long_future.py
+file path=usr/lib/python2.6/test/test_long_future.pyc
+file path=usr/lib/python2.6/test/test_longexp.py
+file path=usr/lib/python2.6/test/test_longexp.pyc
+file path=usr/lib/python2.6/test/test_macos.py
+file path=usr/lib/python2.6/test/test_macos.pyc
+file path=usr/lib/python2.6/test/test_macostools.py
+file path=usr/lib/python2.6/test/test_macostools.pyc
+file path=usr/lib/python2.6/test/test_macpath.py
+file path=usr/lib/python2.6/test/test_macpath.pyc
+file path=usr/lib/python2.6/test/test_mailbox.py
+file path=usr/lib/python2.6/test/test_mailbox.pyc
+file path=usr/lib/python2.6/test/test_marshal.py
+file path=usr/lib/python2.6/test/test_marshal.pyc
+file path=usr/lib/python2.6/test/test_math.py
+file path=usr/lib/python2.6/test/test_math.pyc
+file path=usr/lib/python2.6/test/test_md5.py
+file path=usr/lib/python2.6/test/test_md5.pyc
+file path=usr/lib/python2.6/test/test_memoryio.py
+file path=usr/lib/python2.6/test/test_memoryio.pyc
+file path=usr/lib/python2.6/test/test_mhlib.py
+file path=usr/lib/python2.6/test/test_mhlib.pyc
+file path=usr/lib/python2.6/test/test_mimetools.py
+file path=usr/lib/python2.6/test/test_mimetools.pyc
+file path=usr/lib/python2.6/test/test_mimetypes.py
+file path=usr/lib/python2.6/test/test_mimetypes.pyc
+file path=usr/lib/python2.6/test/test_minidom.py
+file path=usr/lib/python2.6/test/test_minidom.pyc
+file path=usr/lib/python2.6/test/test_mmap.py
+file path=usr/lib/python2.6/test/test_mmap.pyc
+file path=usr/lib/python2.6/test/test_module.py
+file path=usr/lib/python2.6/test/test_module.pyc
+file path=usr/lib/python2.6/test/test_modulefinder.py
+file path=usr/lib/python2.6/test/test_modulefinder.pyc
+file path=usr/lib/python2.6/test/test_multibytecodec.py
+file path=usr/lib/python2.6/test/test_multibytecodec.pyc
+file path=usr/lib/python2.6/test/test_multibytecodec_support.py
+file path=usr/lib/python2.6/test/test_multibytecodec_support.pyc
+file path=usr/lib/python2.6/test/test_multifile.py
+file path=usr/lib/python2.6/test/test_multifile.pyc
+file path=usr/lib/python2.6/test/test_multiprocessing.py
+file path=usr/lib/python2.6/test/test_multiprocessing.pyc
+file path=usr/lib/python2.6/test/test_mutants.py
+file path=usr/lib/python2.6/test/test_mutants.pyc
+file path=usr/lib/python2.6/test/test_mutex.py
+file path=usr/lib/python2.6/test/test_mutex.pyc
+file path=usr/lib/python2.6/test/test_netrc.py
+file path=usr/lib/python2.6/test/test_netrc.pyc
+file path=usr/lib/python2.6/test/test_new.py
+file path=usr/lib/python2.6/test/test_new.pyc
+file path=usr/lib/python2.6/test/test_nis.py
+file path=usr/lib/python2.6/test/test_nis.pyc
+file path=usr/lib/python2.6/test/test_normalization.py
+file path=usr/lib/python2.6/test/test_normalization.pyc
+file path=usr/lib/python2.6/test/test_ntpath.py
+file path=usr/lib/python2.6/test/test_ntpath.pyc
+file path=usr/lib/python2.6/test/test_old_mailbox.py
+file path=usr/lib/python2.6/test/test_old_mailbox.pyc
+file path=usr/lib/python2.6/test/test_opcodes.py
+file path=usr/lib/python2.6/test/test_opcodes.pyc
+file path=usr/lib/python2.6/test/test_openpty.py
+file path=usr/lib/python2.6/test/test_openpty.pyc
+file path=usr/lib/python2.6/test/test_operator.py
+file path=usr/lib/python2.6/test/test_operator.pyc
+file path=usr/lib/python2.6/test/test_optparse.py
+file path=usr/lib/python2.6/test/test_optparse.pyc
+file path=usr/lib/python2.6/test/test_os.py
+file path=usr/lib/python2.6/test/test_os.pyc
+file path=usr/lib/python2.6/test/test_ossaudiodev.py
+file path=usr/lib/python2.6/test/test_ossaudiodev.pyc
+file path=usr/lib/python2.6/test/test_parser.py
+file path=usr/lib/python2.6/test/test_parser.pyc
+file path=usr/lib/python2.6/test/test_peepholer.py
+file path=usr/lib/python2.6/test/test_peepholer.pyc
+file path=usr/lib/python2.6/test/test_pep247.py
+file path=usr/lib/python2.6/test/test_pep247.pyc
+file path=usr/lib/python2.6/test/test_pep263.py
+file path=usr/lib/python2.6/test/test_pep263.pyc
+file path=usr/lib/python2.6/test/test_pep277.py
+file path=usr/lib/python2.6/test/test_pep277.pyc
+file path=usr/lib/python2.6/test/test_pep292.py
+file path=usr/lib/python2.6/test/test_pep292.pyc
+file path=usr/lib/python2.6/test/test_pep352.py
+file path=usr/lib/python2.6/test/test_pep352.pyc
+file path=usr/lib/python2.6/test/test_pickle.py
+file path=usr/lib/python2.6/test/test_pickle.pyc
+file path=usr/lib/python2.6/test/test_pickletools.py
+file path=usr/lib/python2.6/test/test_pickletools.pyc
+file path=usr/lib/python2.6/test/test_pipes.py
+file path=usr/lib/python2.6/test/test_pipes.pyc
+file path=usr/lib/python2.6/test/test_pkg.py
+file path=usr/lib/python2.6/test/test_pkg.pyc
+file path=usr/lib/python2.6/test/test_pkgimport.py
+file path=usr/lib/python2.6/test/test_pkgimport.pyc
+file path=usr/lib/python2.6/test/test_pkgutil.py
+file path=usr/lib/python2.6/test/test_pkgutil.pyc
+file path=usr/lib/python2.6/test/test_platform.py
+file path=usr/lib/python2.6/test/test_platform.pyc
+file path=usr/lib/python2.6/test/test_plistlib.py
+file path=usr/lib/python2.6/test/test_plistlib.pyc
+file path=usr/lib/python2.6/test/test_poll.py
+file path=usr/lib/python2.6/test/test_poll.pyc
+file path=usr/lib/python2.6/test/test_popen.py
+file path=usr/lib/python2.6/test/test_popen.pyc
+file path=usr/lib/python2.6/test/test_popen2.py
+file path=usr/lib/python2.6/test/test_popen2.pyc
+file path=usr/lib/python2.6/test/test_poplib.py
+file path=usr/lib/python2.6/test/test_poplib.pyc
+file path=usr/lib/python2.6/test/test_posix.py
+file path=usr/lib/python2.6/test/test_posix.pyc
+file path=usr/lib/python2.6/test/test_posixpath.py
+file path=usr/lib/python2.6/test/test_posixpath.pyc
+file path=usr/lib/python2.6/test/test_pow.py
+file path=usr/lib/python2.6/test/test_pow.pyc
+file path=usr/lib/python2.6/test/test_pprint.py
+file path=usr/lib/python2.6/test/test_pprint.pyc
+file path=usr/lib/python2.6/test/test_print.py
+file path=usr/lib/python2.6/test/test_print.pyc
+file path=usr/lib/python2.6/test/test_profile.py
+file path=usr/lib/python2.6/test/test_profile.pyc
+file path=usr/lib/python2.6/test/test_profilehooks.py
+file path=usr/lib/python2.6/test/test_profilehooks.pyc
+file path=usr/lib/python2.6/test/test_property.py
+file path=usr/lib/python2.6/test/test_property.pyc
+file path=usr/lib/python2.6/test/test_pstats.py
+file path=usr/lib/python2.6/test/test_pstats.pyc
+file path=usr/lib/python2.6/test/test_pty.py
+file path=usr/lib/python2.6/test/test_pty.pyc
+file path=usr/lib/python2.6/test/test_pwd.py
+file path=usr/lib/python2.6/test/test_pwd.pyc
+file path=usr/lib/python2.6/test/test_py3kwarn.py
+file path=usr/lib/python2.6/test/test_py3kwarn.pyc
+file path=usr/lib/python2.6/test/test_pyclbr.py
+file path=usr/lib/python2.6/test/test_pyclbr.pyc
+file path=usr/lib/python2.6/test/test_pydoc.py
+file path=usr/lib/python2.6/test/test_pydoc.pyc
+file path=usr/lib/python2.6/test/test_pyexpat.py
+file path=usr/lib/python2.6/test/test_pyexpat.pyc
+file path=usr/lib/python2.6/test/test_queue.py
+file path=usr/lib/python2.6/test/test_queue.pyc
+file path=usr/lib/python2.6/test/test_quopri.py
+file path=usr/lib/python2.6/test/test_quopri.pyc
+file path=usr/lib/python2.6/test/test_random.py
+file path=usr/lib/python2.6/test/test_random.pyc
+file path=usr/lib/python2.6/test/test_re.py
+file path=usr/lib/python2.6/test/test_re.pyc
+file path=usr/lib/python2.6/test/test_repr.py
+file path=usr/lib/python2.6/test/test_repr.pyc
+file path=usr/lib/python2.6/test/test_resource.py
+file path=usr/lib/python2.6/test/test_resource.pyc
+file path=usr/lib/python2.6/test/test_rfc822.py
+file path=usr/lib/python2.6/test/test_rfc822.pyc
+file path=usr/lib/python2.6/test/test_richcmp.py
+file path=usr/lib/python2.6/test/test_richcmp.pyc
+file path=usr/lib/python2.6/test/test_robotparser.py
+file path=usr/lib/python2.6/test/test_robotparser.pyc
+file path=usr/lib/python2.6/test/test_runpy.py
+file path=usr/lib/python2.6/test/test_runpy.pyc
+file path=usr/lib/python2.6/test/test_sax.py
+file path=usr/lib/python2.6/test/test_sax.pyc
+file path=usr/lib/python2.6/test/test_scope.py
+file path=usr/lib/python2.6/test/test_scope.pyc
+file path=usr/lib/python2.6/test/test_scriptpackages.py
+file path=usr/lib/python2.6/test/test_scriptpackages.pyc
+file path=usr/lib/python2.6/test/test_select.py
+file path=usr/lib/python2.6/test/test_select.pyc
+file path=usr/lib/python2.6/test/test_set.py
+file path=usr/lib/python2.6/test/test_set.pyc
+file path=usr/lib/python2.6/test/test_sets.py
+file path=usr/lib/python2.6/test/test_sets.pyc
+file path=usr/lib/python2.6/test/test_sgmllib.py
+file path=usr/lib/python2.6/test/test_sgmllib.pyc
+file path=usr/lib/python2.6/test/test_sha.py
+file path=usr/lib/python2.6/test/test_sha.pyc
+file path=usr/lib/python2.6/test/test_shelve.py
+file path=usr/lib/python2.6/test/test_shelve.pyc
+file path=usr/lib/python2.6/test/test_shlex.py
+file path=usr/lib/python2.6/test/test_shlex.pyc
+file path=usr/lib/python2.6/test/test_shutil.py
+file path=usr/lib/python2.6/test/test_shutil.pyc
+file path=usr/lib/python2.6/test/test_signal.py
+file path=usr/lib/python2.6/test/test_signal.pyc
+file path=usr/lib/python2.6/test/test_site.py
+file path=usr/lib/python2.6/test/test_site.pyc
+file path=usr/lib/python2.6/test/test_slice.py
+file path=usr/lib/python2.6/test/test_slice.pyc
+file path=usr/lib/python2.6/test/test_smtplib.py
+file path=usr/lib/python2.6/test/test_smtplib.pyc
+file path=usr/lib/python2.6/test/test_smtpnet.py
+file path=usr/lib/python2.6/test/test_smtpnet.pyc
+file path=usr/lib/python2.6/test/test_socket.py
+file path=usr/lib/python2.6/test/test_socket.pyc
+file path=usr/lib/python2.6/test/test_socketserver.py
+file path=usr/lib/python2.6/test/test_socketserver.pyc
+file path=usr/lib/python2.6/test/test_softspace.py
+file path=usr/lib/python2.6/test/test_softspace.pyc
+file path=usr/lib/python2.6/test/test_sort.py
+file path=usr/lib/python2.6/test/test_sort.pyc
+file path=usr/lib/python2.6/test/test_sqlite.py
+file path=usr/lib/python2.6/test/test_sqlite.pyc
+file path=usr/lib/python2.6/test/test_ssl.py
+file path=usr/lib/python2.6/test/test_ssl.pyc
+file path=usr/lib/python2.6/test/test_startfile.py
+file path=usr/lib/python2.6/test/test_startfile.pyc
+file path=usr/lib/python2.6/test/test_str.py
+file path=usr/lib/python2.6/test/test_str.pyc
+file path=usr/lib/python2.6/test/test_strftime.py
+file path=usr/lib/python2.6/test/test_strftime.pyc
+file path=usr/lib/python2.6/test/test_string.py
+file path=usr/lib/python2.6/test/test_string.pyc
+file path=usr/lib/python2.6/test/test_stringprep.py
+file path=usr/lib/python2.6/test/test_stringprep.pyc
+file path=usr/lib/python2.6/test/test_strop.py
+file path=usr/lib/python2.6/test/test_strop.pyc
+file path=usr/lib/python2.6/test/test_strptime.py
+file path=usr/lib/python2.6/test/test_strptime.pyc
+file path=usr/lib/python2.6/test/test_struct.py
+file path=usr/lib/python2.6/test/test_struct.pyc
+file path=usr/lib/python2.6/test/test_structmembers.py
+file path=usr/lib/python2.6/test/test_structmembers.pyc
+file path=usr/lib/python2.6/test/test_structseq.py
+file path=usr/lib/python2.6/test/test_structseq.pyc
+file path=usr/lib/python2.6/test/test_subprocess.py
+file path=usr/lib/python2.6/test/test_subprocess.pyc
+file path=usr/lib/python2.6/test/test_sunaudiodev.py
+file path=usr/lib/python2.6/test/test_sunaudiodev.pyc
+file path=usr/lib/python2.6/test/test_sundry.py
+file path=usr/lib/python2.6/test/test_sundry.pyc
+file path=usr/lib/python2.6/test/test_support.py
+file path=usr/lib/python2.6/test/test_support.pyc
+file path=usr/lib/python2.6/test/test_symtable.py
+file path=usr/lib/python2.6/test/test_symtable.pyc
+file path=usr/lib/python2.6/test/test_syntax.py
+file path=usr/lib/python2.6/test/test_syntax.pyc
+file path=usr/lib/python2.6/test/test_sys.py
+file path=usr/lib/python2.6/test/test_sys.pyc
+file path=usr/lib/python2.6/test/test_tarfile.py
+file path=usr/lib/python2.6/test/test_tarfile.pyc
+file path=usr/lib/python2.6/test/test_tcl.py
+file path=usr/lib/python2.6/test/test_tcl.pyc
+file path=usr/lib/python2.6/test/test_telnetlib.py
+file path=usr/lib/python2.6/test/test_telnetlib.pyc
+file path=usr/lib/python2.6/test/test_tempfile.py
+file path=usr/lib/python2.6/test/test_tempfile.pyc
+file path=usr/lib/python2.6/test/test_textwrap.py
+file path=usr/lib/python2.6/test/test_textwrap.pyc
+file path=usr/lib/python2.6/test/test_thread.py
+file path=usr/lib/python2.6/test/test_thread.pyc
+file path=usr/lib/python2.6/test/test_threaded_import.py
+file path=usr/lib/python2.6/test/test_threaded_import.pyc
+file path=usr/lib/python2.6/test/test_threadedtempfile.py
+file path=usr/lib/python2.6/test/test_threadedtempfile.pyc
+file path=usr/lib/python2.6/test/test_threading.py
+file path=usr/lib/python2.6/test/test_threading.pyc
+file path=usr/lib/python2.6/test/test_threading_local.py
+file path=usr/lib/python2.6/test/test_threading_local.pyc
+file path=usr/lib/python2.6/test/test_threadsignals.py
+file path=usr/lib/python2.6/test/test_threadsignals.pyc
+file path=usr/lib/python2.6/test/test_time.py
+file path=usr/lib/python2.6/test/test_time.pyc
+file path=usr/lib/python2.6/test/test_timeout.py
+file path=usr/lib/python2.6/test/test_timeout.pyc
+file path=usr/lib/python2.6/test/test_tokenize.py
+file path=usr/lib/python2.6/test/test_tokenize.pyc
+file path=usr/lib/python2.6/test/test_trace.py
+file path=usr/lib/python2.6/test/test_trace.pyc
+file path=usr/lib/python2.6/test/test_traceback.py
+file path=usr/lib/python2.6/test/test_traceback.pyc
+file path=usr/lib/python2.6/test/test_transformer.py
+file path=usr/lib/python2.6/test/test_transformer.pyc
+file path=usr/lib/python2.6/test/test_tuple.py
+file path=usr/lib/python2.6/test/test_tuple.pyc
+file path=usr/lib/python2.6/test/test_typechecks.py
+file path=usr/lib/python2.6/test/test_typechecks.pyc
+file path=usr/lib/python2.6/test/test_types.py
+file path=usr/lib/python2.6/test/test_types.pyc
+file path=usr/lib/python2.6/test/test_ucn.py
+file path=usr/lib/python2.6/test/test_ucn.pyc
+file path=usr/lib/python2.6/test/test_unary.py
+file path=usr/lib/python2.6/test/test_unary.pyc
+file path=usr/lib/python2.6/test/test_undocumented_details.py
+file path=usr/lib/python2.6/test/test_undocumented_details.pyc
+file path=usr/lib/python2.6/test/test_unicode.py
+file path=usr/lib/python2.6/test/test_unicode.pyc
+file path=usr/lib/python2.6/test/test_unicode_file.py
+file path=usr/lib/python2.6/test/test_unicode_file.pyc
+file path=usr/lib/python2.6/test/test_unicodedata.py
+file path=usr/lib/python2.6/test/test_unicodedata.pyc
+file path=usr/lib/python2.6/test/test_unittest.py
+file path=usr/lib/python2.6/test/test_unittest.pyc
+file path=usr/lib/python2.6/test/test_univnewlines.py
+file path=usr/lib/python2.6/test/test_univnewlines.pyc
+file path=usr/lib/python2.6/test/test_unpack.py
+file path=usr/lib/python2.6/test/test_unpack.pyc
+file path=usr/lib/python2.6/test/test_urllib.py
+file path=usr/lib/python2.6/test/test_urllib.pyc
+file path=usr/lib/python2.6/test/test_urllib2.py
+file path=usr/lib/python2.6/test/test_urllib2.pyc
+file path=usr/lib/python2.6/test/test_urllib2_localnet.py
+file path=usr/lib/python2.6/test/test_urllib2_localnet.pyc
+file path=usr/lib/python2.6/test/test_urllib2net.py
+file path=usr/lib/python2.6/test/test_urllib2net.pyc
+file path=usr/lib/python2.6/test/test_urllibnet.py
+file path=usr/lib/python2.6/test/test_urllibnet.pyc
+file path=usr/lib/python2.6/test/test_urlparse.py
+file path=usr/lib/python2.6/test/test_urlparse.pyc
+file path=usr/lib/python2.6/test/test_userdict.py
+file path=usr/lib/python2.6/test/test_userdict.pyc
+file path=usr/lib/python2.6/test/test_userlist.py
+file path=usr/lib/python2.6/test/test_userlist.pyc
+file path=usr/lib/python2.6/test/test_userstring.py
+file path=usr/lib/python2.6/test/test_userstring.pyc
+file path=usr/lib/python2.6/test/test_uu.py
+file path=usr/lib/python2.6/test/test_uu.pyc
+file path=usr/lib/python2.6/test/test_uuid.py
+file path=usr/lib/python2.6/test/test_uuid.pyc
+file path=usr/lib/python2.6/test/test_wait3.py
+file path=usr/lib/python2.6/test/test_wait3.pyc
+file path=usr/lib/python2.6/test/test_wait4.py
+file path=usr/lib/python2.6/test/test_wait4.pyc
+file path=usr/lib/python2.6/test/test_warnings.py
+file path=usr/lib/python2.6/test/test_warnings.pyc
+file path=usr/lib/python2.6/test/test_wave.py
+file path=usr/lib/python2.6/test/test_wave.pyc
+file path=usr/lib/python2.6/test/test_weakref.py
+file path=usr/lib/python2.6/test/test_weakref.pyc
+file path=usr/lib/python2.6/test/test_whichdb.py
+file path=usr/lib/python2.6/test/test_whichdb.pyc
+file path=usr/lib/python2.6/test/test_winreg.py
+file path=usr/lib/python2.6/test/test_winreg.pyc
+file path=usr/lib/python2.6/test/test_winsound.py
+file path=usr/lib/python2.6/test/test_winsound.pyc
+file path=usr/lib/python2.6/test/test_with.py
+file path=usr/lib/python2.6/test/test_with.pyc
+file path=usr/lib/python2.6/test/test_wsgiref.py
+file path=usr/lib/python2.6/test/test_wsgiref.pyc
+file path=usr/lib/python2.6/test/test_xdrlib.py
+file path=usr/lib/python2.6/test/test_xdrlib.pyc
+file path=usr/lib/python2.6/test/test_xml_etree.py
+file path=usr/lib/python2.6/test/test_xml_etree.pyc
+file path=usr/lib/python2.6/test/test_xml_etree_c.py
+file path=usr/lib/python2.6/test/test_xml_etree_c.pyc
+file path=usr/lib/python2.6/test/test_xmllib.py
+file path=usr/lib/python2.6/test/test_xmllib.pyc
+file path=usr/lib/python2.6/test/test_xmlrpc.py
+file path=usr/lib/python2.6/test/test_xmlrpc.pyc
+file path=usr/lib/python2.6/test/test_xpickle.py
+file path=usr/lib/python2.6/test/test_xpickle.pyc
+file path=usr/lib/python2.6/test/test_xrange.py
+file path=usr/lib/python2.6/test/test_xrange.pyc
+file path=usr/lib/python2.6/test/test_zipfile.py
+file path=usr/lib/python2.6/test/test_zipfile.pyc
+file path=usr/lib/python2.6/test/test_zipfile64.py
+file path=usr/lib/python2.6/test/test_zipfile64.pyc
+file path=usr/lib/python2.6/test/test_zipimport.py
+file path=usr/lib/python2.6/test/test_zipimport.pyc
+file path=usr/lib/python2.6/test/test_zipimport_support.py
+file path=usr/lib/python2.6/test/test_zipimport_support.pyc
+file path=usr/lib/python2.6/test/test_zlib.py
+file path=usr/lib/python2.6/test/test_zlib.pyc
+file path=usr/lib/python2.6/test/testall.py
+file path=usr/lib/python2.6/test/testall.pyc
+file path=usr/lib/python2.6/test/testcodec.py
+file path=usr/lib/python2.6/test/testcodec.pyc
+file path=usr/lib/python2.6/test/testimg.uue
+file path=usr/lib/python2.6/test/testimgr.uue
+file path=usr/lib/python2.6/test/testrgb.uue
+file path=usr/lib/python2.6/test/testtar.tar
+file path=usr/lib/python2.6/test/tf_inherit_check.py
+file path=usr/lib/python2.6/test/tf_inherit_check.pyc
+file path=usr/lib/python2.6/test/threaded_import_hangers.py
+file path=usr/lib/python2.6/test/threaded_import_hangers.pyc
+file path=usr/lib/python2.6/test/time_hashlib.py
+file path=usr/lib/python2.6/test/time_hashlib.pyc
+file path=usr/lib/python2.6/test/tokenize_tests.txt
+file path=usr/lib/python2.6/test/ucredtest.py
+file path=usr/lib/python2.6/test/ucredtest.pyc
+file path=usr/lib/python2.6/test/warning_tests.py
+file path=usr/lib/python2.6/test/warning_tests.pyc
+file path=usr/lib/python2.6/test/wrongcert.pem
+file path=usr/lib/python2.6/test/xmltests.py
+file path=usr/lib/python2.6/test/xmltests.pyc
+file path=usr/lib/python2.6/test/zipdir.zip
+file path=usr/lib/python2.6/textwrap.py
+file path=usr/lib/python2.6/textwrap.pyc
+file path=usr/lib/python2.6/this.py
+file path=usr/lib/python2.6/this.pyc
+file path=usr/lib/python2.6/threading.py
+file path=usr/lib/python2.6/threading.pyc
+file path=usr/lib/python2.6/timeit.py
+file path=usr/lib/python2.6/timeit.pyc
+file path=usr/lib/python2.6/toaiff.py
+file path=usr/lib/python2.6/toaiff.pyc
+file path=usr/lib/python2.6/token.py
+file path=usr/lib/python2.6/token.pyc
+file path=usr/lib/python2.6/tokenize.py
+file path=usr/lib/python2.6/tokenize.pyc
+file path=usr/lib/python2.6/trace.py
+file path=usr/lib/python2.6/trace.pyc
+file path=usr/lib/python2.6/traceback.py
+file path=usr/lib/python2.6/traceback.pyc
+file path=usr/lib/python2.6/tty.py
+file path=usr/lib/python2.6/tty.pyc
+file path=usr/lib/python2.6/types.py
+file path=usr/lib/python2.6/types.pyc
+file path=usr/lib/python2.6/unittest.py
+file path=usr/lib/python2.6/unittest.pyc
+file path=usr/lib/python2.6/urllib.py
+file path=usr/lib/python2.6/urllib.pyc
+file path=usr/lib/python2.6/urllib2.py
+file path=usr/lib/python2.6/urllib2.pyc
+file path=usr/lib/python2.6/urlparse.py
+file path=usr/lib/python2.6/urlparse.pyc
+file path=usr/lib/python2.6/user.py
+file path=usr/lib/python2.6/user.pyc
+file path=usr/lib/python2.6/uu.py
+file path=usr/lib/python2.6/uu.pyc
+file path=usr/lib/python2.6/uuid.py
+file path=usr/lib/python2.6/uuid.pyc
+file path=usr/lib/python2.6/warnings.py
+file path=usr/lib/python2.6/warnings.pyc
+file path=usr/lib/python2.6/wave.py
+file path=usr/lib/python2.6/wave.pyc
+file path=usr/lib/python2.6/weakref.py
+file path=usr/lib/python2.6/weakref.pyc
+file path=usr/lib/python2.6/webbrowser.py
+file path=usr/lib/python2.6/webbrowser.pyc
+file path=usr/lib/python2.6/whichdb.py
+file path=usr/lib/python2.6/whichdb.pyc
+file path=usr/lib/python2.6/wsgiref.egg-info
+file path=usr/lib/python2.6/wsgiref/__init__.py
+file path=usr/lib/python2.6/wsgiref/__init__.pyc
+file path=usr/lib/python2.6/wsgiref/handlers.py
+file path=usr/lib/python2.6/wsgiref/handlers.pyc
+file path=usr/lib/python2.6/wsgiref/headers.py
+file path=usr/lib/python2.6/wsgiref/headers.pyc
+file path=usr/lib/python2.6/wsgiref/simple_server.py
+file path=usr/lib/python2.6/wsgiref/simple_server.pyc
+file path=usr/lib/python2.6/wsgiref/util.py
+file path=usr/lib/python2.6/wsgiref/util.pyc
+file path=usr/lib/python2.6/wsgiref/validate.py
+file path=usr/lib/python2.6/wsgiref/validate.pyc
+file path=usr/lib/python2.6/xdrlib.py
+file path=usr/lib/python2.6/xdrlib.pyc
+file path=usr/lib/python2.6/xml/__init__.py
+file path=usr/lib/python2.6/xml/__init__.pyc
+file path=usr/lib/python2.6/xml/dom/NodeFilter.py
+file path=usr/lib/python2.6/xml/dom/NodeFilter.pyc
+file path=usr/lib/python2.6/xml/dom/__init__.py
+file path=usr/lib/python2.6/xml/dom/__init__.pyc
+file path=usr/lib/python2.6/xml/dom/domreg.py
+file path=usr/lib/python2.6/xml/dom/domreg.pyc
+file path=usr/lib/python2.6/xml/dom/expatbuilder.py
+file path=usr/lib/python2.6/xml/dom/expatbuilder.pyc
+file path=usr/lib/python2.6/xml/dom/minicompat.py
+file path=usr/lib/python2.6/xml/dom/minicompat.pyc
+file path=usr/lib/python2.6/xml/dom/minidom.py
+file path=usr/lib/python2.6/xml/dom/minidom.pyc
+file path=usr/lib/python2.6/xml/dom/pulldom.py
+file path=usr/lib/python2.6/xml/dom/pulldom.pyc
+file path=usr/lib/python2.6/xml/dom/xmlbuilder.py
+file path=usr/lib/python2.6/xml/dom/xmlbuilder.pyc
+file path=usr/lib/python2.6/xml/etree/ElementInclude.py
+file path=usr/lib/python2.6/xml/etree/ElementInclude.pyc
+file path=usr/lib/python2.6/xml/etree/ElementPath.py
+file path=usr/lib/python2.6/xml/etree/ElementPath.pyc
+file path=usr/lib/python2.6/xml/etree/ElementTree.py
+file path=usr/lib/python2.6/xml/etree/ElementTree.pyc
+file path=usr/lib/python2.6/xml/etree/__init__.py
+file path=usr/lib/python2.6/xml/etree/__init__.pyc
+file path=usr/lib/python2.6/xml/etree/cElementTree.py
+file path=usr/lib/python2.6/xml/etree/cElementTree.pyc
+file path=usr/lib/python2.6/xml/parsers/__init__.py
+file path=usr/lib/python2.6/xml/parsers/__init__.pyc
+file path=usr/lib/python2.6/xml/parsers/expat.py
+file path=usr/lib/python2.6/xml/parsers/expat.pyc
+file path=usr/lib/python2.6/xml/sax/__init__.py
+file path=usr/lib/python2.6/xml/sax/__init__.pyc
+file path=usr/lib/python2.6/xml/sax/_exceptions.py
+file path=usr/lib/python2.6/xml/sax/_exceptions.pyc
+file path=usr/lib/python2.6/xml/sax/expatreader.py
+file path=usr/lib/python2.6/xml/sax/expatreader.pyc
+file path=usr/lib/python2.6/xml/sax/handler.py
+file path=usr/lib/python2.6/xml/sax/handler.pyc
+file path=usr/lib/python2.6/xml/sax/saxutils.py
+file path=usr/lib/python2.6/xml/sax/saxutils.pyc
+file path=usr/lib/python2.6/xml/sax/xmlreader.py
+file path=usr/lib/python2.6/xml/sax/xmlreader.pyc
+file path=usr/lib/python2.6/xmllib.py
+file path=usr/lib/python2.6/xmllib.pyc
+file path=usr/lib/python2.6/xmlrpclib.py
+file path=usr/lib/python2.6/xmlrpclib.pyc
+file path=usr/lib/python2.6/zipfile.py
+file path=usr/lib/python2.6/zipfile.pyc
+file path=usr/lib/python2.6/lib-dynload/64/_bisect.so
+file path=usr/lib/python2.6/lib-dynload/64/_bytesio.so
+file path=usr/lib/python2.6/lib-dynload/64/_codecs_cn.so
+file path=usr/lib/python2.6/lib-dynload/64/_codecs_hk.so
+file path=usr/lib/python2.6/lib-dynload/64/_codecs_iso2022.so
+file path=usr/lib/python2.6/lib-dynload/64/_codecs_jp.so
+file path=usr/lib/python2.6/lib-dynload/64/_codecs_kr.so
+file path=usr/lib/python2.6/lib-dynload/64/_codecs_tw.so
+file path=usr/lib/python2.6/lib-dynload/64/_collections.so
+file path=usr/lib/python2.6/lib-dynload/64/_csv.so
+file path=usr/lib/python2.6/lib-dynload/64/_ctypes.so
+file path=usr/lib/python2.6/lib-dynload/64/_ctypes_test.so
+file path=usr/lib/python2.6/lib-dynload/64/_curses.so
+file path=usr/lib/python2.6/lib-dynload/64/_curses_panel.so
+file path=usr/lib/python2.6/lib-dynload/64/_elementtree.so
+file path=usr/lib/python2.6/lib-dynload/64/_fileio.so
+file path=usr/lib/python2.6/lib-dynload/64/_functools.so
+file path=usr/lib/python2.6/lib-dynload/64/_hashlib.so
+file path=usr/lib/python2.6/lib-dynload/64/_heapq.so
+file path=usr/lib/python2.6/lib-dynload/64/_hotshot.so
+file path=usr/lib/python2.6/lib-dynload/64/_json.so
+file path=usr/lib/python2.6/lib-dynload/64/_locale.so
+file path=usr/lib/python2.6/lib-dynload/64/_lsprof.so
+file path=usr/lib/python2.6/lib-dynload/64/_multibytecodec.so
+file path=usr/lib/python2.6/lib-dynload/64/_multiprocessing.so
+file path=usr/lib/python2.6/lib-dynload/64/_random.so
+file path=usr/lib/python2.6/lib-dynload/64/_socket.so
+file path=usr/lib/python2.6/lib-dynload/64/_sqlite3.so
+file path=usr/lib/python2.6/lib-dynload/64/_ssl.so
+file path=usr/lib/python2.6/lib-dynload/64/_struct.so
+file path=usr/lib/python2.6/lib-dynload/64/_testcapi.so
+file path=usr/lib/python2.6/lib-dynload/64/_tkinter.so
+file path=usr/lib/python2.6/lib-dynload/64/_weakref.so
+file path=usr/lib/python2.6/lib-dynload/64/array.so
+file path=usr/lib/python2.6/lib-dynload/64/audioop.so
+file path=usr/lib/python2.6/lib-dynload/64/binascii.so
+file path=usr/lib/python2.6/lib-dynload/64/bz2.so
+file path=usr/lib/python2.6/lib-dynload/64/cPickle.so
+file path=usr/lib/python2.6/lib-dynload/64/cStringIO.so
+file path=usr/lib/python2.6/lib-dynload/64/cmath.so
+file path=usr/lib/python2.6/lib-dynload/64/crypt.so
+file path=usr/lib/python2.6/lib-dynload/64/datetime.so
+file path=usr/lib/python2.6/lib-dynload/64/dbm.so
+file path=usr/lib/python2.6/lib-dynload/64/dlpi.so
+file path=usr/lib/python2.6/lib-dynload/64/fcntl.so
+file path=usr/lib/python2.6/lib-dynload/64/future_builtins.so
+file path=usr/lib/python2.6/lib-dynload/64/gdbm.so
+file path=usr/lib/python2.6/lib-dynload/64/grp.so
+file path=usr/lib/python2.6/lib-dynload/64/itertools.so
+file path=usr/lib/python2.6/lib-dynload/64/math.so
+file path=usr/lib/python2.6/lib-dynload/64/mmap.so
+file path=usr/lib/python2.6/lib-dynload/64/nis.so
+file path=usr/lib/python2.6/lib-dynload/64/operator.so
+file path=usr/lib/python2.6/lib-dynload/64/parser.so
+file path=usr/lib/python2.6/lib-dynload/64/privileges.so
+file path=usr/lib/python2.6/lib-dynload/64/pyexpat.so
+file path=usr/lib/python2.6/lib-dynload/64/rbac.so
+file path=usr/lib/python2.6/lib-dynload/64/readline.so
+file path=usr/lib/python2.6/lib-dynload/64/resource.so
+file path=usr/lib/python2.6/lib-dynload/64/select.so
+file path=usr/lib/python2.6/lib-dynload/64/spwd.so
+file path=usr/lib/python2.6/lib-dynload/64/strop.so
+file path=usr/lib/python2.6/lib-dynload/64/sunaudiodev.so
+file path=usr/lib/python2.6/lib-dynload/64/syslog.so
+file path=usr/lib/python2.6/lib-dynload/64/termios.so
+file path=usr/lib/python2.6/lib-dynload/64/time.so
+file path=usr/lib/python2.6/lib-dynload/64/ucred.so
+file path=usr/lib/python2.6/lib-dynload/64/unicodedata.so
+file path=usr/lib/python2.6/lib-dynload/64/zlib.so
+file usr/share/man/man1/python.1 path=usr/share/man/man1/python2.6.1
+link path=usr/bin/python-config target=python2.6-config
+link path=usr/lib/$(MACH64)/libpython2.6.so target=libpython2.6.so.1.0
+link path=usr/lib/libpython2.6.so target=libpython2.6.so.1.0
+
+license python26.license license="PSFv2"
+
+legacy pkg=SUNWPython26 \
+    desc="The Python interpreter, libraries and utilities" \
+    name="The Python interpreter, libraries and utilities" \
+    category="GNOME2,application,JDS4" \
+    vendor=Python.org
+
+legacy pkg=SUNWPython26-devel \
+    desc="The Python interpreter, libraries and utilities - development files" \
+    name="The Python interpreter, libraries and utilities - development files" \
+    category="GNOME2,application,JDS4" \
+    vendor=Python.org
+
+# keep this until dependency generation is fixed
+depend fmri=compress/bzip2 type=require
+depend fmri=database/sqlite-3 type=require
+depend fmri=library/database/gdbm type=require
+#depend fmri=library/libffi type=require
+depend fmri=library/ncurses type=require
+depend fmri=library/readline type=require
+depend fmri=library/security/openssl type=require
+depend fmri=library/zlib type=require
+depend fmri=runtime/tcl-8 type=require
+depend fmri=runtime/tk-8 type=require
+depend fmri=SUNWcs type=require
+depend fmri=system/library type=require
+depend fmri=system/library/math type=require
+depend fmri=x11/compatibility/links-xorg type=require
+depend fmri=x11/library/libx11 type=require
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python26/python26.license	Wed Feb 23 10:37:11 2011 -0800
@@ -0,0 +1,274 @@
+A. HISTORY OF THE SOFTWARE
+==========================
+
+Python was created in the early 1990s by Guido van Rossum at Stichting
+Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
+as a successor of a language called ABC.  Guido remains Python's
+principal author, although it includes many contributions from others.
+
+In 1995, Guido continued his work on Python at the Corporation for
+National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
+in Reston, Virginia where he released several versions of the
+software.
+
+In May 2000, Guido and the Python core development team moved to
+BeOpen.com to form the BeOpen PythonLabs team.  In October of the same
+year, the PythonLabs team moved to Digital Creations (now Zope
+Corporation, see http://www.zope.com).  In 2001, the Python Software
+Foundation (PSF, see http://www.python.org/psf/) was formed, a
+non-profit organization created specifically to own Python-related
+Intellectual Property.  Zope Corporation is a sponsoring member of
+the PSF.
+
+All Python releases are Open Source (see http://www.opensource.org for
+the Open Source Definition).  Historically, most, but not all, Python
+releases have also been GPL-compatible; the table below summarizes
+the various releases.
+
+    Release         Derived     Year        Owner       GPL-
+                    from                                compatible? (1)
+
+    0.9.0 thru 1.2              1991-1995   CWI         yes
+    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes
+    1.6             1.5.2       2000        CNRI        no
+    2.0             1.6         2000        BeOpen.com  no
+    1.6.1           1.6         2001        CNRI        yes (2)
+    2.1             2.0+1.6.1   2001        PSF         no
+    2.0.1           2.0+1.6.1   2001        PSF         yes
+    2.1.1           2.1+2.0.1   2001        PSF         yes
+    2.2             2.1.1       2001        PSF         yes
+    2.1.2           2.1.1       2002        PSF         yes
+    2.1.3           2.1.2       2002        PSF         yes
+    2.2.1           2.2         2002        PSF         yes
+    2.2.2           2.2.1       2002        PSF         yes
+    2.2.3           2.2.2       2003        PSF         yes
+    2.3             2.2.2       2002-2003   PSF         yes
+    2.3.1           2.3         2002-2003   PSF         yes
+    2.3.2           2.3.1       2002-2003   PSF         yes
+    2.3.3           2.3.2       2002-2003   PSF         yes
+    2.3.4           2.3.3       2004        PSF         yes
+    2.3.5           2.3.4       2005        PSF         yes
+    2.4             2.3         2004        PSF         yes
+    2.4.1           2.4         2005        PSF         yes
+    2.4.2           2.4.1       2005        PSF         yes
+    2.4.3           2.4.2       2006        PSF         yes
+    2.4.4           2.4.3       2006        PSF         yes
+    2.5             2.4         2006        PSF         yes
+    2.5.1           2.5         2007        PSF         yes
+    2.5.2           2.5.1       2008        PSF         yes
+    2.5.3           2.5.2       2008        PSF         yes
+    2.6             2.5         2008        PSF         yes
+    2.6.1           2.6         2008        PSF         yes
+
+Footnotes:
+
+(1) GPL-compatible doesn't mean that we're distributing Python under
+    the GPL.  All Python licenses, unlike the GPL, let you distribute
+    a modified version without making your changes open source.  The
+    GPL-compatible licenses make it possible to combine Python with
+    other software that is released under the GPL; the others don't.
+
+(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
+    because its license has a choice of law clause.  According to
+    CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
+    is "not incompatible" with the GPL.
+
+Thanks to the many outside volunteers who have worked under Guido's
+direction to make these releases possible.
+
+
+B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
+===============================================================
+
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Python
+Software Foundation; All Rights Reserved" are retained in Python alone or in any
+derivative version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+
+4. PSF is making Python available to Licensee on an "AS IS"
+basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee.  This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions.  Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee.  This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party.  As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee.  Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement.  This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013.  This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee.  This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+        ACCEPT
+
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands.  All rights reserved.
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
--- a/components/tcsh/Makefile	Tue Feb 22 10:12:42 2011 -0800
+++ b/components/tcsh/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -45,7 +45,7 @@
 COMPONENT_POST_BUILD_ACTION = \
 	(cd $(@D)/nls ; $(MAKE) all)
 
-CFLAGS += -D_FILE_OFFSET_BITS=64
+CFLAGS +=	$(CPP_LARGEFILES)
 
 LOCALEDIR=$(PROTO_DIR)/$(CONFIGURE_LOCALEDIR)
 
--- a/components/zsh/Makefile	Tue Feb 22 10:12:42 2011 -0800
+++ b/components/zsh/Makefile	Wed Feb 23 10:37:11 2011 -0800
@@ -37,10 +37,8 @@
 include ../../make-rules/configure.mk
 include ../../make-rules/ips.mk
 
-LFS_CFLAGS:sh = getconf LFS_CFLAGS
-
 CONFIGURE_OPTIONS += -n
-CONFIGURE_OPTIONS += --enable-cppflags="$(LFS_CFLAGS)"
+CONFIGURE_OPTIONS += --enable-cppflags="$(CPP_LARGEFILES)"
 CONFIGURE_OPTIONS += --enable-dynamic
 CONFIGURE_OPTIONS += --enable-etcdir=/etc
 CONFIGURE_OPTIONS += --enable-function-subdirs
--- a/make-rules/ips.mk	Tue Feb 22 10:12:42 2011 -0800
+++ b/make-rules/ips.mk	Wed Feb 23 10:37:11 2011 -0800
@@ -75,6 +75,8 @@
 
 PKG_OPTIONS +=		$(PKG_MACROS:%=-D %)
 
+PKG_PROTO_DIRS += $(PROTO_DIR) $(@D) $(COMPONENT_DIR)
+
 MANIFEST_BASE =		$(BUILD_DIR)/manifest-$(MACH)
 
 CANONICAL_MANIFESTS =	$(wildcard *.p5m)
@@ -117,8 +119,9 @@
 		sed -e '/^$$/d' -e '/^#.*$$/d' | uniq >$@
 
 # generate dependencies
+PKGDEPEND_GENERATE_OPTIONS = -m $(PKG_PROTO_DIRS:%=-d %)
 $(MANIFEST_BASE)-%.depend:	$(MANIFEST_BASE)-%.mogrified
-	$(PKGDEPEND) generate -m $< $(PROTO_DIR) >$@
+	$(PKGDEPEND) generate $(PKGDEPEND_GENERATE_OPTIONS) $< >$@
 
 # resolve dependencies, prepend the mogrified manifest, less the unresolved
 # dependencies to the result.
@@ -137,9 +140,10 @@
 	$(PKGFMT) <$< >$@
 
 # published
+PKGSEND_PUBLISH_OPTIONS = -s $(PKG_REPO) publish --fmri-in-manifest
+PKGSEND_PUBLISH_OPTIONS += $(PKG_PROTO_DIRS:%=-d %)
 $(MANIFEST_BASE)-%.published:	$(MANIFEST_BASE)-%.linted
-	$(PKGSEND) -s $(PKG_REPO) publish --fmri-in-manifest \
-		-d $(PROTO_DIR) -d $(@D) -d . $<
+	$(PKGSEND) $(PKGSEND_PUBLISH_OPTIONS) $<
 	$(PKGFMT) <$< >$@
 
 $(BUILD_DIR)/.published:	$(PUBLISHED)
--- a/make-rules/setup.py.mk	Tue Feb 22 10:12:42 2011 -0800
+++ b/make-rules/setup.py.mk	Wed Feb 23 10:37:11 2011 -0800
@@ -35,14 +35,16 @@
 INSTALL_32 = $(PYTHON_VERSIONS:%=$(BUILD_DIR)/$(MACH32)-%/.installed)
 INSTALL_64 = $(PYTHON_VERSIONS:%=$(BUILD_DIR)/$(MACH64)-%/.installed)
 
+PYTHON_ENV =	CC="$(CC)"
+PYTHON_ENV +=	CFLAGS="$(CFLAGS)"
+
 # build the configured source
 $(BUILD_DIR)/%/.built:	$(SOURCE_DIR)/.prep
 	$(RM) -r $(@D) ; $(MKDIR) $(@D)
 	$(COMPONENT_PRE_BUILD_ACTION)
 	(cd $(SOURCE_DIR) ; $(ENV) $(PYTHON_ENV) \
 		$(PYTHON.$(BITS)) ./setup.py build \
-			--build-temp $(@D:$(BUILD_DIR)/%=%) \
-			$(COMPONENT_INSTALL_ARGS))
+			--build-temp $(@D:$(BUILD_DIR)/%=%))
 	$(COMPONENT_POST_BUILD_ACTION)
 	$(TOUCH) $@
 
@@ -62,3 +64,5 @@
 	$(COMPONENT_POST_INSTALL_ACTION)
 	$(TOUCH) $@
 
+clean::
+	$(RM) -r $(SOURCE_DIR) $(BUILD_DIR)
--- a/make-rules/shared-macros.mk	Tue Feb 22 10:12:42 2011 -0800
+++ b/make-rules/shared-macros.mk	Wed Feb 23 10:37:11 2011 -0800
@@ -135,6 +135,10 @@
 INSTALL_64 =		$(BUILD_DIR_64)/.installed
 INSTALL_32_and_64 =	$(INSTALL_32) $(INSTALL_64)
 
+TEST_32 =		$(BUILD_DIR_32)/.tested
+TEST_64 =		$(BUILD_DIR_64)/.tested
+TEST_32_and_64 =	$(TEST_32) $(TEST_64)
+
 # BUILD_TOOLS is the root of all tools not normally installed on the system.
 BUILD_TOOLS =	/ws/onnv-tools
 
@@ -143,11 +147,11 @@
 
 GCC_ROOT =	/usr/gnu
 
-CC.studio.32 =	$(SPRO_VROOT)/bin/cc -m32
-CCC.studio.32 =	$(SPRO_VROOT)/bin/CC -m32
+CC.studio.32 =	$(SPRO_VROOT)/bin/cc
+CCC.studio.32 =	$(SPRO_VROOT)/bin/CC
 
-CC.studio.64 =	$(SPRO_VROOT)/bin/cc -m64
-CCC.studio.64 =	$(SPRO_VROOT)/bin/CC -m64
+CC.studio.64 =	$(SPRO_VROOT)/bin/cc
+CCC.studio.64 =	$(SPRO_VROOT)/bin/CC
 
 CC.gcc.32 =	$(GCC_ROOT)/bin/cc -m32
 CCC.gcc.32 =	$(GCC_ROOT)/bin/CC -m32
@@ -174,7 +178,8 @@
 GMAKE =		/usr/gnu/bin/make
 GPATCH =	/usr/gnu/bin/patch
 PATCH_LEVEL =	1
-GPATCH_FLAGS =	-p$(PATCH_LEVEL) -b
+GPATCH_BACKUP =	--backup --version-control=numbered
+GPATCH_FLAGS =	-p$(PATCH_LEVEL) $(GPATCH_BACKUP)
 
 PKGSEND =	/usr/bin/pkgsend
 PKGLINT =	/usr/bin/pkglint
@@ -191,82 +196,195 @@
 INS.dir=        $(INSTALL) -d $@
 INS.file=       $(INSTALL) -m 444 $< $(@D)
 
-# C compiler mode. Future compilers may change the default on us,
-# so force transition mode globally. Lower level makefiles can
-# override this by setting CCMODE.
 #
-CCMODE=		-Xa
-CCMODE64=	-Xa
+# C preprocessor flag sets to ease feature selection.  Add the required
+# feature to your Makefile with CPPFLAGS += $(FEATURE_MACRO) and add to
+# the component build with CONFIGURE_OPTIONS += CPPFLAGS="$(CPPFLAGS)" or
+# similiar.
+#
+
+# Enables visibility of some c99 math functions that aren't visible by default.
+# What other side-effects are there?
+CPP_C99_EXTENDED_MATH =	-D_STDC_99
 
-# compiler '-xarch' flag. This is here to centralize it and make it
-# overridable for testing.
-sparc_XARCH=    $(CCBITS32) -xarch=sparc
-sparcv9_XARCH=  $(CCBITS64) -xcode=abs64
-i386_XARCH=     $(CCBITS32) -xchip=pentium
-amd64_XARCH=    $(CCBITS64) -xarch=generic -Ui386 -U__i386
+# Enables large file support for components that have no other means of doing
+# so.  Use CPP_LARGEFILES and not the .32/.64 variety directly
+CPP_LARGEFILES.32 =	$(shell getconf LFS_CFLAGS)
+CPP_LARGEFILES.64 =	$(shell getconf LFS64_CFLAGS)
+CPP_LARGEFILES =		$(CPP_LARGEFILES.$(BITS))
 
-# allow zero-sized struct/union declarations and
-# void functions with return statements
-FEATURES_EXTENSIONS=	-features=extensions
-
-# disable the incremental linker
-ILDOFF=         -xildoff
-
-# C99 mode
-C99_ENABLE=     -xc99=all
-C99_DISABLE=    -xc99=none
-C99MODE=        $(C99_ENABLE)
-C99LMODE=       $(C99MODE:-xc99%=-Xc99%)
+# Enables some #pragma redefine_extname to POSIX-compliant Standard C Library
+# functions. Also avoids the component's #define _POSIX_C_SOURCE to some value
+# we currently do not support.
+CPP_POSIX =	-D_POSIX_C_SOURCE=200112L -D_POSIX_PTHREAD_SEMANTICS
 
 # XPG6 mode.  This option enables XPG6 conformance, plus extensions.
 # Amongst other things, this option will cause system calls like
 # popen (3C) and system (3C) to invoke the standards-conforming
-# shell, /usr/xpg4/bin/sh, instead of /usr/bin/sh.
-XPG6MODE=	$(C99MODE) -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1
+# shell, /usr/xpg4/bin/sh, instead of /usr/bin/sh.  Add studio_XPG6MODE to
+# CFLAGS instead of using this directly
+CPP_XPG6MODE=	-D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1 -D_XPG6
+
+
+#
+# Studio C compiler flag sets to ease feature selection.  Add the required
+# feature to your Makefile with CFLAGS += $(FEATURE_MACRO) and add to the
+# component build with CONFIGURE_OPTIONS += CFLAGS="$(CFLAGS)" or similiar.
+#
+
+# Generate 32/64 bit objects
+CC_BITS =	-m$(BITS)
+
+# Code generation instruction set and optimization 'hints'.  Use studio_XBITS
+# and not the .arch.bits variety directly.
+studio_XBITS.sparc.32 =	-xtarget=ultra2 -xarch=sparcvis -xchip=ultra2
+studio_XBITS.sparc.64 =	-xtarget=ultra2 -xarch=sparcvis -xchip=ultra2
+studio_XBITS.i386.32 =	-xarch=pentium
+studio_XBITS.i386.64 =	-xarch=generic64 -Ui386 -U__i386
+studio_XBITS = $(studio_XBITS.$(ARCH).$(BITS))
 
+# Turn on recognition of supported C99 language features and enable the 1999 C
+# standard library semantics of routines that appear in	both the 1990 and
+# 1999 C standard. To use set studio_C99MODE=$(studio_99_ENABLE) in your
+# component Makefile.
+studio_C99_ENABLE =		-xc99=all
+
+# Turn off recognition of C99 language features, and do not enable the 1999 C
+# standard library semantics of routines that appeared in both the 1990	and
+# 1999 C standard.  To use set studio_C99MODE=$(studio_99_DISABLE) in your
+# component Makefile.
+studio_C99_DISABLE =	-xc99=none
+
+# Use the compiler default 'xc99=all,no_lib'
+studio_C99MODE =
+
+# Allow zero-sized struct/union declarations and void functions with return
+# statements.
+studio_FEATURES_EXTENSIONS =	-features=extensions
+
+# Control the Studio optimization level.
+studio_OPT.sparc.32 =	-x04
+studio_OPT.sparc.64 =	-x04
+studio_OPT.i386.32 =	-x04
+studio_OPT.i386.64 =	-x04
+studio_OPT =		$(studio_OPT.$(ARCH).$(BITS))
+
+# Studio PIC code generation.  Use CC_PIC instead to select PIC code generation.
+studio_PIC = 	-KPIC -DPIC
 
 # The Sun Studio 11 compiler has changed the behaviour of integer
 # wrap arounds and so a flag is needed to use the legacy behaviour
 # (without this flag panics/hangs could be exposed within the source).
-#
-sparc_IROPTFLAG		= -W2,-xwrap_int
-sparcv9_IROPTFLAG	= -W2,-xwrap_int
-i386_IROPTFLAG		=
-amd64_IROPTFLAG		=
-IROPTFLAG		= $($(MACH)_IROPTFLAG)
-IROPTFLAG64		= $($(MACH64)_IROPTFLAG)
+# This is used through studio_IROPTS, not the 'sparc' variety.
+studio_IROPTS.sparc =	-W2,-xwrap_int
+studio_IROPTS =		$(studio_IROPTS.$(ARCH))
+
+# Control register usage for generated code.  SPARC ABI requires system
+# libraries not to use application registers.  x86 requires 'no%frameptr' at
+# x04 or higher.
+studio_XREGS.sparc =	-xregs=no%appl,float
+studio_XREGS.i386 =	-xregs=no%frameptr
+studio_XREGS =		$(studio_XREGS.$(ARCH))
+
+# See CPP_XPG6MODE comment above.
+studio_XPG6MODE =	$(studio_C99MODE) $(CPP_XPG6MODE)
+XPG6MODE =		$(studio_XPG6MODE)
+
+# Default Studio C compiler flags.  Add the required feature to your Makefile
+# with CFLAGS += $(FEATURE_MACRO) and add to the component build with
+# CONFIGURE_OPTIONS += CFLAGS="$(CFLAGS)" or similiar.  In most cases, it
+# should not be necessary to add CFLAGS to any environment other than the
+# configure environment.
+CFLAGS.studio +=	$(studio_OPT) $(studio_XBITS) $(studio_XREGS) \
+			$(studio_IROPTS) $(studio_C99MODE)
+
 
-sparc_CFLAGS=	$(sparc_XARCH)
-sparcv9_CFLAGS=	$(sparcv9_XARCH) -dalign $(CCVERBOSE)
-i386_CFLAGS=	$(i386_XARCH)
-amd64_CFLAGS=	$(amd64_XARCH)
+#
+# GNU C compiler flag sets to ease feature selection.  Add the required
+# feature to your Makefile with CFLAGS += $(FEATURE_MACRO) and add to the
+# component build with CONFIGURE_OPTIONS += CFLAGS="$(CFLAGS)" or similiar.
+#
+
+# GCC Compiler optimization flag
+gcc_OPT =	-O3
+
+# GCC PIC code generation.  Use CC_PIC instead to select PIC code generation.
+gcc_PIC =	-fPIC -DPIC
 
-sparc_COPTFLAG=		-xO3
-sparcv9_COPTFLAG=	-xO3
-i386_COPTFLAG=		-xO3
-amd64_COPTFLAG=		-xO3
-COPTFLAG= $($(MACH)_COPTFLAG)
-COPTFLAG64= $($(MACH64)_COPTFLAG)
+# Generic macro for PIC code generation.  Use this macro instead of the
+# compiler specific variant.
+CC_PIC =	$($(COMPILER)_PIC)
+
+
+# Default GNU C compiler flags.  Add the required feature to your Makefile
+# with CFLAGS += $(FEATURE_MACRO) and add to the component build with
+# CONFIGURE_OPTIONS += CFLAGS="$(CFLAGS)" or similiar.  In most cases, it
+# should not be necessary to add CFLAGS to any environment other than the
+# configure environment.
+CFLAGS.gcc +=	$(gcc_OPT)
+
+
+# Build 32 or 64 bit objects.
+CFLAGS +=	$(CC_BITS)
+
+# Add compiler specific 'default' features
+CFLAGS +=	$(CFLAGS.$(COMPILER))
 
-sparc_XREGSFLAG		= -xregs=no%appl
-sparcv9_XREGSFLAG	= -xregs=no%appl
-i386_XREGSFLAG		=
-amd64_XREGSFLAG		=
-XREGSFLAG		= $($(MACH)_XREGSFLAG)
-XREGSFLAG64		= $($(MACH64)_XREGSFLAG)
+
+#
+# Solaris linker flag sets to ease feature selection.  Add the required
+# feature to your Makefile with LDFLAGS += $(FEATURE_MACRO) and add to the
+# component build with CONFIGURE_OPTIONS += LDFLAGS="$(LDFLAGS)" or similiar.
+#
+
+# Reduce the symbol table size, effectively conflicting with -g.  We should
+# get linker guidance here.
+LD_Z_REDLOCSYM =	-z redlocsym
+
+# Cause the linker to rescan archive libraries and resolve remaining unresolved
+# symbols recursively until all symbols are resolved.  Components should be
+# linking in the libraries they need, in the required order.  This should
+# only be required if the component's native build is horribly broken.
+LD_Z_RESCAN_NOW =	-z rescan-now
+
+LD_Z_TEXT =		-z direct
+
+# make sure all symbols are defined.
+LD_Z_DEFS =		-z defs
+
+# use direct binding
+LD_B_DIRECT =		-Bdirect
 
-CFLAGS=  \
-	$(COPTFLAG) $($(MACH)_CFLAGS) $(CCMODE) \
-	$(ILDOFF) $(C99MODE) $(IROPTFLAG)
+#
+# More Solaris linker flags that we want to be sure that everyone gets.  This
+# is automatically added to the calling environment during the 'build' and
+# 'install' phases of the component build.  Each individual feature can be
+# turned off by adding FEATURE_MACRO= to the component Makefile.
+#
+
+# Create a non-executable stack when linking.
+LD_MAP_NOEXSTK =	-M /usr/lib/ld/map.noexstk
+
+# Create a non-executable bss segment when linking.
+LD_MAP_NOEXBSS =	-M /usr/lib/ld/map.noexbss
 
-CFLAGS64= \
-	$(COPTFLAG64) $($(MACH64)_CFLAGS) $(CCMODE64) \
-	$(ILDOFF) $(C99MODE) $(IROPTFLAG64)
+# Create a non-executable data segment when linking.  Due to PLT needs, the
+# data segment must be executable on sparc, but the bss does not.
+# see mapfile comments for more information
+LD_MAP_NOEXDATA.i386 =	-M /usr/lib/ld/map.noexdata
+LD_MAP_NOEXDATA.sparc =	$(LD_MAP_NOEXBSS)
+
+# Page alignment
+LD_MAP_PAGEALIGN =	-M /usr/lib/ld/map.pagealign
 
-# build with a non-executable stack by default.
-# override this if necessary
-LD_MAP_NOEXSTK=-M /usr/lib/ld/map.noexstk
-LD_OPTIONS+= $(LD_MAP_NOEXSTK)
+# Linker options to add when only building libraries
+LD_OPTIONS_SO +=	$(LD_Z_TEXT) $(LD_Z_DEFS)
+
+# Default linker options that everyone should get.  Do not add additional
+# libraries to this macro, as it will apply to everything linked during the
+# component build.
+LD_OPTIONS +=	$(LD_MAP_NOEXSTK) $(LD_MAP_NOEXDATA.$(ARCH)) \
+		$(LD_MAP_PAGEALIGN) $(LD_B_DIRECT)
 
 # Environment variables and arguments passed into the build and install
 # environment(s).  These are the initial settings.
--- a/tools/python/pkglint/userland.py	Tue Feb 22 10:12:42 2011 -0800
+++ b/tools/python/pkglint/userland.py	Wed Feb 23 10:37:11 2011 -0800
@@ -42,7 +42,7 @@
                     "checks Userland packages for common content errors")
 		self.prototype = os.getenv('PROTO_DIR')
 		self.runpath_re = [
-			re.compile('^/lib/'),
+			re.compile('^/lib(/.*)?$'),
 			re.compile('^/usr/'),
 			re.compile('^\$ORIGIN/')
 		]
--- a/transforms/comparison-cleanup	Tue Feb 22 10:12:42 2011 -0800
+++ b/transforms/comparison-cleanup	Wed Feb 23 10:37:11 2011 -0800
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
 #
 
 #
@@ -27,7 +27,7 @@
 #
 
 # drop actions that don't apply to the architecture we are on
-<transform dir file link hardlink variant.arch=(?!$(ARCH)) -> drop>
+#<transform dir file link hardlink variant.arch=(?!$(ARCH)) -> drop>
 
 # drop the license actions from the manifests, we aren't going to compare them
 <transform license -> drop>
@@ -51,7 +51,11 @@
 <transform dir file link hardlink -> delete timestamp .*>
 <transform dir file link hardlink -> delete pkg.csize .*>
 <transform dir file link hardlink -> delete pkg.chash .*>
+<transform dir file link hardlink -> delete chash .*>
 <transform dir file link hardlink -> delete pkg.size .*>
+<transform dir file link hardlink -> delete elfarch .*>
+<transform dir file link hardlink -> delete elfbits .*>
+<transform dir file link hardlink -> delete elfhash .*>
 <transform dir file link hardlink -> delete owner .*>
 <transform dir file link hardlink -> delete group .*>
 <transform dir file link hardlink -> delete mode .*>