summaryrefslogtreecommitdiff
path: root/dev-tcltk/tclpython
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /dev-tcltk/tclpython
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'dev-tcltk/tclpython')
-rw-r--r--dev-tcltk/tclpython/Manifest1
-rw-r--r--dev-tcltk/tclpython/files/tclpython-4.1-python-3.patch229
-rw-r--r--dev-tcltk/tclpython/metadata.xml5
-rw-r--r--dev-tcltk/tclpython/tclpython-4.1-r4.ebuild55
4 files changed, 290 insertions, 0 deletions
diff --git a/dev-tcltk/tclpython/Manifest b/dev-tcltk/tclpython/Manifest
new file mode 100644
index 000000000000..802276bb58dd
--- /dev/null
+++ b/dev-tcltk/tclpython/Manifest
@@ -0,0 +1 @@
+DIST tclpython-4.1.tar.bz2 10580 SHA256 663e0e9e16875fda8e98fd8c74108475062b5e96dcf7145b46142b16c289db50 SHA512 5f08e7129a7d9afeb1ac6bf1ab1c83ad3bb481593c9516c0653c7b4ba0dfb1b3129a336e64b998cec8ef2d2377a6a366b73c640d25839ab280d5079c0b220d54 WHIRLPOOL a3535555eb314dd19f54628135053c4eac0a9cb79cc1be7cca3b8f861c826438765fa98513fc7f7ac3271fd4fef7f9f70e036421a5b7991035b328b63239ba03
diff --git a/dev-tcltk/tclpython/files/tclpython-4.1-python-3.patch b/dev-tcltk/tclpython/files/tclpython-4.1-python-3.patch
new file mode 100644
index 000000000000..2a26f647c10e
--- /dev/null
+++ b/dev-tcltk/tclpython/files/tclpython-4.1-python-3.patch
@@ -0,0 +1,229 @@
+--- a/tclpython.c 2006-03-07 16:28:03.000000000 +0300
++++ b/tclpython.c 2014-05-06 23:33:41.713623943 +0400
+@@ -19,13 +19,83 @@
+ $ cc -fpic -I/usr/local/include/tcltk/tcl8.3 -c tclthread.c
+ $ ld -o tclpython.so -Bshareable -L/usr/X11R6/lib -L/usr/local/lib -L/usr/local/share/python/config tclpython.o tclthread.o -lpython -lutil -lreadline -ltermcap -lcrypt -lgmp -lgdbm -lpq -lz -ltcl83 -ltk83 -lX11
+
++Patched for Python 3 with respect to https://github.com/facebook/fbthrift/blob/master/thrift/lib/py/protocol/fastbinary.c
++
+ */
+
+ #include <Python.h>
+ #include <tcl.h>
+-#include <cStringIO.h>
++
++#if PY_MAJOR_VERSION >= 3
++ #define PyInt_FromLong PyLong_FromLong
++ #define PyInt_AsLong PyLong_AsLong
++ #define PyString_FromStringAndSize PyBytes_FromStringAndSize
++#else
++ #include <cStringIO.h>
++#endif
++
+ #include "tclpython.h"
+
++// Mostly copied from cStringIO.c
++#if PY_MAJOR_VERSION >= 3
++
++/** io module in python3. */
++static PyObject* Python3IO;
++
++typedef struct {
++ PyObject_HEAD
++ char *buf;
++ Py_ssize_t pos, string_size;
++} IOobject;
++
++#define IOOOBJECT(O) ((IOobject*)(O))
++
++static int
++IO__opencheck(IOobject *self) {
++ if (!self->buf) {
++ PyErr_SetString(PyExc_ValueError,
++ "I/O operation on closed file");
++ return 0;
++ }
++ return 1;
++}
++
++static PyObject *
++IO_cgetval(PyObject *self) {
++ if (!IO__opencheck(IOOOBJECT(self))) return NULL;
++ assert(IOOOBJECT(self)->pos >= 0);
++ return PyBytes_FromStringAndSize(((IOobject*)self)->buf,
++ ((IOobject*)self)->pos);
++}
++#endif
++
++/* -- PYTHON MODULE SETUP STUFF --- */
++
++static PyObject *pythonTclEvaluate(PyObject *self, PyObject *args);
++
++static PyMethodDef tclMethods[] = {
++ {"eval", pythonTclEvaluate, METH_VARARGS, "Evaluate a Tcl script."},
++ {0, 0, 0, 0} /* sentinel */
++};
++
++#if PY_MAJOR_VERSION >= 3
++struct module_state {
++ PyObject *error;
++};
++
++static struct PyModuleDef TclModuleDef = {
++ PyModuleDef_HEAD_INIT,
++ "tcl",
++ NULL,
++ sizeof(struct module_state),
++ tclMethods,
++ NULL,
++ NULL,
++ NULL,
++ NULL
++};
++#endif
++
+ #ifndef WIN32
+ /* George Petasis, 21 Feb 2006:
+ * The following check cannot be handled correctly
+@@ -66,13 +136,13 @@
+
+ static int pythonInterpreter(ClientData clientData, Tcl_Interp *interpreter, int numberOfArguments, Tcl_Obj * CONST arguments[])
+ {
+- int identifier;
++ intptr_t identifier;
+ PyObject *output;
+ PyObject *message;
+ PyObject *result;
+ PyObject *globals;
+ char *string = 0;
+- int length;
++ Py_ssize_t length;
+ Tcl_Obj *object;
+ struct Tcl_HashEntry *entry;
+ unsigned evaluate;
+@@ -111,12 +181,22 @@
+ /* choose start token depending on whether this is an evaluation or an execution: */
+ result = PyRun_String(Tcl_GetString(arguments[2]), (evaluate? Py_eval_input: Py_file_input), globals, globals);
+ if (result == 0) { /* an error occured */
++#if PY_MAJOR_VERSION >= 3
++ output = PyObject_CallMethod(Python3IO, "BytesIO", "()");
++#else
+ output = PycStringIO->NewOutput(1024); /* use a reasonable initial size but big enough to handle most cases */
+- PySys_SetObject("stderr", output); /* capture all interpreter error output */
++#endif
++ PySys_SetObject("sys.stderr", output); /* capture all interpreter error output */
+ PyErr_Print(); /* so that error is printed on standard error, redirected above */
++#if PY_MAJOR_VERSION >= 3
++ message = IO_cgetval(output);
++ string = PyBytes_AsString(message);
++ length = (string == NULL) ? 0 : strlen(string);
++#else
+ message = PycStringIO->cgetvalue(output);
+ string = PyString_AsString(message);
+ length = PyString_Size(message);
++#endif
+ if ((length > 0) && (string[length - 1] == '\n')) length--; /* eventually remove trailing new line character */
+ object = Tcl_NewObj();
+ Tcl_AppendStringsToObj(object, Tcl_GetString(arguments[0]), ": ", 0); /* identify interpreter in error */
+@@ -124,7 +204,11 @@
+ Py_DECREF(output);
+ } else {
+ if (evaluate) {
++#if PY_MAJOR_VERSION >= 3
++ string = PyUnicode_AsUTF8(PyObject_Str(result));
++#else
+ string = PyString_AsString(PyObject_Str(result));
++#endif
+ object = Tcl_NewStringObj(string, -1); /* return evaluation result */
+ } else /* execute */
+ object = Tcl_NewObj(); /* always return an empty result or an error */
+@@ -139,9 +223,9 @@
+
+ Tcl_Interp *tclInterpreter(CONST char *name) /* public function for use in extensions to this extension */
+ {
+- int identifier;
++ intptr_t identifier;
+
+- if ((sscanf(name, "tcl%u", &identifier) == 0) || (identifier != 0)) {
++ if ((sscanf(name, "tcl%lu", &identifier) == 0) || (identifier != 0)) {
+ return 0; /* invalid name */
+ } else {
+ return mainInterpreter; /* sole available interpreter */
+@@ -188,14 +272,9 @@
+ return Py_BuildValue("s", result);
+ }
+
+-static PyMethodDef tclMethods[] = {
+- {"eval", pythonTclEvaluate, METH_VARARGS, "Evaluate a Tcl script."},
+- {0, 0, 0, 0} /* sentinel */
+-};
+-
+ static int newInterpreter(Tcl_Interp *interpreter)
+ {
+- int identifier;
++ intptr_t identifier;
+ Tcl_Obj *object;
+ int created;
+ #ifdef WITH_THREAD
+@@ -214,19 +293,31 @@
+ return TCL_ERROR;
+ } else {
+ Py_Initialize(); /* initialize main interpreter */
++#if PY_MAJOR_VERSION >= 3
++ Python3IO = PyImport_ImportModule("io");
++#else
+ PycString_IMPORT;
++#endif
+ }
+ Tcl_SetHashValue(Tcl_CreateHashEntry(&threadStates, (ClientData)identifier, &created), 0);
+ #else
+ if (existingInterpreters == 0) {
+ Py_Initialize(); /* initialize main interpreter */
+ PyEval_InitThreads(); /* initialize and acquire the global interpreter lock */
++#if PY_MAJOR_VERSION >= 3
++ Python3IO = PyImport_ImportModule("io");
++#else
+ PycString_IMPORT;
++#endif
+ globalState = PyThreadState_Swap(0); /* save the global thread */
+ } else {
+ PyEval_AcquireLock(); /* needed in order to be able to create a new interpreter */
+ }
++#if PY_MAJOR_VERSION >= 3
++ if (Python3IO == 0) { /* make sure string input/output is properly initialized */
++#else
+ if (PycStringIO == 0) { /* make sure string input/output is properly initialized */
++#endif
+ Tcl_SetResult(interpreter, "fatal error: could not initialize Python string input/output module", TCL_STATIC);
+ return TCL_ERROR;
+ }
+@@ -250,7 +341,11 @@
+ newIdentifier++;
+ #endif
+ existingInterpreters++;
++#if PY_MAJOR_VERSION >= 3
++ tcl = PyModule_Create(&TclModuleDef);
++#else
+ tcl = Py_InitModule("tcl", tclMethods); /* add a new 'tcl' module to the python interpreter */
++#endif
+ Py_INCREF(tcl);
+ PyModule_AddObject(PyImport_AddModule("__builtin__"), "tcl", tcl);
+ return TCL_OK;
+@@ -260,7 +355,7 @@
+ {
+ int index;
+ char *name;
+- int identifier;
++ intptr_t identifier;
+ struct Tcl_HashEntry *entry;
+ Tcl_Obj *object;
+ #ifdef WITH_THREAD
+@@ -270,7 +365,7 @@
+ for (index = 0; index < numberOfArguments; index++) {
+ name = Tcl_GetString(arguments[index]); /* interpreter name is "pythonN" */
+ entry = 0;
+- if (sscanf(name, "python%u", &identifier) == 1) {
++ if (sscanf(name, "python%lu", &identifier) == 1) {
+ identifier = atoi(name + 6);
+ entry = Tcl_FindHashEntry(&threadStates, (ClientData)identifier);
+ }
diff --git a/dev-tcltk/tclpython/metadata.xml b/dev-tcltk/tclpython/metadata.xml
new file mode 100644
index 000000000000..70ac40499556
--- /dev/null
+++ b/dev-tcltk/tclpython/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <herd>tcltk</herd>
+</pkgmetadata>
diff --git a/dev-tcltk/tclpython/tclpython-4.1-r4.ebuild b/dev-tcltk/tclpython/tclpython-4.1-r4.ebuild
new file mode 100644
index 000000000000..4a0620511b50
--- /dev/null
+++ b/dev-tcltk/tclpython/tclpython-4.1-r4.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+PYTHON_COMPAT=( python{2_7,3_3,3_4} )
+
+inherit eutils multilib python-single-r1 toolchain-funcs
+
+DESCRIPTION="Python package for Tcl"
+HOMEPAGE="http://jfontain.free.fr/tclpython.htm"
+SRC_URI="http://jfontain.free.fr/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+IUSE=""
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+DEPEND="${PYTHON_DEPS}
+ dev-lang/tcl:0="
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-python-3.patch
+)
+
+src_prepare() {
+ epatch ${PATCHES[@]}
+}
+
+src_compile() {
+ local cfile="tclpython tclthread"
+ for src in ${cfile}; do
+ compile="$(tc-getCC) -shared -fPIC ${CFLAGS} -I$(python_get_includedir) -c ${src}.c"
+ einfo "${compile}"
+ eval "${compile}" || die
+ done
+
+ link="$(tc-getCC) -fPIC -shared ${LDFLAGS} -o tclpython.so.${PV} tclpython.o tclthread.o -lpthread -lutil $(python_get_LIBS) -ltcl"
+ einfo "${link}"
+ eval "${link}" || die
+}
+
+src_install() {
+ insinto /usr/$(get_libdir)/tclpython
+ doins tclpython.so.${PV} pkgIndex.tcl
+ fperms 775 /usr/$(get_libdir)/tclpython/tclpython.so.${PV}
+ dosym tclpython.so.${PV} /usr/$(get_libdir)/tclpython/tclpython.so
+
+ dodoc CHANGES INSTALL README
+ dohtml tclpython.htm
+}