Python: move interpreters
Move Python interpreters (CPython, PyPy) to same folder and share layout.
This commit is contained in:
218
pkgs/development/interpreters/python/cpython/2.6/default.nix
Normal file
218
pkgs/development/interpreters/python/cpython/2.6/default.nix
Normal file
@@ -0,0 +1,218 @@
|
||||
{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2, less, includeModules ? false
|
||||
, sqlite, tcl, tk, xlibsWrapper, openssl, readline, db, ncurses, gdbm, self, callPackage
|
||||
, python26Packages }:
|
||||
|
||||
assert zlibSupport -> zlib != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
majorVersion = "2.6";
|
||||
version = "${majorVersion}.9";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.xz";
|
||||
sha256 = "0hbfs2691b60c7arbysbzr0w9528d5pl8a4x7mq5psh6a2cvprya";
|
||||
};
|
||||
|
||||
patches =
|
||||
[ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff.
|
||||
./search-path.patch
|
||||
|
||||
# Python recompiles a Python if the mtime stored *in* the
|
||||
# pyc/pyo file differs from the mtime of the source file. This
|
||||
# doesn't work in Nix because Nix changes the mtime of files in
|
||||
# the Nix store to 1. So treat that as a special case.
|
||||
./nix-store-mtime.patch
|
||||
|
||||
# http://bugs.python.org/issue10013
|
||||
./python2.6-fix-parallel-make.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
# Purity.
|
||||
for i in /usr /sw /opt /pkg; do
|
||||
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||
done
|
||||
'' + optionalString (stdenv ? cc && stdenv.cc.libc != null) ''
|
||||
for i in Lib/plat-*/regen; do
|
||||
substituteInPlace $i --replace /usr/include/ ${stdenv.cc.libc}/include/
|
||||
done
|
||||
'' + optionalString stdenv.isCygwin ''
|
||||
# On Cygwin, `make install' tries to read this Makefile.
|
||||
mkdir -p $out/lib/python${majorVersion}/config
|
||||
touch $out/lib/python${majorVersion}/config/Makefile
|
||||
mkdir -p $out/include/python${majorVersion}
|
||||
touch $out/include/python${majorVersion}/pyconfig.h
|
||||
'';
|
||||
|
||||
configureFlags = "--enable-shared --with-threads --enable-unicode=ucs4";
|
||||
|
||||
buildInputs =
|
||||
optional (stdenv ? cc && stdenv.cc.libc != null) stdenv.cc.libc ++
|
||||
[ bzip2 openssl ]++ optionals includeModules [ db openssl ncurses gdbm readline xlibsWrapper tcl tk sqlite ]
|
||||
++ optional zlibSupport zlib;
|
||||
|
||||
propagatedBuildInputs = [ less ];
|
||||
|
||||
mkPaths = paths: {
|
||||
C_INCLUDE_PATH = makeSearchPathOutput "dev" "include" paths;
|
||||
LIBRARY_PATH = makeLibraryPath paths;
|
||||
};
|
||||
|
||||
# Build the basic Python interpreter without modules that have
|
||||
# external dependencies.
|
||||
python = stdenv.mkDerivation {
|
||||
name = "python${if includeModules then "" else "-minimal"}-${version}";
|
||||
pythonVersion = majorVersion;
|
||||
|
||||
inherit majorVersion version src patches buildInputs propagatedBuildInputs
|
||||
preConfigure configureFlags;
|
||||
|
||||
inherit (mkPaths buildInputs) C_INCLUDE_PATH LIBRARY_PATH;
|
||||
|
||||
NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2";
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
postInstall =
|
||||
''
|
||||
# needed for some packages, especially packages that backport
|
||||
# functionality to 2.x from 3.x
|
||||
for item in $out/lib/python${majorVersion}/test/*; do
|
||||
if [[ "$item" != */test_support.py* ]]; then
|
||||
rm -rf "$item"
|
||||
fi
|
||||
done
|
||||
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
|
||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
|
||||
mv $out/share/man/man1/{python.1,python2.6.1}
|
||||
ln -s $out/share/man/man1/{python2.6.1,python.1}
|
||||
|
||||
paxmark E $out/bin/python${majorVersion}
|
||||
|
||||
${ optionalString includeModules "$out/bin/python ./setup.py build_ext"}
|
||||
'';
|
||||
|
||||
passthru = rec {
|
||||
inherit zlibSupport;
|
||||
isPy2 = true;
|
||||
isPy26 = true;
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python26Packages; };
|
||||
libPrefix = "python${majorVersion}";
|
||||
executable = libPrefix;
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
homepage = "http://python.org";
|
||||
description = "A high-level dynamically-typed programming language";
|
||||
longDescription = ''
|
||||
Python is a remarkably powerful dynamic programming language that
|
||||
is used in a wide variety of application domains. Some of its key
|
||||
distinguishing features include: clear, readable syntax; strong
|
||||
introspection capabilities; intuitive object orientation; natural
|
||||
expression of procedural code; full modularity, supporting
|
||||
hierarchical packages; exception-based error handling; and very
|
||||
high level dynamic data types.
|
||||
'';
|
||||
license = stdenv.lib.licenses.psfl;
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
maintainers = with stdenv.lib.maintainers; [ chaoflow domenkozar ];
|
||||
# If you want to use Python 2.6, remove "broken = true;" at your own
|
||||
# risk. Python 2.6 has known security vulnerabilities is not receiving
|
||||
# security updates as of October 2013.
|
||||
broken = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
# This function builds a Python module included in the main Python
|
||||
# distribution in a separate derivation.
|
||||
buildInternalPythonModule =
|
||||
{ moduleName
|
||||
, internalName ? "_" + moduleName
|
||||
, deps
|
||||
}:
|
||||
if includeModules then null else stdenv.mkDerivation rec {
|
||||
name = "python-${moduleName}-${python.version}";
|
||||
|
||||
inherit src patches preConfigure configureFlags;
|
||||
|
||||
buildInputs = [ python ] ++ deps;
|
||||
|
||||
inherit (mkPaths buildInputs) C_INCLUDE_PATH LIBRARY_PATH;
|
||||
|
||||
buildPhase =
|
||||
''
|
||||
substituteInPlace setup.py --replace 'self.extensions = extensions' \
|
||||
'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]'
|
||||
|
||||
python ./setup.py build_ext
|
||||
[ -z "$(find build -name '*_failed.so' -print)" ]
|
||||
'';
|
||||
|
||||
installPhase =
|
||||
''
|
||||
dest=$out/lib/${python.libPrefix}/site-packages
|
||||
mkdir -p $dest
|
||||
cp -p $(find . -name "*.${if stdenv.isCygwin then "dll" else "so"}") $dest/
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
# The Python modules included in the main Python distribution, built
|
||||
# as separate derivations.
|
||||
modules = {
|
||||
|
||||
bsddb = buildInternalPythonModule {
|
||||
moduleName = "bsddb";
|
||||
deps = [ db ];
|
||||
};
|
||||
|
||||
crypt = buildInternalPythonModule {
|
||||
moduleName = "crypt";
|
||||
internalName = "crypt";
|
||||
deps = optional (stdenv ? glibc) stdenv.glibc;
|
||||
};
|
||||
|
||||
curses = buildInternalPythonModule {
|
||||
moduleName = "curses";
|
||||
deps = [ ncurses ];
|
||||
};
|
||||
|
||||
curses_panel = buildInternalPythonModule {
|
||||
moduleName = "curses_panel";
|
||||
deps = [ ncurses modules.curses ];
|
||||
};
|
||||
|
||||
gdbm = buildInternalPythonModule {
|
||||
moduleName = "gdbm";
|
||||
internalName = "gdbm";
|
||||
deps = [ gdbm ];
|
||||
};
|
||||
|
||||
sqlite3 = buildInternalPythonModule {
|
||||
moduleName = "sqlite3";
|
||||
deps = [ sqlite ];
|
||||
};
|
||||
|
||||
tkinter = buildInternalPythonModule {
|
||||
moduleName = "tkinter";
|
||||
deps = [ tcl tk xlibsWrapper ];
|
||||
};
|
||||
|
||||
readline = buildInternalPythonModule {
|
||||
moduleName = "readline";
|
||||
internalName = "readline";
|
||||
deps = [ readline ];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
in python // { inherit modules; }
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -ru -x '*~' Python-2.7.1-orig/Python/import.c Python-2.7.1/Python/import.c
|
||||
--- Python-2.7.1-orig/Python/import.c 2010-05-20 20:37:55.000000000 +0200
|
||||
+++ Python-2.7.1/Python/import.c 2011-01-04 15:55:11.000000000 +0100
|
||||
@@ -751,7 +751,7 @@
|
||||
return NULL;
|
||||
}
|
||||
pyc_mtime = PyMarshal_ReadLongFromFile(fp);
|
||||
- if (pyc_mtime != mtime) {
|
||||
+ if (pyc_mtime != mtime && mtime != 1) {
|
||||
if (Py_VerboseFlag)
|
||||
PySys_WriteStderr("# %s has bad mtime\n", cpathname);
|
||||
fclose(fp);
|
||||
@@ -0,0 +1,37 @@
|
||||
diff -up Python-2.7/Makefile.pre.in.fix-parallel-make Python-2.7/Makefile.pre.in
|
||||
--- Python-2.7/Makefile.pre.in.fix-parallel-make 2010-07-22 15:01:39.567996932 -0400
|
||||
+++ Python-2.7/Makefile.pre.in 2010-07-22 15:47:02.437998509 -0400
|
||||
@@ -207,6 +207,7 @@ SIGNAL_OBJS= @SIGNAL_OBJS@
|
||||
|
||||
##########################################################################
|
||||
# Grammar
|
||||
+GRAMMAR_STAMP= $(srcdir)/grammar-stamp
|
||||
GRAMMAR_H= $(srcdir)/Include/graminit.h
|
||||
GRAMMAR_C= $(srcdir)/Python/graminit.c
|
||||
GRAMMAR_INPUT= $(srcdir)/Grammar/Grammar
|
||||
@@ -530,10 +531,24 @@ Modules/getpath.o: $(srcdir)/Modules/get
|
||||
Modules/python.o: $(srcdir)/Modules/python.c
|
||||
$(MAINCC) -c $(PY_CFLAGS) -o $@ $(srcdir)/Modules/python.c
|
||||
|
||||
+# GNU "make" interprets rules with two dependents as two copies of the rule.
|
||||
+#
|
||||
+# In a parallel build this can lead to pgen being run twice, once for each of
|
||||
+# GRAMMAR_H and GRAMMAR_C, leading to race conditions in which the compiler
|
||||
+# reads a partially-overwritten copy of one of these files, leading to syntax
|
||||
+# errors (or linker errors if the fragment happens to be syntactically valid C)
|
||||
+#
|
||||
+# See http://www.gnu.org/software/hello/manual/automake/Multiple-Outputs.html
|
||||
+# for more information
|
||||
+#
|
||||
+# Introduce ".grammar-stamp" as a contrived single output from PGEN to avoid
|
||||
+# this:
|
||||
+$(GRAMMAR_H) $(GRAMMAR_C): $(GRAMMAR_STAMP)
|
||||
|
||||
-$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
|
||||
+$(GRAMMAR_STAMP): $(PGEN) $(GRAMMAR_INPUT)
|
||||
-@$(INSTALL) -d Include
|
||||
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
|
||||
+ touch $(GRAMMAR_STAMP)
|
||||
|
||||
$(PGEN): $(PGENOBJS)
|
||||
$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
|
||||
@@ -0,0 +1,27 @@
|
||||
diff -rc Python-2.4.4-orig/setup.py Python-2.4.4/setup.py
|
||||
*** Python-2.4.4-orig/setup.py 2006-10-08 19:41:25.000000000 +0200
|
||||
--- Python-2.4.4/setup.py 2007-05-27 16:04:54.000000000 +0200
|
||||
***************
|
||||
*** 279,288 ****
|
||||
# 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']
|
||||
--- 279,289 ----
|
||||
# Check for AtheOS which has libraries in non-standard locations
|
||||
if platform == 'atheos':
|
||||
lib_dirs += ['/system/libs', '/atheos/autolnk/lib']
|
||||
inc_dirs += ['/system/include', '/atheos/autolnk/include']
|
||||
|
||||
+ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
|
||||
+ 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']
|
||||
@@ -0,0 +1,15 @@
|
||||
addPythonPath() {
|
||||
addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python2.6/site-packages
|
||||
}
|
||||
|
||||
toPythonPath() {
|
||||
local paths="$1"
|
||||
local result=
|
||||
for i in $paths; do
|
||||
p="$i/lib/python2.6/site-packages"
|
||||
result="${result}${result:+:}$p"
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
envHooks+=(addPythonPath)
|
||||
@@ -0,0 +1,34 @@
|
||||
--- origsrc/Lib/ctypes/util.py 2007-09-14 15:05:26.000000000 -0500
|
||||
+++ src/Lib/ctypes/util.py 2008-11-25 17:54:47.319296200 -0600
|
||||
@@ -41,6 +41,20 @@
|
||||
continue
|
||||
return None
|
||||
|
||||
+elif sys.platform == "cygwin":
|
||||
+ def find_library(name):
|
||||
+ for libdir in ['/usr/lib', '/usr/local/lib']:
|
||||
+ for libext in ['lib%s.dll.a' % name, 'lib%s.a' % name]:
|
||||
+ implib = os.path.join(libdir, libext)
|
||||
+ if not os.path.exists(implib):
|
||||
+ continue
|
||||
+ cmd = "dlltool -I " + implib + " 2>/dev/null"
|
||||
+ res = os.popen(cmd).read().replace("\n","")
|
||||
+ if not res:
|
||||
+ continue
|
||||
+ return res
|
||||
+ return None
|
||||
+
|
||||
elif os.name == "posix":
|
||||
# Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
|
||||
import re, tempfile, errno
|
||||
@@ -157,6 +173,10 @@
|
||||
print cdll.LoadLibrary("libcrypto.dylib")
|
||||
print cdll.LoadLibrary("libSystem.dylib")
|
||||
print cdll.LoadLibrary("System.framework/System")
|
||||
+ elif sys.platform == "cygwin":
|
||||
+ print cdll.LoadLibrary("cygbz2-1.dll")
|
||||
+ print find_library("crypt")
|
||||
+ print cdll.LoadLibrary("cygcrypt-0.dll")
|
||||
else:
|
||||
print cdll.LoadLibrary("libm.so")
|
||||
print cdll.LoadLibrary("libcrypt.so")
|
||||
@@ -0,0 +1,27 @@
|
||||
--- origsrc/setup.py 2008-02-04 17:41:02.000000000 -0600
|
||||
+++ src/setup.py 2008-07-02 02:11:28.671875000 -0500
|
||||
@@ -1277,12 +1279,6 @@
|
||||
include_dirs.append('/usr/X11/include')
|
||||
added_lib_dirs.append('/usr/X11/lib')
|
||||
|
||||
- # If Cygwin, then verify that X is installed before proceeding
|
||||
- if host_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'):
|
||||
@@ -1300,9 +1296,8 @@
|
||||
if host_platform in ['aix3', 'aix4']:
|
||||
libs.append('ld')
|
||||
|
||||
- # Finally, link with the X11 libraries (not appropriate on cygwin)
|
||||
- if host_platform != "cygwin":
|
||||
- libs.append('X11')
|
||||
+ # Finally, link with the X11 libraries
|
||||
+ libs.append('X11')
|
||||
|
||||
ext = Extension('_tkinter', ['_tkinter.c', 'tkappinit.c'],
|
||||
define_macros=[('WITH_APPINIT', 1)] + defs,
|
||||
@@ -0,0 +1,13 @@
|
||||
--- origsrc/Modules/_ssl.c 2009-01-26 10:55:41.000000000 -0600
|
||||
+++ src/Modules/_ssl.c 2009-08-20 00:04:59.346816700 -0500
|
||||
@@ -15,6 +15,10 @@
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+#undef WITH_THREAD
|
||||
+#endif
|
||||
+
|
||||
#ifdef WITH_THREAD
|
||||
#include "pythread.h"
|
||||
#define PySSL_BEGIN_ALLOW_THREADS { \
|
||||
@@ -0,0 +1,41 @@
|
||||
--- Python-2.6.5.orig/Modules/selectmodule.c 2012-02-02 22:35:21.835125000 -0500
|
||||
+++ Python-2.6.5/Modules/selectmodule.c 2012-02-02 22:41:41.210125000 -0500
|
||||
@@ -6,6 +6,21 @@
|
||||
>= 0.
|
||||
*/
|
||||
|
||||
+/* Windows #defines FD_SETSIZE to 64 if FD_SETSIZE isn't already defined.
|
||||
+ 64 is too small (too many people have bumped into that limit).
|
||||
+ Here we boost it.
|
||||
+
|
||||
+ Cygwin also defines FD_SETSIZE to 64, so also increase the limit on
|
||||
+ Cygwin. We must do this before sys/types.h is included, which otherwise
|
||||
+ sets FD_SETSIZE to the default.
|
||||
+
|
||||
+ Users who want even more than the boosted limit should #define
|
||||
+ FD_SETSIZE higher before this; e.g., via compiler /D switch.
|
||||
+*/
|
||||
+#if (defined(MS_WINDOWS) || defined(__CYGWIN__)) && !defined(FD_SETSIZE)
|
||||
+#define FD_SETSIZE 512
|
||||
+#endif
|
||||
+
|
||||
#include "Python.h"
|
||||
#include <structmember.h>
|
||||
|
||||
@@ -16,16 +31,6 @@
|
||||
#undef HAVE_BROKEN_POLL
|
||||
#endif
|
||||
|
||||
-/* Windows #defines FD_SETSIZE to 64 if FD_SETSIZE isn't already defined.
|
||||
- 64 is too small (too many people have bumped into that limit).
|
||||
- Here we boost it.
|
||||
- Users who want even more than the boosted limit should #define
|
||||
- FD_SETSIZE higher before this; e.g., via compiler /D switch.
|
||||
-*/
|
||||
-#if defined(MS_WINDOWS) && !defined(FD_SETSIZE)
|
||||
-#define FD_SETSIZE 512
|
||||
-#endif
|
||||
-
|
||||
#if defined(HAVE_POLL_H)
|
||||
#include <poll.h>
|
||||
#elif defined(HAVE_SYS_POLL_H)
|
||||
@@ -0,0 +1,11 @@
|
||||
--- origsrc/Include/pyerrors.h 2008-06-08 23:58:54.000000000 -0500
|
||||
+++ src/Include/pyerrors.h 2010-05-12 04:19:31.535297200 -0500
|
||||
@@ -232,7 +232,7 @@ PyAPI_FUNC(int) PyErr_CheckSignals(void)
|
||||
PyAPI_FUNC(void) PyErr_SetInterrupt(void);
|
||||
|
||||
/* In signalmodule.c */
|
||||
-int PySignal_SetWakeupFd(int fd);
|
||||
+PyAPI_FUNC(int) PySignal_SetWakeupFd(int fd);
|
||||
|
||||
/* Support for adding program text to SyntaxErrors */
|
||||
PyAPI_FUNC(void) PyErr_SyntaxLocation(const char *, int);
|
||||
@@ -0,0 +1,16 @@
|
||||
--- origsrc/Include/py_curses.h 2009-09-06 16:23:05.000000000 -0500
|
||||
+++ src/Include/py_curses.h 2010-04-14 15:21:23.008971400 -0500
|
||||
@@ -17,6 +17,13 @@
|
||||
#define NCURSES_OPAQUE 0
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+/* the following define is necessary for Cygwin; without it, the
|
||||
+ Cygwin-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python
|
||||
+ can't get at the WINDOW flags field. */
|
||||
+#define NCURSES_INTERNALS
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
#ifdef __FreeBSD__
|
||||
/*
|
||||
** On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards
|
||||
@@ -0,0 +1,27 @@
|
||||
--- origsrc/setup.py.orig 2012-11-27 10:20:47.442395900 -0500
|
||||
+++ src/setup.py 2012-11-27 10:53:15.583020900 -0500
|
||||
@@ -1141,7 +1141,7 @@
|
||||
|
||||
dbm_order = ['gdbm']
|
||||
# The standard Unix dbm module:
|
||||
- if host_platform not in ['cygwin']:
|
||||
+ if host_platform not in ['win32']:
|
||||
config_args = [arg.strip("'")
|
||||
for arg in sysconfig.get_config_var("CONFIG_ARGS").split()]
|
||||
dbm_args = [arg for arg in config_args
|
||||
@@ -1192,6 +1192,15 @@
|
||||
],
|
||||
libraries = gdbm_libs)
|
||||
break
|
||||
+ if find_file("ndbm.h", inc_dirs, []) is not None:
|
||||
+ print("building dbm using gdbm")
|
||||
+ dbmext = Extension(
|
||||
+ 'dbm', ['dbmmodule.c'],
|
||||
+ define_macros=[
|
||||
+ ('HAVE_NDBM_H', None),
|
||||
+ ],
|
||||
+ libraries = gdbm_libs)
|
||||
+ break
|
||||
elif cand == "bdb":
|
||||
if db_incs is not None:
|
||||
print "building dbm using bdb"
|
||||
@@ -0,0 +1,10 @@
|
||||
--- origsrc/Lib/distutils/unixccompiler.py.orig 2012-11-27 07:44:15.409993500 -0500
|
||||
+++ src/Lib/distutils/unixccompiler.py 2012-11-27 08:09:57.801770900 -0500
|
||||
@@ -141,6 +141,7 @@
|
||||
static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s"
|
||||
if sys.platform == "cygwin":
|
||||
exe_extension = ".exe"
|
||||
+ dylib_lib_extension = ".dll.a"
|
||||
|
||||
def preprocess(self, source,
|
||||
output_file=None, macros=None, include_dirs=None,
|
||||
@@ -0,0 +1,31 @@
|
||||
--- origsrc/Modules/getpath.c.orig 2012-11-27 12:07:56.098645900 -0500
|
||||
+++ src/Modules/getpath.c 2012-11-27 12:10:11.254895900 -0500
|
||||
@@ -436,6 +436,28 @@
|
||||
if (isxfile(progpath))
|
||||
break;
|
||||
|
||||
+#ifdef __CYGWIN__
|
||||
+ /*
|
||||
+ * Cygwin automatically removes the ".exe" extension from argv[0]
|
||||
+ * to make programs feel like they are in a more Unix-like
|
||||
+ * environment. Unfortunately, this can make it problemmatic for
|
||||
+ * Cygwin to distinguish between a directory and an executable with
|
||||
+ * the same name excluding the ".exe" extension. For example, the
|
||||
+ * Cygwin Python build directory has a "Python" directory and a
|
||||
+ * "python.exe" executable. This causes isxfile() to erroneously
|
||||
+ * return false. If isdir() returns true and there is enough space
|
||||
+ * to append the ".exe" extension, then we try again with the
|
||||
+ * extension appended.
|
||||
+ */
|
||||
+#define EXE ".exe"
|
||||
+ if (isdir(progpath) && strlen(progpath) + strlen(EXE) <= MAXPATHLEN)
|
||||
+ {
|
||||
+ strcat(progpath, EXE);
|
||||
+ if (isxfile(progpath))
|
||||
+ break;
|
||||
+ }
|
||||
+#endif /* __CYGWIN__ */
|
||||
+
|
||||
if (!delim) {
|
||||
progpath[0] = '\0';
|
||||
break;
|
||||
@@ -0,0 +1,11 @@
|
||||
--- origsrc/setup.py.orig 2012-11-27 09:28:34.051770900 -0500
|
||||
+++ src/setup.py 2012-11-27 09:28:47.239270900 -0500
|
||||
@@ -470,7 +470,7 @@
|
||||
|
||||
# Check for MacOS X, which doesn't need libm.a at all
|
||||
math_libs = ['m']
|
||||
- if host_platform in ['darwin', 'beos']:
|
||||
+ if host_platform in ['darwin', 'beos', 'cygwin']:
|
||||
math_libs = []
|
||||
|
||||
# XXX Omitted modules: gl, pure, dl, SGI-specific modules
|
||||
284
pkgs/development/interpreters/python/cpython/2.7/default.nix
Normal file
284
pkgs/development/interpreters/python/cpython/2.7/default.nix
Normal file
@@ -0,0 +1,284 @@
|
||||
{ stdenv, fetchurl, self, callPackage, python27Packages
|
||||
, bzip2, openssl, gettext
|
||||
, less
|
||||
|
||||
, includeModules ? false
|
||||
|
||||
, db, gdbm, ncurses, sqlite, readline
|
||||
|
||||
, tcl ? null, tk ? null, xlibsWrapper ? null, libX11 ? null, x11Support ? !stdenv.isCygwin
|
||||
, zlib ? null, zlibSupport ? true
|
||||
, expat, libffi
|
||||
|
||||
, CF, configd
|
||||
}:
|
||||
|
||||
assert zlibSupport -> zlib != null;
|
||||
assert x11Support -> tcl != null
|
||||
&& tk != null
|
||||
&& xlibsWrapper != null
|
||||
&& libX11 != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
majorVersion = "2.7";
|
||||
version = "${majorVersion}.12";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.xz";
|
||||
sha256 = "0y7rl603vmwlxm6ilkhc51rx2mfj14ckcz40xxgs0ljnvlhp30yp";
|
||||
};
|
||||
|
||||
patches =
|
||||
[ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff.
|
||||
./search-path.patch
|
||||
|
||||
# Python recompiles a Python if the mtime stored *in* the
|
||||
# pyc/pyo file differs from the mtime of the source file. This
|
||||
# doesn't work in Nix because Nix changes the mtime of files in
|
||||
# the Nix store to 1. So treat that as a special case.
|
||||
./nix-store-mtime.patch
|
||||
|
||||
# patch python to put zero timestamp into pyc
|
||||
# if DETERMINISTIC_BUILD env var is set
|
||||
./deterministic-build.patch
|
||||
|
||||
./properly-detect-curses.patch
|
||||
] ++ optionals stdenv.isLinux [
|
||||
|
||||
# Disable the use of ldconfig in ctypes.util.find_library (since
|
||||
# ldconfig doesn't work on NixOS), and don't use
|
||||
# ctypes.util.find_library during the loading of the uuid module
|
||||
# (since it will do a futile invocation of gcc (!) to find
|
||||
# libuuid, slowing down program startup a lot).
|
||||
./no-ldconfig.patch
|
||||
|
||||
] ++ optionals stdenv.isCygwin [
|
||||
./2.5.2-ctypes-util-find_library.patch
|
||||
./2.5.2-tkinter-x11.patch
|
||||
./2.6.2-ssl-threads.patch
|
||||
./2.6.5-export-PySignal_SetWakeupFd.patch
|
||||
./2.6.5-FD_SETSIZE.patch
|
||||
./2.6.5-ncurses-abi6.patch
|
||||
./2.7.3-dbm.patch
|
||||
./2.7.3-dylib.patch
|
||||
./2.7.3-getpath-exe-extension.patch
|
||||
./2.7.3-no-libm.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
# Purity.
|
||||
for i in /usr /sw /opt /pkg; do
|
||||
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||
done
|
||||
'' + optionalString (stdenv ? cc && stdenv.cc.libc != null) ''
|
||||
for i in Lib/plat-*/regen; do
|
||||
substituteInPlace $i --replace /usr/include/ ${stdenv.cc.libc}/include/
|
||||
done
|
||||
'' + optionalString stdenv.isDarwin ''
|
||||
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
||||
substituteInPlace Lib/multiprocessing/__init__.py \
|
||||
--replace 'os.popen(comm)' 'os.popen("nproc")'
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
"--enable-shared"
|
||||
"--with-threads"
|
||||
"--enable-unicode=ucs4"
|
||||
] ++ optionals stdenv.isCygwin [
|
||||
"--with-system-ffi"
|
||||
"--with-system-expat"
|
||||
"ac_cv_func_bind_textdomain_codeset=yes"
|
||||
] ++ optionals stdenv.isDarwin [
|
||||
"--disable-toolbox-glue"
|
||||
];
|
||||
|
||||
postConfigure = if stdenv.isCygwin then ''
|
||||
sed -i Makefile -e 's,PYTHONPATH="$(srcdir),PYTHONPATH="$(abs_srcdir),'
|
||||
'' else null;
|
||||
|
||||
buildInputs =
|
||||
optional (stdenv ? cc && stdenv.cc.libc != null) stdenv.cc.libc ++
|
||||
[ bzip2 openssl ]
|
||||
++ optionals stdenv.isCygwin [ expat libffi ]
|
||||
++ optionals includeModules (
|
||||
[ db gdbm ncurses sqlite readline
|
||||
] ++ optionals x11Support [ tcl tk xlibsWrapper libX11 ]
|
||||
)
|
||||
++ optional zlibSupport zlib
|
||||
++ optional stdenv.isDarwin CF;
|
||||
|
||||
propagatedBuildInputs = [ less ] ++ optional stdenv.isDarwin configd;
|
||||
|
||||
mkPaths = paths: {
|
||||
C_INCLUDE_PATH = makeSearchPathOutput "dev" "include" paths;
|
||||
LIBRARY_PATH = makeLibraryPath paths;
|
||||
};
|
||||
|
||||
# Build the basic Python interpreter without modules that have
|
||||
# external dependencies.
|
||||
python = stdenv.mkDerivation {
|
||||
name = "python-${version}";
|
||||
pythonVersion = majorVersion;
|
||||
|
||||
inherit majorVersion version src patches buildInputs propagatedBuildInputs
|
||||
preConfigure configureFlags;
|
||||
|
||||
LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s";
|
||||
inherit (mkPaths buildInputs) C_INCLUDE_PATH LIBRARY_PATH;
|
||||
|
||||
NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2";
|
||||
DETERMINISTIC_BUILD = 1;
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
postInstall =
|
||||
''
|
||||
# needed for some packages, especially packages that backport
|
||||
# functionality to 2.x from 3.x
|
||||
for item in $out/lib/python${majorVersion}/test/*; do
|
||||
if [[ "$item" != */test_support.py* ]]; then
|
||||
rm -rf "$item"
|
||||
else
|
||||
echo $item
|
||||
fi
|
||||
done
|
||||
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb
|
||||
ln -s $out/lib/python${majorVersion}/pdb.py $out/bin/pdb${majorVersion}
|
||||
ln -s $out/share/man/man1/{python2.7.1.gz,python.1.gz}
|
||||
|
||||
paxmark E $out/bin/python${majorVersion}
|
||||
|
||||
${optionalString includeModules "$out/bin/python ./setup.py build_ext"}
|
||||
|
||||
rm "$out"/lib/python*/plat-*/regen # refers to glibc.dev
|
||||
'';
|
||||
|
||||
passthru = rec {
|
||||
inherit zlibSupport;
|
||||
isPy2 = true;
|
||||
isPy27 = true;
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python27Packages; };
|
||||
libPrefix = "python${majorVersion}";
|
||||
executable = libPrefix;
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
homepage = "http://python.org";
|
||||
description = "A high-level dynamically-typed programming language";
|
||||
longDescription = ''
|
||||
Python is a remarkably powerful dynamic programming language that
|
||||
is used in a wide variety of application domains. Some of its key
|
||||
distinguishing features include: clear, readable syntax; strong
|
||||
introspection capabilities; intuitive object orientation; natural
|
||||
expression of procedural code; full modularity, supporting
|
||||
hierarchical packages; exception-based error handling; and very
|
||||
high level dynamic data types.
|
||||
'';
|
||||
license = stdenv.lib.licenses.psfl;
|
||||
platforms = stdenv.lib.platforms.all;
|
||||
maintainers = with stdenv.lib.maintainers; [ chaoflow domenkozar ];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
# This function builds a Python module included in the main Python
|
||||
# distribution in a separate derivation.
|
||||
buildInternalPythonModule =
|
||||
{ moduleName
|
||||
, internalName ? "_" + moduleName
|
||||
, deps
|
||||
}:
|
||||
if includeModules then null else stdenv.mkDerivation rec {
|
||||
name = "python-${moduleName}-${python.version}";
|
||||
|
||||
inherit src patches preConfigure postConfigure configureFlags;
|
||||
|
||||
buildInputs = [ python ] ++ deps;
|
||||
|
||||
# We need to set this for python.buildEnv
|
||||
pythonPath = [];
|
||||
|
||||
inherit (mkPaths buildInputs) C_INCLUDE_PATH LIBRARY_PATH;
|
||||
|
||||
# non-python gdbm has a libintl dependency on i686-cygwin, not on x86_64-cygwin
|
||||
buildPhase = (if (stdenv.system == "i686-cygwin" && moduleName == "gdbm") then ''
|
||||
sed -i setup.py -e "s:libraries = \['gdbm'\]:libraries = ['gdbm', 'intl']:"
|
||||
'' else '''') + ''
|
||||
substituteInPlace setup.py --replace 'self.extensions = extensions' \
|
||||
'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]'
|
||||
|
||||
python ./setup.py build_ext
|
||||
[ -z "$(find build -name '*_failed.so' -print)" ]
|
||||
'';
|
||||
|
||||
installPhase =
|
||||
''
|
||||
dest=$out/lib/${python.libPrefix}/site-packages
|
||||
mkdir -p $dest
|
||||
cp -p $(find . -name "*.${if stdenv.isCygwin then "dll" else "so"}") $dest/
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
# The Python modules included in the main Python distribution, built
|
||||
# as separate derivations.
|
||||
modules = {
|
||||
|
||||
bsddb = buildInternalPythonModule {
|
||||
moduleName = "bsddb";
|
||||
deps = [ db ];
|
||||
};
|
||||
|
||||
curses = buildInternalPythonModule {
|
||||
moduleName = "curses";
|
||||
deps = [ ncurses ];
|
||||
};
|
||||
|
||||
curses_panel = buildInternalPythonModule {
|
||||
moduleName = "curses_panel";
|
||||
deps = [ ncurses modules.curses ];
|
||||
};
|
||||
|
||||
crypt = buildInternalPythonModule {
|
||||
moduleName = "crypt";
|
||||
internalName = "crypt";
|
||||
deps = optional (stdenv ? glibc) stdenv.glibc;
|
||||
};
|
||||
|
||||
gdbm = buildInternalPythonModule {
|
||||
moduleName = "gdbm";
|
||||
internalName = "gdbm";
|
||||
deps = [ gdbm ] ++ stdenv.lib.optional stdenv.isCygwin gettext;
|
||||
};
|
||||
|
||||
sqlite3 = buildInternalPythonModule {
|
||||
moduleName = "sqlite3";
|
||||
deps = [ sqlite ];
|
||||
};
|
||||
|
||||
} // optionalAttrs x11Support {
|
||||
|
||||
tkinter = if stdenv.isCygwin then null else (buildInternalPythonModule {
|
||||
moduleName = "tkinter";
|
||||
deps = [ tcl tk xlibsWrapper libX11 ];
|
||||
});
|
||||
|
||||
} // {
|
||||
|
||||
readline = buildInternalPythonModule {
|
||||
moduleName = "readline";
|
||||
internalName = "readline";
|
||||
deps = [ readline ];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
in python // { inherit modules; }
|
||||
@@ -0,0 +1,36 @@
|
||||
diff -ur orig/Lib/py_compile.py new/Lib/py_compile.py
|
||||
--- orig/Lib/py_compile.py
|
||||
+++ new/Lib/py_compile.py
|
||||
@@ -122,7 +122,10 @@
|
||||
cfile = file + (__debug__ and 'c' or 'o')
|
||||
with open(cfile, 'wb') as fc:
|
||||
fc.write('\0\0\0\0')
|
||||
- wr_long(fc, timestamp)
|
||||
+ if "DETERMINISTIC_BUILD" in os.environ:
|
||||
+ fc.write('\0\0\0\0')
|
||||
+ else:
|
||||
+ wr_long(fc, timestamp)
|
||||
marshal.dump(codeobject, fc)
|
||||
fc.flush()
|
||||
fc.seek(0, 0)
|
||||
diff -ur orig/Python/import.c new/Python/import.c
|
||||
--- orig/Python/import.c
|
||||
+++ new/Python/import.c
|
||||
@@ -939,10 +939,12 @@
|
||||
return;
|
||||
}
|
||||
/* Now write the true mtime (as a 32-bit field) */
|
||||
- fseek(fp, 4L, 0);
|
||||
- assert(mtime <= 0xFFFFFFFF);
|
||||
- PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
|
||||
- fflush(fp);
|
||||
+ if (Py_GETENV("DETERMINISTIC_BUILD") == NULL) {
|
||||
+ fseek(fp, 4L, 0);
|
||||
+ assert(mtime <= 0xFFFFFFFF);
|
||||
+ PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
|
||||
+ fflush(fp);
|
||||
+ }
|
||||
fclose(fp);
|
||||
if (Py_VerboseFlag)
|
||||
PySys_WriteStderr("# wrote %s\n", cpathname);
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
diff -ru -x '*~' Python-2.7.1-orig/Python/import.c Python-2.7.1/Python/import.c
|
||||
--- Python-2.7.1-orig/Python/import.c 2010-05-20 20:37:55.000000000 +0200
|
||||
+++ Python-2.7.1/Python/import.c 2011-01-04 15:55:11.000000000 +0100
|
||||
@@ -751,7 +751,7 @@
|
||||
return NULL;
|
||||
}
|
||||
pyc_mtime = PyMarshal_ReadLongFromFile(fp);
|
||||
- if (pyc_mtime != mtime) {
|
||||
+ if (pyc_mtime != mtime && mtime != 1) {
|
||||
if (Py_VerboseFlag)
|
||||
PySys_WriteStderr("# %s has bad mtime\n", cpathname);
|
||||
fclose(fp);
|
||||
@@ -0,0 +1,99 @@
|
||||
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
||||
index b2c514d..a6eca81 100644
|
||||
--- a/Lib/ctypes/util.py
|
||||
+++ b/Lib/ctypes/util.py
|
||||
@@ -207,31 +207,7 @@ elif os.name == "posix":
|
||||
else:
|
||||
|
||||
def _findSoname_ldconfig(name):
|
||||
- import struct
|
||||
- if struct.calcsize('l') == 4:
|
||||
- machine = os.uname()[4] + '-32'
|
||||
- else:
|
||||
- machine = os.uname()[4] + '-64'
|
||||
- mach_map = {
|
||||
- 'x86_64-64': 'libc6,x86-64',
|
||||
- 'ppc64-64': 'libc6,64bit',
|
||||
- 'sparc64-64': 'libc6,64bit',
|
||||
- 's390x-64': 'libc6,64bit',
|
||||
- 'ia64-64': 'libc6,IA-64',
|
||||
- }
|
||||
- abi_type = mach_map.get(machine, 'libc6')
|
||||
-
|
||||
- # XXX assuming GLIBC's ldconfig (with option -p)
|
||||
- expr = r'\s+(lib%s\.[^\s]+)\s+\(%s' % (re.escape(name), abi_type)
|
||||
- f = os.popen('LC_ALL=C LANG=C /sbin/ldconfig -p 2>/dev/null')
|
||||
- try:
|
||||
- data = f.read()
|
||||
- finally:
|
||||
- f.close()
|
||||
- res = re.search(expr, data)
|
||||
- if not res:
|
||||
- return None
|
||||
- return res.group(1)
|
||||
+ return None
|
||||
|
||||
def find_library(name):
|
||||
return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
|
||||
diff --git a/Lib/uuid.py b/Lib/uuid.py
|
||||
index 7432032..9829d18 100644
|
||||
--- a/Lib/uuid.py
|
||||
+++ b/Lib/uuid.py
|
||||
@@ -437,57 +437,7 @@ def _netbios_getnode():
|
||||
return ((bytes[0]<<40L) + (bytes[1]<<32L) + (bytes[2]<<24L) +
|
||||
(bytes[3]<<16L) + (bytes[4]<<8L) + bytes[5])
|
||||
|
||||
-# Thanks to Thomas Heller for ctypes and for his help with its use here.
|
||||
-
|
||||
-# If ctypes is available, use it to find system routines for UUID generation.
|
||||
_uuid_generate_time = _UuidCreate = None
|
||||
-try:
|
||||
- import ctypes, ctypes.util
|
||||
- import sys
|
||||
-
|
||||
- # The uuid_generate_* routines are provided by libuuid on at least
|
||||
- # Linux and FreeBSD, and provided by libc on Mac OS X.
|
||||
- _libnames = ['uuid']
|
||||
- if not sys.platform.startswith('win'):
|
||||
- _libnames.append('c')
|
||||
- for libname in _libnames:
|
||||
- try:
|
||||
- lib = ctypes.CDLL(ctypes.util.find_library(libname))
|
||||
- except:
|
||||
- continue
|
||||
- if hasattr(lib, 'uuid_generate_time'):
|
||||
- _uuid_generate_time = lib.uuid_generate_time
|
||||
- break
|
||||
- del _libnames
|
||||
-
|
||||
- # The uuid_generate_* functions are broken on MacOS X 10.5, as noted
|
||||
- # in issue #8621 the function generates the same sequence of values
|
||||
- # in the parent process and all children created using fork (unless
|
||||
- # those children use exec as well).
|
||||
- #
|
||||
- # Assume that the uuid_generate functions are broken from 10.5 onward,
|
||||
- # the test can be adjusted when a later version is fixed.
|
||||
- if sys.platform == 'darwin':
|
||||
- import os
|
||||
- if int(os.uname()[2].split('.')[0]) >= 9:
|
||||
- _uuid_generate_time = None
|
||||
-
|
||||
- # On Windows prior to 2000, UuidCreate gives a UUID containing the
|
||||
- # hardware address. On Windows 2000 and later, UuidCreate makes a
|
||||
- # random UUID and UuidCreateSequential gives a UUID containing the
|
||||
- # hardware address. These routines are provided by the RPC runtime.
|
||||
- # NOTE: at least on Tim's WinXP Pro SP2 desktop box, while the last
|
||||
- # 6 bytes returned by UuidCreateSequential are fixed, they don't appear
|
||||
- # to bear any relationship to the MAC address of any network device
|
||||
- # on the box.
|
||||
- try:
|
||||
- lib = ctypes.windll.rpcrt4
|
||||
- except:
|
||||
- lib = None
|
||||
- _UuidCreate = getattr(lib, 'UuidCreateSequential',
|
||||
- getattr(lib, 'UuidCreate', None))
|
||||
-except:
|
||||
- pass
|
||||
|
||||
def _unixdll_getnode():
|
||||
"""Get the hardware address on Unix using ctypes."""
|
||||
@@ -0,0 +1,116 @@
|
||||
From 6dc83db69b5e29d25ba6d73646ea2e9a1097848a Mon Sep 17 00:00:00 2001
|
||||
From: Roumen Petrov <local@example.net>
|
||||
Date: Sun, 19 Feb 2012 16:13:24 +0200
|
||||
Subject: [PATCH] CROSS-properly detect WINDOW _flags for different ncurses versions
|
||||
|
||||
---
|
||||
Include/py_curses.h | 5 +++++
|
||||
configure.ac | 40 ++++++++++++++++++++++++++++++++++++++--
|
||||
pyconfig.h.in | 6 ++++++
|
||||
3 files changed, 49 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Include/py_curses.h b/Include/py_curses.h
|
||||
index f2c08f6..a9b5260 100644
|
||||
--- a/Include/py_curses.h
|
||||
+++ b/Include/py_curses.h
|
||||
@@ -14,7 +14,9 @@
|
||||
/* the following define is necessary for OS X 10.6; without it, the
|
||||
Apple-supplied ncurses.h sets NCURSES_OPAQUE to 1, and then Python
|
||||
can't get at the WINDOW flags field. */
|
||||
+/* NOTE configure check if ncurses require such definition
|
||||
#define NCURSES_OPAQUE 0
|
||||
+*/
|
||||
#endif /* __APPLE__ */
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
@@ -57,9 +59,12 @@
|
||||
#ifdef HAVE_NCURSES_H
|
||||
/* configure was checking <curses.h>, but we will
|
||||
use <ncurses.h>, which has all these features. */
|
||||
+/* NOTE configure check for existence of flags
|
||||
+ * Also flags are visible only if WINDOW structure is not opaque
|
||||
#ifndef WINDOW_HAS_FLAGS
|
||||
#define WINDOW_HAS_FLAGS 1
|
||||
#endif
|
||||
+*/
|
||||
#ifndef MVWDELCH_IS_EXPRESSION
|
||||
#define MVWDELCH_IS_EXPRESSION 1
|
||||
#endif
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 0a3a186..75f5142 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4150,15 +4150,51 @@ then
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether WINDOW has _flags)
|
||||
-AC_CACHE_VAL(ac_cv_window_has_flags,
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <curses.h>]], [[
|
||||
WINDOW *w;
|
||||
w->_flags = 0;
|
||||
]])],
|
||||
[ac_cv_window_has_flags=yes],
|
||||
-[ac_cv_window_has_flags=no]))
|
||||
+[ac_cv_window_has_flags=no])
|
||||
AC_MSG_RESULT($ac_cv_window_has_flags)
|
||||
|
||||
+py_curses_window_is_opaque=no
|
||||
+if test no = $ac_cv_window_has_flags; then
|
||||
+ AC_MSG_CHECKING([whether WINDOW has _flags in non-opaque structure])
|
||||
+ AC_COMPILE_IFELSE([
|
||||
+ AC_LANG_PROGRAM([[
|
||||
+ #define NCURSES_OPAQUE 0
|
||||
+ #include <curses.h>
|
||||
+ ]],[[
|
||||
+ WINDOW *w;
|
||||
+ w->_flags = 0;
|
||||
+ ]])],
|
||||
+ [py_curses_window_is_opaque=yes])
|
||||
+ AC_MSG_RESULT([$py_curses_window_is_opaque])
|
||||
+fi
|
||||
+if test yes = $py_curses_window_is_opaque; then
|
||||
+ ac_cv_window_has_flags=yes
|
||||
+ AC_DEFINE([NCURSES_OPAQUE], [0], [Define to 0 if you have WINDOW _flags in non-opaque structure.])
|
||||
+fi
|
||||
+
|
||||
+py_curses_window_is_internal=no
|
||||
+if test no = $ac_cv_window_has_flags; then
|
||||
+ AC_MSG_CHECKING([whether WINDOW has _flags as internal structure])
|
||||
+ AC_COMPILE_IFELSE([
|
||||
+ AC_LANG_PROGRAM([[
|
||||
+ #define NCURSES_INTERNALS 1
|
||||
+ #include <curses.h>
|
||||
+ ]],[[
|
||||
+ WINDOW *w;
|
||||
+ w->_flags = 0;
|
||||
+ ]])],
|
||||
+ [py_curses_window_is_internal=yes])
|
||||
+ AC_MSG_RESULT([$py_curses_window_is_internal])
|
||||
+fi
|
||||
+if test yes = $py_curses_window_is_internal; then
|
||||
+ ac_cv_window_has_flags=yes
|
||||
+ AC_DEFINE([NCURSES_INTERNALS], [1], [Define to 1 if you have WINDOW _flags as internal structure.])
|
||||
+fi
|
||||
|
||||
if test "$ac_cv_window_has_flags" = yes
|
||||
then
|
||||
diff --git a/pyconfig.h.in b/pyconfig.h.in
|
||||
index 3ca3a4f..484c817 100644
|
||||
--- a/pyconfig.h.in
|
||||
+++ b/pyconfig.h.in
|
||||
@@ -1130,6 +1130,12 @@
|
||||
/* Define if mvwdelch in curses.h is an expression. */
|
||||
#undef MVWDELCH_IS_EXPRESSION
|
||||
|
||||
+/* Define to 1 if you have WINDOW _flags as internal structure. */
|
||||
+#undef NCURSES_INTERNALS
|
||||
+
|
||||
+/* Define to 0 if you have WINDOW _flags in non-opaque structure. */
|
||||
+#undef NCURSES_OPAQUE
|
||||
+
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
--
|
||||
1.6.4
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
diff -rc Python-2.4.4-orig/setup.py Python-2.4.4/setup.py
|
||||
*** Python-2.4.4-orig/setup.py 2006-10-08 19:41:25.000000000 +0200
|
||||
--- Python-2.4.4/setup.py 2007-05-27 16:04:54.000000000 +0200
|
||||
***************
|
||||
*** 279,288 ****
|
||||
# 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']
|
||||
--- 279,289 ----
|
||||
# Check for AtheOS which has libraries in non-standard locations
|
||||
if platform == 'atheos':
|
||||
lib_dirs += ['/system/libs', '/atheos/autolnk/lib']
|
||||
inc_dirs += ['/system/include', '/atheos/autolnk/include']
|
||||
|
||||
+ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep)
|
||||
+ 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']
|
||||
@@ -0,0 +1,15 @@
|
||||
addPythonPath() {
|
||||
addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python2.7/site-packages
|
||||
}
|
||||
|
||||
toPythonPath() {
|
||||
local paths="$1"
|
||||
local result=
|
||||
for i in $paths; do
|
||||
p="$i/lib/python2.7/site-packages"
|
||||
result="${result}${result:+:}$p"
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
envHooks+=(addPythonPath)
|
||||
118
pkgs/development/interpreters/python/cpython/3.3/default.nix
Normal file
118
pkgs/development/interpreters/python/cpython/3.3/default.nix
Normal file
@@ -0,0 +1,118 @@
|
||||
{ stdenv, fetchurl
|
||||
, bzip2
|
||||
, db
|
||||
, gdbm
|
||||
, less
|
||||
, libX11, xproto
|
||||
, lzma
|
||||
, ncurses
|
||||
, openssl
|
||||
, readline
|
||||
, sqlite
|
||||
, tcl, tk
|
||||
, zlib
|
||||
, callPackage
|
||||
, self
|
||||
, python33Packages
|
||||
}:
|
||||
|
||||
assert readline != null -> ncurses != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
majorVersion = "3.3";
|
||||
pythonVersion = majorVersion;
|
||||
version = "${majorVersion}.6";
|
||||
|
||||
buildInputs = filter (p: p != null) [
|
||||
zlib bzip2 lzma gdbm sqlite db readline ncurses openssl tcl tk libX11 xproto
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
less
|
||||
];
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "python3-${version}";
|
||||
pythonVersion = majorVersion;
|
||||
inherit majorVersion version;
|
||||
|
||||
inherit buildInputs;
|
||||
inherit propagatedBuildInputs;
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.xz";
|
||||
sha256 = "0gsxpgd5p4mwd01gw501vsyahncyw3h9836ypkr3y32kgazy89jj";
|
||||
};
|
||||
|
||||
NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s";
|
||||
|
||||
preConfigure = ''
|
||||
for i in /usr /sw /opt /pkg; do # improve purity
|
||||
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||
done
|
||||
${optionalString stdenv.isDarwin ''export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -msse2"''}
|
||||
|
||||
configureFlagsArray=( --enable-shared --with-threads
|
||||
CPPFLAGS="${concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs)}"
|
||||
LDFLAGS="${concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs)}"
|
||||
LIBS="${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}"
|
||||
)
|
||||
'';
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
postInstall = ''
|
||||
# needed for some packages, especially packages that backport functionality
|
||||
# to 2.x from 3.x
|
||||
for item in $out/lib/python${majorVersion}/test/*; do
|
||||
if [[ "$item" != */test_support.py* ]]; then
|
||||
rm -rf "$item"
|
||||
else
|
||||
echo $item
|
||||
fi
|
||||
done
|
||||
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||
ln -s "$out/include/python${majorVersion}m" "$out/include/python${majorVersion}"
|
||||
paxmark E $out/bin/python${majorVersion}
|
||||
'';
|
||||
|
||||
passthru = rec {
|
||||
zlibSupport = zlib != null;
|
||||
sqliteSupport = sqlite != null;
|
||||
dbSupport = db != null;
|
||||
readlineSupport = readline != null;
|
||||
opensslSupport = openssl != null;
|
||||
tkSupport = (tk != null) && (tcl != null) && (libX11 != null) && (xproto != null);
|
||||
libPrefix = "python${majorVersion}";
|
||||
executable = "python3.3m";
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python33Packages; };
|
||||
isPy3 = true;
|
||||
isPy33 = true;
|
||||
is_py3k = true; # deprecated
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
homepage = http://python.org;
|
||||
description = "A high-level dynamically-typed programming language";
|
||||
longDescription = ''
|
||||
Python is a remarkably powerful dynamic programming language that
|
||||
is used in a wide variety of application domains. Some of its key
|
||||
distinguishing features include: clear, readable syntax; strong
|
||||
introspection capabilities; intuitive object orientation; natural
|
||||
expression of procedural code; full modularity, supporting
|
||||
hierarchical packages; exception-based error handling; and very
|
||||
high level dynamic data types.
|
||||
'';
|
||||
license = stdenv.lib.licenses.psfl;
|
||||
platforms = with stdenv.lib.platforms; linux ++ darwin;
|
||||
maintainers = with stdenv.lib.maintainers; [ chaoflow cstrahan ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
addPythonPath() {
|
||||
addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.3/site-packages
|
||||
}
|
||||
|
||||
toPythonPath() {
|
||||
local paths="$1"
|
||||
local result=
|
||||
for i in $paths; do
|
||||
p="$i/lib/python3.3/site-packages"
|
||||
result="${result}${result:+:}$p"
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
envHooks+=(addPythonPath)
|
||||
141
pkgs/development/interpreters/python/cpython/3.4/default.nix
Normal file
141
pkgs/development/interpreters/python/cpython/3.4/default.nix
Normal file
@@ -0,0 +1,141 @@
|
||||
{ stdenv, fetchurl
|
||||
, bzip2
|
||||
, db
|
||||
, gdbm
|
||||
, less
|
||||
, libX11, xproto
|
||||
, lzma
|
||||
, ncurses
|
||||
, openssl
|
||||
, readline
|
||||
, sqlite
|
||||
, tcl, tk
|
||||
, zlib
|
||||
, callPackage
|
||||
, self
|
||||
, python34Packages
|
||||
|
||||
, CF, configd
|
||||
}:
|
||||
|
||||
assert readline != null -> ncurses != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
majorVersion = "3.4";
|
||||
pythonVersion = majorVersion;
|
||||
version = "${majorVersion}.5";
|
||||
fullVersion = "${version}";
|
||||
|
||||
buildInputs = filter (p: p != null) [
|
||||
zlib
|
||||
bzip2
|
||||
lzma
|
||||
gdbm
|
||||
sqlite
|
||||
db
|
||||
readline
|
||||
ncurses
|
||||
openssl
|
||||
tcl
|
||||
tk
|
||||
libX11
|
||||
xproto
|
||||
] ++ optionals stdenv.isDarwin [ CF configd ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
less
|
||||
];
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "python3-${fullVersion}";
|
||||
pythonVersion = majorVersion;
|
||||
inherit majorVersion version;
|
||||
|
||||
inherit buildInputs;
|
||||
inherit propagatedBuildInputs;
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.python.org/ftp/python/${version}/Python-${fullVersion}.tar.xz";
|
||||
sha256 = "12l9klp778wklxmckhghniy5hklss8r26995pyd00qbllk4b2r7f";
|
||||
};
|
||||
|
||||
NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s";
|
||||
|
||||
prePatch = optionalString stdenv.isDarwin ''
|
||||
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
for i in /usr /sw /opt /pkg; do # improve purity
|
||||
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||
done
|
||||
${optionalString stdenv.isDarwin ''
|
||||
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -msse2"
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.6
|
||||
''}
|
||||
|
||||
configureFlagsArray=( --enable-shared --with-threads
|
||||
CPPFLAGS="${concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs)}"
|
||||
LDFLAGS="${concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs)}"
|
||||
LIBS="${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}"
|
||||
)
|
||||
'';
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
postInstall = ''
|
||||
# needed for some packages, especially packages that backport functionality
|
||||
# to 2.x from 3.x
|
||||
for item in $out/lib/python${majorVersion}/test/*; do
|
||||
if [[ "$item" != */test_support.py* ]]; then
|
||||
rm -rf "$item"
|
||||
else
|
||||
echo $item
|
||||
fi
|
||||
done
|
||||
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||
|
||||
ln -s "$out/include/python${majorVersion}m" "$out/include/python${majorVersion}"
|
||||
paxmark E $out/bin/python${majorVersion}
|
||||
'';
|
||||
|
||||
passthru = rec {
|
||||
zlibSupport = zlib != null;
|
||||
sqliteSupport = sqlite != null;
|
||||
dbSupport = db != null;
|
||||
readlineSupport = readline != null;
|
||||
opensslSupport = openssl != null;
|
||||
tkSupport = (tk != null) && (tcl != null) && (libX11 != null) && (xproto != null);
|
||||
libPrefix = "python${majorVersion}";
|
||||
executable = "python3.4m";
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python34Packages; };
|
||||
isPy3 = true;
|
||||
isPy34 = true;
|
||||
is_py3k = true; # deprecated
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
homepage = http://python.org;
|
||||
description = "A high-level dynamically-typed programming language";
|
||||
longDescription = ''
|
||||
Python is a remarkably powerful dynamic programming language that
|
||||
is used in a wide variety of application domains. Some of its key
|
||||
distinguishing features include: clear, readable syntax; strong
|
||||
introspection capabilities; intuitive object orientation; natural
|
||||
expression of procedural code; full modularity, supporting
|
||||
hierarchical packages; exception-based error handling; and very
|
||||
high level dynamic data types.
|
||||
'';
|
||||
license = licenses.psfl;
|
||||
platforms = with platforms; linux ++ darwin;
|
||||
maintainers = with maintainers; [ chaoflow domenkozar cstrahan ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
addPythonPath() {
|
||||
addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.4/site-packages
|
||||
}
|
||||
|
||||
toPythonPath() {
|
||||
local paths="$1"
|
||||
local result=
|
||||
for i in $paths; do
|
||||
p="$i/lib/python3.4/site-packages"
|
||||
result="${result}${result:+:}$p"
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
envHooks+=(addPythonPath)
|
||||
141
pkgs/development/interpreters/python/cpython/3.5/default.nix
Normal file
141
pkgs/development/interpreters/python/cpython/3.5/default.nix
Normal file
@@ -0,0 +1,141 @@
|
||||
{ stdenv, fetchurl
|
||||
, bzip2
|
||||
, db
|
||||
, gdbm
|
||||
, less
|
||||
, libX11, xproto
|
||||
, lzma
|
||||
, ncurses
|
||||
, openssl
|
||||
, readline
|
||||
, sqlite
|
||||
, tcl, tk
|
||||
, zlib
|
||||
, callPackage
|
||||
, self
|
||||
, python35Packages
|
||||
|
||||
, CF, configd
|
||||
}:
|
||||
|
||||
assert readline != null -> ncurses != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
majorVersion = "3.5";
|
||||
pythonVersion = majorVersion;
|
||||
version = "${majorVersion}.2";
|
||||
fullVersion = "${version}";
|
||||
|
||||
buildInputs = filter (p: p != null) [
|
||||
zlib
|
||||
bzip2
|
||||
lzma
|
||||
gdbm
|
||||
sqlite
|
||||
db
|
||||
readline
|
||||
ncurses
|
||||
openssl
|
||||
tcl
|
||||
tk
|
||||
libX11
|
||||
xproto
|
||||
] ++ optionals stdenv.isDarwin [ CF configd ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
less
|
||||
];
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "python3-${fullVersion}";
|
||||
pythonVersion = majorVersion;
|
||||
inherit majorVersion version;
|
||||
|
||||
inherit buildInputs;
|
||||
inherit propagatedBuildInputs;
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://www.python.org/ftp/python/${version}/Python-${fullVersion}.tar.xz";
|
||||
sha256 = "0h6a5fr7ram2s483lh0pnmc4ncijb8llnpfdxdcl5dxr01hza400";
|
||||
};
|
||||
|
||||
NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s";
|
||||
|
||||
prePatch = optionalString stdenv.isDarwin ''
|
||||
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
for i in /usr /sw /opt /pkg; do # improve purity
|
||||
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||
done
|
||||
${optionalString stdenv.isDarwin ''
|
||||
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -msse2"
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.6
|
||||
''}
|
||||
|
||||
configureFlagsArray=( --enable-shared --with-threads
|
||||
CPPFLAGS="${concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs)}"
|
||||
LDFLAGS="${concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs)}"
|
||||
LIBS="${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}"
|
||||
)
|
||||
'';
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
postInstall = ''
|
||||
# needed for some packages, especially packages that backport functionality
|
||||
# to 2.x from 3.x
|
||||
for item in $out/lib/python${majorVersion}/test/*; do
|
||||
if [[ "$item" != */test_support.py* ]]; then
|
||||
rm -rf "$item"
|
||||
else
|
||||
echo $item
|
||||
fi
|
||||
done
|
||||
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||
|
||||
ln -s "$out/include/python${majorVersion}m" "$out/include/python${majorVersion}"
|
||||
paxmark E $out/bin/python${majorVersion}
|
||||
'';
|
||||
|
||||
passthru = rec {
|
||||
zlibSupport = zlib != null;
|
||||
sqliteSupport = sqlite != null;
|
||||
dbSupport = db != null;
|
||||
readlineSupport = readline != null;
|
||||
opensslSupport = openssl != null;
|
||||
tkSupport = (tk != null) && (tcl != null) && (libX11 != null) && (xproto != null);
|
||||
libPrefix = "python${majorVersion}";
|
||||
executable = "python${majorVersion}m";
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python35Packages; };
|
||||
isPy3 = true;
|
||||
isPy35 = true;
|
||||
is_py3k = true; # deprecated
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
homepage = http://python.org;
|
||||
description = "A high-level dynamically-typed programming language";
|
||||
longDescription = ''
|
||||
Python is a remarkably powerful dynamic programming language that
|
||||
is used in a wide variety of application domains. Some of its key
|
||||
distinguishing features include: clear, readable syntax; strong
|
||||
introspection capabilities; intuitive object orientation; natural
|
||||
expression of procedural code; full modularity, supporting
|
||||
hierarchical packages; exception-based error handling; and very
|
||||
high level dynamic data types.
|
||||
'';
|
||||
license = licenses.psfl;
|
||||
platforms = with platforms; linux ++ darwin;
|
||||
maintainers = with maintainers; [ chaoflow domenkozar cstrahan ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
addPythonPath() {
|
||||
addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.5/site-packages
|
||||
}
|
||||
|
||||
toPythonPath() {
|
||||
local paths="$1"
|
||||
local result=
|
||||
for i in $paths; do
|
||||
p="$i/lib/python3.5/site-packages"
|
||||
result="${result}${result:+:}$p"
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
envHooks+=(addPythonPath)
|
||||
145
pkgs/development/interpreters/python/cpython/3.6/default.nix
Normal file
145
pkgs/development/interpreters/python/cpython/3.6/default.nix
Normal file
@@ -0,0 +1,145 @@
|
||||
{ stdenv, fetchurl
|
||||
, glibc
|
||||
, bzip2
|
||||
, db
|
||||
, gdbm
|
||||
, less
|
||||
, libX11, xproto
|
||||
, lzma
|
||||
, ncurses
|
||||
, openssl
|
||||
, readline
|
||||
, sqlite
|
||||
, tcl, tk
|
||||
, zlib
|
||||
, callPackage
|
||||
, self
|
||||
, python36Packages
|
||||
|
||||
, CF, configd
|
||||
}:
|
||||
|
||||
assert readline != null -> ncurses != null;
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
let
|
||||
majorVersion = "3.6";
|
||||
pythonVersion = majorVersion;
|
||||
version = "${majorVersion}.0a3";
|
||||
fullVersion = "${version}";
|
||||
|
||||
buildInputs = filter (p: p != null) [
|
||||
glibc
|
||||
zlib
|
||||
bzip2
|
||||
lzma
|
||||
gdbm
|
||||
sqlite
|
||||
db
|
||||
readline
|
||||
ncurses
|
||||
openssl
|
||||
tcl
|
||||
tk
|
||||
libX11
|
||||
xproto
|
||||
] ++ optionals stdenv.isDarwin [ CF configd ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
less
|
||||
];
|
||||
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "python3-${fullVersion}";
|
||||
pythonVersion = majorVersion;
|
||||
inherit majorVersion version;
|
||||
|
||||
inherit buildInputs;
|
||||
inherit propagatedBuildInputs;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://www.python.org/ftp/python/${majorVersion}.0/Python-${fullVersion}.tar.xz";
|
||||
sha256 = "08c3598bwihibwca9lwxq923sjq9shvgv3wxv4vkga2n6hf63l1c";
|
||||
};
|
||||
|
||||
NIX_LDFLAGS = optionalString stdenv.isLinux "-lgcc_s";
|
||||
|
||||
prePatch = optionalString stdenv.isDarwin ''
|
||||
substituteInPlace configure --replace '`/usr/bin/arch`' '"i386"'
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
for i in /usr /sw /opt /pkg; do # improve purity
|
||||
substituteInPlace ./setup.py --replace $i /no-such-path
|
||||
done
|
||||
${optionalString stdenv.isDarwin ''
|
||||
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -msse2"
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.6
|
||||
''}
|
||||
|
||||
substituteInPlace ./Lib/plat-generic/regen --replace "/usr/include" ${glibc}/include
|
||||
|
||||
configureFlagsArray=( --enable-shared --with-threads
|
||||
CPPFLAGS="${concatStringsSep " " (map (p: "-I${getDev p}/include") buildInputs)}"
|
||||
LDFLAGS="${concatStringsSep " " (map (p: "-L${getLib p}/lib") buildInputs)}"
|
||||
LIBS="${optionalString (!stdenv.isDarwin) "-lcrypt"} ${optionalString (ncurses != null) "-lncurses"}"
|
||||
)
|
||||
'';
|
||||
|
||||
setupHook = ./setup-hook.sh;
|
||||
|
||||
postInstall = ''
|
||||
# needed for some packages, especially packages that backport functionality
|
||||
# to 2.x from 3.x
|
||||
for item in $out/lib/python${majorVersion}/test/*; do
|
||||
if [[ "$item" != */test_support.py* ]]; then
|
||||
rm -rf "$item"
|
||||
else
|
||||
echo $item
|
||||
fi
|
||||
done
|
||||
touch $out/lib/python${majorVersion}/test/__init__.py
|
||||
|
||||
ln -s "$out/include/python${majorVersion}m" "$out/include/python${majorVersion}"
|
||||
paxmark E $out/bin/python${majorVersion}
|
||||
'';
|
||||
|
||||
passthru = rec {
|
||||
zlibSupport = zlib != null;
|
||||
sqliteSupport = sqlite != null;
|
||||
dbSupport = db != null;
|
||||
readlineSupport = readline != null;
|
||||
opensslSupport = openssl != null;
|
||||
tkSupport = (tk != null) && (tcl != null) && (libX11 != null) && (xproto != null);
|
||||
libPrefix = "python${majorVersion}";
|
||||
executable = "python${majorVersion}m";
|
||||
buildEnv = callPackage ../../wrapper.nix { python = self; };
|
||||
withPackages = import ../../with-packages.nix { inherit buildEnv; pythonPackages = python36Packages; };
|
||||
isPy3 = true;
|
||||
isPy35 = true;
|
||||
is_py3k = true; # deprecated
|
||||
sitePackages = "lib/${libPrefix}/site-packages";
|
||||
interpreter = "${self}/bin/${executable}";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = {
|
||||
homepage = http://python.org;
|
||||
description = "A high-level dynamically-typed programming language";
|
||||
longDescription = ''
|
||||
Python is a remarkably powerful dynamic programming language that
|
||||
is used in a wide variety of application domains. Some of its key
|
||||
distinguishing features include: clear, readable syntax; strong
|
||||
introspection capabilities; intuitive object orientation; natural
|
||||
expression of procedural code; full modularity, supporting
|
||||
hierarchical packages; exception-based error handling; and very
|
||||
high level dynamic data types.
|
||||
'';
|
||||
license = licenses.psfl;
|
||||
platforms = with platforms; linux ++ darwin;
|
||||
maintainers = with maintainers; [ chaoflow domenkozar cstrahan kragniz ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
addPythonPath() {
|
||||
addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.6/site-packages
|
||||
}
|
||||
|
||||
toPythonPath() {
|
||||
local paths="$1"
|
||||
local result=
|
||||
for i in $paths; do
|
||||
p="$i/lib/python3.6/site-packages"
|
||||
result="${result}${result:+:}$p"
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
envHooks+=(addPythonPath)
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python26-docs-html-2.6.8";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.6.8/python-2.6.8-docs-html.tar.bz2;
|
||||
sha256 = "09kznik9ahmnrqw9gkr7mjv3b3zr258f2fm27n12hrrwwsaszkni";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python26
|
||||
cp -R ./ $out/share/doc/python26/html
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python26-docs-pdf-a4-2.6.8";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.6.8/python-2.6.8-docs-pdf-a4.tar.bz2;
|
||||
sha256 = "07k8n9zhd59s1yn8ahsizkaqnv969p0f2c2acxgxrxhhyy842pp8";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python26
|
||||
cp -R ./ $out/share/doc/python26/pdf-a4
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python26-docs-pdf-letter-2.6.8";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.6.8/python-2.6.8-docs-pdf-letter.tar.bz2;
|
||||
sha256 = "01r87m8hb7f9ql4j9zcjcrr9150nsk23sj8cy02vygr83sc1ldmq";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python26
|
||||
cp -R ./ $out/share/doc/python26/pdf-letter
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python26-docs-text-2.6.8";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.6.8/python-2.6.8-docs-text.tar.bz2;
|
||||
sha256 = "05wsdh6ilgkclgak09fq7fsx5kflkmqq8dyxi2rpydx289cw3a8c";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python26
|
||||
cp -R ./ $out/share/doc/python26/text
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python27-docs-html-2.7.3";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.7.3/python-2.7.3-docs-html.tar.bz2;
|
||||
sha256 = "1hg92n0mzl9w6j33b2h0bf2vy6fsxnpxfdc3qw760vcm0y00155j";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python27
|
||||
cp -R ./ $out/share/doc/python27/html
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python27-docs-pdf-a4-2.7.3";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.7.3/python-2.7.3-docs-pdf-a4.tar.bz2;
|
||||
sha256 = "13da88panq5b6qfhf8k4dgqgxkg4ydcac5cx69a3f35s1w90xdjr";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python27
|
||||
cp -R ./ $out/share/doc/python27/pdf-a4
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python27-docs-pdf-letter-2.7.3";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.7.3/python-2.7.3-docs-pdf-letter.tar.bz2;
|
||||
sha256 = "0x41phsdrpivhzkchswsliyx3a10n7gzc9irkrw6rz22j81bfydg";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python27
|
||||
cp -R ./ $out/share/doc/python27/pdf-letter
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python27-docs-text-2.7.3";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/2.7.3/python-2.7.3-docs-text.tar.bz2;
|
||||
sha256 = "1rxlb3jhh3892y65i45nk1y2lx981fr22a5hmfkp9gvjvdykjnzp";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python27
|
||||
cp -R ./ $out/share/doc/python27/text
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python33-docs-html-3.3.0";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/3.3.0/python-3.3.0-docs-html.tar.bz2;
|
||||
sha256 = "0vv24b9qi7gznv687ik0pa2w1rq9grqivy44znvj2ysjfg7mc2c1";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python33
|
||||
cp -R ./ $out/share/doc/python33/html
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python33-docs-pdf-a4-3.3.0";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/3.3.0/python-3.3.0-docs-pdf-a4.tar.bz2;
|
||||
sha256 = "1y6n13bxlw8a11khy3ynfbz8z0kpf2lvh32dvy8scyw3hrk6wdxp";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python33
|
||||
cp -R ./ $out/share/doc/python33/pdf-a4
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python33-docs-pdf-letter-3.3.0";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/3.3.0/python-3.3.0-docs-pdf-letter.tar.bz2;
|
||||
sha256 = "0mcj1i47nx81fc9zk1cic4c4p139qjcqlzf4hnnkzvb3jcgy5z6k";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python33
|
||||
cp -R ./ $out/share/doc/python33/pdf-letter
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "python33-docs-text-3.3.0";
|
||||
src = fetchurl {
|
||||
url = http://docs.python.org/ftp/python/doc/3.3.0/python-3.3.0-docs-text.tar.bz2;
|
||||
sha256 = "10vk2fixg1aglqmsf89kn98rlirrbhnrk1285vzfbynf2iavxw0n";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/python33
|
||||
cp -R ./ $out/share/doc/python33/text
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
let
|
||||
pythonDocs = {
|
||||
html = {
|
||||
recurseForDerivations = true;
|
||||
python33 = import ./3.3-html.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python27 = import ./2.7-html.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python26 = import ./2.6-html.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
};
|
||||
pdf_a4 = {
|
||||
recurseForDerivations = true;
|
||||
python33 = import ./3.3-pdf-a4.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python27 = import ./2.7-pdf-a4.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python26 = import ./2.6-pdf-a4.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
};
|
||||
pdf_letter = {
|
||||
recurseForDerivations = true;
|
||||
python33 = import ./3.3-pdf-letter.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python27 = import ./2.7-pdf-letter.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python26 = import ./2.6-pdf-letter.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
};
|
||||
text = {
|
||||
recurseForDerivations = true;
|
||||
python33 = import ./3.3-text.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python27 = import ./2.7-text.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
python26 = import ./2.6-text.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
};
|
||||
}; in pythonDocs
|
||||
59
pkgs/development/interpreters/python/cpython/docs/generate.sh
Executable file
59
pkgs/development/interpreters/python/cpython/docs/generate.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
TYPES="html pdf-a4 pdf-letter text"
|
||||
URL=http://docs.python.org/ftp/python/doc/VERSION/python-VERSION-docs-TYPE.tar.bz2
|
||||
VERSIONS=$(curl http://www.python.org/download/releases/ 2>/dev/null | grep "releases/[123456789]"| cut -d/ -f4 |grep -v "^[12].[012345]" |grep -v "^1.6.1")
|
||||
echo "Generating expressions for:
|
||||
${VERSIONS}
|
||||
"
|
||||
|
||||
|
||||
cat >default.nix <<EOF
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
let
|
||||
pythonDocs = {
|
||||
EOF
|
||||
|
||||
for type in $TYPES; do
|
||||
cat >>default.nix <<EOF
|
||||
${type/-/_} = {
|
||||
recurseForDerivations = true;
|
||||
EOF
|
||||
|
||||
for version in $VERSIONS; do
|
||||
major=$(echo -n ${version}| cut -d. -f1)
|
||||
minor=$(echo -n ${version}| cut -d. -f2)
|
||||
outfile=${major}.${minor}-${type}.nix
|
||||
hash=
|
||||
if [ -e ${outfile} ]; then
|
||||
currentversion=$(grep "url =" ${outfile} |cut -d/ -f7)
|
||||
if [ ${version} = ${currentversion} ]; then
|
||||
hash=$(grep sha256 ${outfile} | cut -d'"' -f2)
|
||||
fi
|
||||
fi
|
||||
echo "Generating ${outfile}"
|
||||
url=$(echo -n $URL |sed -e "s,VERSION,${version},g" -e "s,TYPE,${type},")
|
||||
sha=$(nix-prefetch-url ${url} ${hash})
|
||||
|
||||
sed -e "s,VERSION,${version}," \
|
||||
-e "s,MAJOR,${major}," \
|
||||
-e "s,MINOR,${minor}," \
|
||||
-e "s,TYPE,${type}," \
|
||||
-e "s,URL,${url}," \
|
||||
-e "s,SHA,${sha}," < template.nix > ${outfile}
|
||||
|
||||
attrname=python${major}${minor}
|
||||
cat >>default.nix <<EOF
|
||||
${attrname} = import ./${major}.${minor}-${type}.nix {
|
||||
inherit stdenv fetchurl lib;
|
||||
};
|
||||
EOF
|
||||
|
||||
echo "done."
|
||||
echo
|
||||
done
|
||||
echo " };" >> default.nix
|
||||
done
|
||||
|
||||
echo "}; in pythonDocs" >> default.nix
|
||||
@@ -0,0 +1,18 @@
|
||||
# This file was generated and will be overwritten by ./generate.sh
|
||||
|
||||
{ stdenv, fetchurl, lib }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "pythonMAJORMINOR-docs-TYPE-VERSION";
|
||||
src = fetchurl {
|
||||
url = URL;
|
||||
sha256 = "SHA";
|
||||
};
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/doc/pythonMAJORMINOR
|
||||
cp -R ./ $out/share/doc/pythonMAJORMINOR/TYPE
|
||||
'';
|
||||
meta = {
|
||||
maintainers = [ lib.maintainers.chaoflow ];
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user