mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-10 05:40:07 +02:00
python3: add recipe for 3.7.2 (#3664)
This commit is contained in:
695
dev-lang/python/patches/python3-3.7.2.patchset
Normal file
695
dev-lang/python/patches/python3-3.7.2.patchset
Normal file
@@ -0,0 +1,695 @@
|
||||
From 86342bd79fd31f85bfb8df30d0b8bf1cc66cbd75 Mon Sep 17 00:00:00 2001
|
||||
From: Jerome Duval <jerome.duval@gmail.com>
|
||||
Date: Thu, 10 Apr 2014 16:03:33 +0000
|
||||
Subject: initial Haiku patch
|
||||
|
||||
|
||||
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
|
||||
index 0258d3d..aaec6e6 100644
|
||||
--- a/Lib/distutils/command/install.py
|
||||
+++ b/Lib/distutils/command/install.py
|
||||
@@ -43,6 +43,27 @@ INSTALL_SCHEMES = {
|
||||
'data' : '$base',
|
||||
},
|
||||
'nt': WINDOWS_SCHEME,
|
||||
+ 'haiku': {
|
||||
+ 'purelib': '$base/non-packaged/lib/python$py_version_short/site-packages',
|
||||
+ 'platlib': '$platbase/non-packaged/lib/python$py_version_short/site-packages',
|
||||
+ 'headers': '$base/non-packaged/develop/headers/python$py_version_short/$dist_name',
|
||||
+ 'scripts': '$base/non-packaged/bin',
|
||||
+ 'data' : '$base/non-packaged',
|
||||
+ },
|
||||
+ 'haiku_vendor': {
|
||||
+ 'purelib': '$base/lib/python$py_version_short/vendor-packages',
|
||||
+ 'platlib': '$platbase/lib/python$py_version_short/vendor-packages',
|
||||
+ 'headers': '$base/develop/headers/python$py_version_short/$dist_name',
|
||||
+ 'scripts': '$base/bin',
|
||||
+ 'data' : '$base',
|
||||
+ },
|
||||
+ 'haiku_home': {
|
||||
+ 'purelib': '$base/lib/python',
|
||||
+ 'platlib': '$base/lib/python',
|
||||
+ 'headers': '$base/develop/headers/python/$dist_name',
|
||||
+ 'scripts': '$base/bin',
|
||||
+ 'data' : '$base',
|
||||
+ },
|
||||
}
|
||||
|
||||
# user site schemes
|
||||
@@ -64,6 +85,14 @@ if HAS_USER_SITE:
|
||||
'data' : '$userbase',
|
||||
}
|
||||
|
||||
+ INSTALL_SCHEMES['haiku_user'] = {
|
||||
+ 'purelib': '$usersite',
|
||||
+ 'platlib': '$usersite',
|
||||
+ 'headers': '$userbase/develop/headers/python$py_version_short/$dist_name',
|
||||
+ 'scripts': '$userbase/bin',
|
||||
+ 'data' : '$userbase',
|
||||
+ }
|
||||
+
|
||||
# The keys to an installation scheme; if any new types of files are to be
|
||||
# installed, be sure to add an entry to every installation scheme above,
|
||||
# and to SCHEME_KEYS here.
|
||||
@@ -408,10 +437,16 @@ class install(Command):
|
||||
raise DistutilsPlatformError(
|
||||
"User base directory is not specified")
|
||||
self.install_base = self.install_platbase = self.install_userbase
|
||||
- self.select_scheme("unix_user")
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ self.select_scheme("haiku_user")
|
||||
+ else:
|
||||
+ self.select_scheme("unix_user")
|
||||
elif self.home is not None:
|
||||
self.install_base = self.install_platbase = self.home
|
||||
- self.select_scheme("unix_home")
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ self.select_scheme("haiku_home")
|
||||
+ else:
|
||||
+ self.select_scheme("unix_home")
|
||||
else:
|
||||
if self.prefix is None:
|
||||
if self.exec_prefix is not None:
|
||||
@@ -427,7 +462,13 @@ class install(Command):
|
||||
|
||||
self.install_base = self.prefix
|
||||
self.install_platbase = self.exec_prefix
|
||||
- self.select_scheme("unix_prefix")
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ if os.environ.get('HAIKU_USE_VENDOR_DIRECTORIES') == '1':
|
||||
+ self.select_scheme("haiku_vendor")
|
||||
+ else:
|
||||
+ self.select_scheme("haiku")
|
||||
+ else:
|
||||
+ self.select_scheme("unix_prefix")
|
||||
|
||||
def finalize_other(self):
|
||||
"""Finalizes options for non-posix platforms"""
|
||||
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
|
||||
index 2bcd1dd..8d8ff39 100644
|
||||
--- a/Lib/distutils/sysconfig.py
|
||||
+++ b/Lib/distutils/sysconfig.py
|
||||
@@ -99,7 +99,8 @@ def get_python_inc(plat_specific=0, prefix=None):
|
||||
incdir = os.path.join(get_config_var('srcdir'), 'Include')
|
||||
return os.path.normpath(incdir)
|
||||
python_dir = 'python' + get_python_version() + build_flags
|
||||
- return os.path.join(prefix, "include", python_dir)
|
||||
+ inc_dir = "include" if sys.platform != "haiku1" else "develop/headers"
|
||||
+ return os.path.join(prefix, inc_dir, python_dir)
|
||||
elif os.name == "nt":
|
||||
return os.path.join(prefix, "include")
|
||||
else:
|
||||
@@ -129,12 +130,20 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
|
||||
prefix = plat_specific and EXEC_PREFIX or PREFIX
|
||||
|
||||
if os.name == "posix":
|
||||
- libpython = os.path.join(prefix,
|
||||
- "lib", "python" + get_python_version())
|
||||
- if standard_lib:
|
||||
- return libpython
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ if standard_lib:
|
||||
+ return os.path.join(prefix,
|
||||
+ "lib", "python" + get_python_version())
|
||||
+ return os.path.join(prefix, "non-packaged",
|
||||
+ "lib", "python" + get_python_version(),
|
||||
+ "site-packages")
|
||||
else:
|
||||
- return os.path.join(libpython, "site-packages")
|
||||
+ libpython = os.path.join(prefix,
|
||||
+ "lib", "python" + get_python_version())
|
||||
+ if standard_lib:
|
||||
+ return libpython
|
||||
+ else:
|
||||
+ return os.path.join(libpython, "site-packages")
|
||||
elif os.name == "nt":
|
||||
if standard_lib:
|
||||
return os.path.join(prefix, "Lib")
|
||||
diff --git a/Lib/plat-haiku1/regen b/Lib/plat-haiku1/regen
|
||||
new file mode 100644
|
||||
index 0000000..4372ee2
|
||||
--- /dev/null
|
||||
+++ b/Lib/plat-haiku1/regen
|
||||
@@ -0,0 +1,4 @@
|
||||
+#! /bin/sh
|
||||
+HEADERS=/boot/develop/headers
|
||||
+set -v
|
||||
+eval $PYTHON_FOR_BUILD ../../Tools/scripts/h2py.py -i "'(u_long)'" $HEADERS/posix/netinet/in.h
|
||||
diff --git a/Lib/site.py b/Lib/site.py
|
||||
index ffd132b..9876642 100644
|
||||
--- a/Lib/site.py
|
||||
+++ b/Lib/site.py
|
||||
@@ -258,6 +258,14 @@ def _getuserbase():
|
||||
return joinuser("~", "Library", sys._framework,
|
||||
"%d.%d" % sys.version_info[:2])
|
||||
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ try:
|
||||
+ import subprocess
|
||||
+ return subprocess.run(['finddir', 'B_USER_NONPACKAGED_DIRECTORY'],
|
||||
+ stdout=subprocess.PIPE, check=True).stdout.rstrip().decode('utf-8')
|
||||
+ except:
|
||||
+ pass
|
||||
+
|
||||
return joinuser("~", ".local")
|
||||
|
||||
|
||||
@@ -333,7 +341,14 @@ def getsitepackages(prefixes=None):
|
||||
continue
|
||||
seen.add(prefix)
|
||||
|
||||
- if os.sep == '/':
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ sitepackages.append(os.path.join(prefix, "non-packaged", "lib",
|
||||
+ "python" + sys.version[:3],
|
||||
+ "site-packages"))
|
||||
+ sitepackages.append(os.path.join(prefix, "lib",
|
||||
+ "python" + sys.version[:3],
|
||||
+ "vendor-packages"))
|
||||
+ elif os.sep == '/':
|
||||
sitepackages.append(os.path.join(prefix, "lib",
|
||||
"python%d.%d" % sys.version_info[:2],
|
||||
"site-packages"))
|
||||
@@ -433,8 +448,16 @@ def enablerlcompleter():
|
||||
# each interpreter exit when readline was already configured
|
||||
# through a PYTHONSTARTUP hook, see:
|
||||
# http://bugs.python.org/issue5845#msg198636
|
||||
- history = os.path.join(os.path.expanduser('~'),
|
||||
- '.python_history')
|
||||
+ import subprocess
|
||||
+ try:
|
||||
+ history = os.path.join(subprocess.run(['finddir', 'B_USER_VAR_DIRECTORY'],
|
||||
+ check=True, stdout=subprocess.PIPE).stdout.rstrip().decode('utf-8'),
|
||||
+ 'python', 'history')
|
||||
+ if not os.path.exists(os.path.dirname(history)):
|
||||
+ os.makedirs(os.path.dirname(history))
|
||||
+ except subprocess.CalledProcessError:
|
||||
+ history = os.path.join(os.path.expanduser('~'),
|
||||
+ '.python_history')
|
||||
try:
|
||||
readline.read_history_file(history)
|
||||
except OSError:
|
||||
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py
|
||||
index 57a0265..ea316a7 100644
|
||||
--- a/Lib/test/test_fileio.py
|
||||
+++ b/Lib/test/test_fileio.py
|
||||
@@ -384,6 +384,7 @@ class OtherFileTests:
|
||||
self.assertEqual(f.writable(), True)
|
||||
if sys.platform != "darwin" and \
|
||||
'bsd' not in sys.platform and \
|
||||
+ 'haiku' not in sys.platform and \
|
||||
not sys.platform.startswith(('sunos', 'aix')):
|
||||
# Somehow /dev/tty appears seekable on some BSDs
|
||||
self.assertEqual(f.seekable(), False)
|
||||
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
|
||||
index 11180b7..d99f73e 100644
|
||||
--- a/Lib/test/test_posix.py
|
||||
+++ b/Lib/test/test_posix.py
|
||||
@@ -1164,7 +1164,7 @@ class PosixTester(unittest.TestCase):
|
||||
posix.close(f)
|
||||
support.rmtree(support.TESTFN + 'dir')
|
||||
|
||||
- @unittest.skipUnless((os.mknod in os.supports_dir_fd) and hasattr(stat, 'S_IFIFO'),
|
||||
+ @unittest.skipUnless(hasattr(os, 'mknod') and (os.mknod in os.supports_dir_fd) and hasattr(stat, 'S_IFIFO'),
|
||||
"test requires both stat.S_IFIFO and dir_fd support for os.mknod()")
|
||||
def test_mknod_dir_fd(self):
|
||||
# Test using mknodat() to create a FIFO (the only use specified
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index d912a19..4829a67 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -141,7 +141,7 @@ BINDIR= @bindir@
|
||||
LIBDIR= @libdir@
|
||||
MANDIR= @mandir@
|
||||
INCLUDEDIR= @includedir@
|
||||
-CONFINCLUDEDIR= $(exec_prefix)/include
|
||||
+CONFINCLUDEDIR= $(INCLUDEDIR)
|
||||
SCRIPTDIR= $(prefix)/lib
|
||||
ABIFLAGS= @ABIFLAGS@
|
||||
|
||||
diff --git a/Modules/resource.c b/Modules/resource.c
|
||||
index 113ad5c..b9de0ab 100644
|
||||
--- a/Modules/resource.c
|
||||
+++ b/Modules/resource.c
|
||||
@@ -102,6 +102,7 @@ resource_getrusage(PyObject *self, PyObject *args)
|
||||
PyFloat_FromDouble(doubletime(ru.ru_utime)));
|
||||
PyStructSequence_SET_ITEM(result, 1,
|
||||
PyFloat_FromDouble(doubletime(ru.ru_stime)));
|
||||
+#ifndef __HAIKU__
|
||||
PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong(ru.ru_maxrss));
|
||||
PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong(ru.ru_ixrss));
|
||||
PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong(ru.ru_idrss));
|
||||
@@ -116,7 +117,22 @@ resource_getrusage(PyObject *self, PyObject *args)
|
||||
PyStructSequence_SET_ITEM(result, 13, PyLong_FromLong(ru.ru_nsignals));
|
||||
PyStructSequence_SET_ITEM(result, 14, PyLong_FromLong(ru.ru_nvcsw));
|
||||
PyStructSequence_SET_ITEM(result, 15, PyLong_FromLong(ru.ru_nivcsw));
|
||||
-
|
||||
+#else
|
||||
+ PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 5, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 6, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 7, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 8, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 9, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 10, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 11, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 12, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 13, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 14, PyLong_FromLong(0));
|
||||
+ PyStructSequence_SET_ITEM(result, 15, PyLong_FromLong(0));
|
||||
+#endif
|
||||
if (PyErr_Occurred()) {
|
||||
Py_DECREF(result);
|
||||
return NULL;
|
||||
@@ -369,19 +385,19 @@ PyInit_resource(void)
|
||||
(PyObject*) &StructRUsageType);
|
||||
|
||||
/* insert constants */
|
||||
-#ifdef RLIMIT_CPU
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_CPU)
|
||||
PyModule_AddIntMacro(m, RLIMIT_CPU);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_FSIZE
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_FSIZE)
|
||||
PyModule_AddIntMacro(m, RLIMIT_FSIZE);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_DATA
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_DATA)
|
||||
PyModule_AddIntMacro(m, RLIMIT_DATA);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_STACK
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_STACK)
|
||||
PyModule_AddIntMacro(m, RLIMIT_STACK);
|
||||
#endif
|
||||
|
||||
@@ -393,31 +409,31 @@ PyInit_resource(void)
|
||||
PyModule_AddIntMacro(m, RLIMIT_NOFILE);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_OFILE
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_OFILE)
|
||||
PyModule_AddIntMacro(m, RLIMIT_OFILE);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_VMEM
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_VMEM)
|
||||
PyModule_AddIntMacro(m, RLIMIT_VMEM);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_AS
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_AS)
|
||||
PyModule_AddIntMacro(m, RLIMIT_AS);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_RSS
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_RSS)
|
||||
PyModule_AddIntMacro(m, RLIMIT_RSS);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_NPROC
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_NPROC)
|
||||
PyModule_AddIntMacro(m, RLIMIT_NPROC);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_MEMLOCK
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_MEMLOCK)
|
||||
PyModule_AddIntMacro(m, RLIMIT_MEMLOCK);
|
||||
#endif
|
||||
|
||||
-#ifdef RLIMIT_SBSIZE
|
||||
+#if !defined(__HAIKU__) && defined(RLIMIT_SBSIZE)
|
||||
PyModule_AddIntMacro(m, RLIMIT_SBSIZE);
|
||||
#endif
|
||||
|
||||
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
|
||||
index ed31667..e1c163e 100644
|
||||
--- a/Modules/socketmodule.c
|
||||
+++ b/Modules/socketmodule.c
|
||||
@@ -7122,7 +7122,9 @@ PyInit__socket(void)
|
||||
/* SOCK_RAW is marked as optional in the POSIX specification */
|
||||
PyModule_AddIntMacro(m, SOCK_RAW);
|
||||
#endif
|
||||
+#ifndef __HAIKU__
|
||||
PyModule_AddIntMacro(m, SOCK_SEQPACKET);
|
||||
+#endif
|
||||
#if defined(SOCK_RDM)
|
||||
PyModule_AddIntMacro(m, SOCK_RDM);
|
||||
#endif
|
||||
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
|
||||
index af7c36a..ca5a873 100644
|
||||
--- a/Modules/socketmodule.h
|
||||
+++ b/Modules/socketmodule.h
|
||||
@@ -54,6 +54,10 @@ typedef int socklen_t;
|
||||
# undef AF_NETLINK
|
||||
#endif
|
||||
|
||||
+#if defined(__HAIKU__)
|
||||
+#undef HAVE_BLUETOOTH_BLUETOOTH_H
|
||||
+#endif
|
||||
+
|
||||
#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/rfcomm.h>
|
||||
diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c
|
||||
index 1601ec0..4c98fe8 100644
|
||||
--- a/Modules/spwdmodule.c
|
||||
+++ b/Modules/spwdmodule.c
|
||||
@@ -9,6 +9,7 @@
|
||||
#ifdef HAVE_SHADOW_H
|
||||
#include <shadow.h>
|
||||
#endif
|
||||
+#include <errno.h>
|
||||
|
||||
#include "clinic/spwdmodule.c.h"
|
||||
|
||||
@@ -138,7 +139,12 @@ spwd_getspnam_impl(PyObject *module, PyObject *arg)
|
||||
if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1)
|
||||
goto out;
|
||||
if ((p = getspnam(name)) == NULL) {
|
||||
+// Haiku sets ENOENT if invalid user is specified. Ignore it to make KeyError is set.
|
||||
+#ifdef __HAIKU__
|
||||
+ if (errno != 0 && errno != ENOENT)
|
||||
+#else
|
||||
if (errno != 0)
|
||||
+#endif
|
||||
PyErr_SetFromErrno(PyExc_OSError);
|
||||
else
|
||||
PyErr_SetString(PyExc_KeyError, "getspnam(): name not found");
|
||||
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
|
||||
index d7b0bbd..ee9bebc 100644
|
||||
--- a/Python/bltinmodule.c
|
||||
+++ b/Python/bltinmodule.c
|
||||
@@ -17,7 +17,7 @@
|
||||
Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
|
||||
values for Py_FileSystemDefaultEncoding!
|
||||
*/
|
||||
-#if defined(__APPLE__)
|
||||
+#if defined(__APPLE__) || defined(__HAIKU__)
|
||||
const char *Py_FileSystemDefaultEncoding = "utf-8";
|
||||
int Py_HasFileSystemDefaultEncoding = 1;
|
||||
#elif defined(MS_WINDOWS)
|
||||
diff --git a/Tools/scripts/h2py.py b/Tools/scripts/h2py.py
|
||||
index 4363c0c..40994b0 100755
|
||||
--- a/Tools/scripts/h2py.py
|
||||
+++ b/Tools/scripts/h2py.py
|
||||
@@ -49,12 +49,15 @@ except KeyError:
|
||||
try:
|
||||
searchdirs=os.environ['INCLUDE'].split(';')
|
||||
except KeyError:
|
||||
- searchdirs=['/usr/include']
|
||||
- try:
|
||||
- searchdirs.insert(0, os.path.join('/usr/include',
|
||||
+ if sys.platform.find("beos") == 0 or sys.platform.find("haiku1") == 0:
|
||||
+ searchdirs=os.environ['BEINCLUDES'].split(';')
|
||||
+ else:
|
||||
+ searchdirs=['/usr/include']
|
||||
+ try:
|
||||
+ searchdirs.insert(0, os.path.join('/usr/include',
|
||||
os.environ['MULTIARCH']))
|
||||
- except KeyError:
|
||||
- pass
|
||||
+ except KeyError:
|
||||
+ pass
|
||||
|
||||
def main():
|
||||
global filedict
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3f2459a..62bc0c0 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1151,6 +1151,16 @@ if test $enable_shared = "yes"; then
|
||||
PY3LIBRARY=libpython3.so
|
||||
fi
|
||||
;;
|
||||
+ Haiku*)
|
||||
+ LDLIBRARY='libpython$(LDVERSION).so'
|
||||
+ BLDLIBRARY='-L. -lpython$(LDVERSION)'
|
||||
+ RUNSHARED=LIBRARY_PATH=`pwd`${LIBRARY_PATH:+:${LIBRARY_PATH}}
|
||||
+ INSTSONAME="$LDLIBRARY".$SOVERSION
|
||||
+ if test "$with_pydebug" != yes
|
||||
+ then
|
||||
+ PY3LIBRARY=libpython3.so
|
||||
+ fi
|
||||
+ ;;
|
||||
hp*|HP*)
|
||||
case `uname -m` in
|
||||
ia64)
|
||||
@@ -1226,6 +1236,7 @@ AC_PROG_MKDIR_P
|
||||
AC_SUBST(LN)
|
||||
if test -z "$LN" ; then
|
||||
case $ac_sys_system in
|
||||
+ Haiku*) LN="ln -s";;
|
||||
CYGWIN*) LN="ln -s";;
|
||||
*) LN=ln;;
|
||||
esac
|
||||
@@ -2611,7 +2622,7 @@ then
|
||||
BLDSHARED="$LDSHARED"
|
||||
fi
|
||||
;;
|
||||
- Linux*|GNU*|QNX*)
|
||||
+ Linux*|GNU*|QNX*|Haiku*)
|
||||
LDSHARED='$(CC) -shared'
|
||||
LDCXXSHARED='$(CXX) -shared';;
|
||||
FreeBSD*)
|
||||
@@ -2678,7 +2689,7 @@ then
|
||||
else CCSHARED="+z";
|
||||
fi;;
|
||||
Linux-android*) ;;
|
||||
- Linux*|GNU*) CCSHARED="-fPIC";;
|
||||
+ Linux*|GNU*|Haiku*) CCSHARED="-fPIC";;
|
||||
FreeBSD*|NetBSD*|OpenBSD*|DragonFly*) CCSHARED="-fPIC";;
|
||||
OpenUNIX*|UnixWare*)
|
||||
if test "$GCC" = "yes"
|
||||
@@ -2704,7 +2715,7 @@ then
|
||||
LINKFORSHARED="-Wl,-E -Wl,+s";;
|
||||
# LINKFORSHARED="-Wl,-E -Wl,+s -Wl,+b\$(BINLIBDEST)/lib-dynload";;
|
||||
Linux-android*) LINKFORSHARED="-pie -Xlinker -export-dynamic";;
|
||||
- Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
||||
+ Linux*|GNU*|Haiku*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
||||
# -u libsys_s pulls in all symbols in libsys
|
||||
Darwin/*)
|
||||
LINKFORSHARED="$extra_undefs -framework CoreFoundation"
|
||||
@@ -2949,6 +2960,12 @@ LDFLAGS="-fsanitize=address $LDFLAGS"
|
||||
AC_CHECK_LIB(nsl, t_open, [LIBS="-lnsl $LIBS"]) # SVR4
|
||||
AC_CHECK_LIB(socket, socket, [LIBS="-lsocket $LIBS"], [], $LIBS) # SVR4 sockets
|
||||
|
||||
+# Haiku's sockets are stashed in libnetwork.
|
||||
+case "$ac_sys_system" in
|
||||
+ Haiku*)
|
||||
+ AC_CHECK_LIB(network, socket, [LIBS="-lnetwork $LIBS"], [], $LIBS);;
|
||||
+esac
|
||||
+
|
||||
AC_MSG_CHECKING(for --with-libs)
|
||||
AC_ARG_WITH(libs,
|
||||
AS_HELP_STRING([--with-libs='lib1 ...'], [link against additional libs]),
|
||||
@@ -4276,6 +4293,7 @@ fi],
|
||||
AC_SUBST(LIBM)
|
||||
case $ac_sys_system in
|
||||
Darwin) ;;
|
||||
+Haiku) ;;
|
||||
*) LIBM=-lm
|
||||
esac
|
||||
AC_MSG_CHECKING(for --with-libm=STRING)
|
||||
diff --git a/setup.py b/setup.py
|
||||
index b4357e3..df227d1 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -625,6 +625,11 @@ class PyBuildExt(build_ext):
|
||||
|
||||
srcdir = sysconfig.get_config_var('srcdir')
|
||||
|
||||
+ # Haiku-specific library locations
|
||||
+ if host_platform == 'haiku1':
|
||||
+ inc_dirs += ['/boot/develop/headers/posix',
|
||||
+ '/boot/system/develop/headers']
|
||||
+ lib_dirs += ['/boot/system/develop/lib']
|
||||
# OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
|
||||
if host_platform in ['osf1', 'unixware7', 'openunix8']:
|
||||
lib_dirs += ['/usr/ccs/lib']
|
||||
@@ -667,12 +672,12 @@ class PyBuildExt(build_ext):
|
||||
exts.append( Extension('cmath', ['cmathmodule.c'],
|
||||
extra_objects=[shared_math],
|
||||
depends=['_math.h', shared_math],
|
||||
- libraries=['m']) )
|
||||
+ libraries=[]) )
|
||||
# math library functions, e.g. sin()
|
||||
exts.append( Extension('math', ['mathmodule.c'],
|
||||
extra_objects=[shared_math],
|
||||
depends=['_math.h', shared_math],
|
||||
- libraries=['m']) )
|
||||
+ libraries=[]) )
|
||||
|
||||
# time libraries: librt may be needed for clock_gettime()
|
||||
time_libs = []
|
||||
@@ -686,7 +691,7 @@ class PyBuildExt(build_ext):
|
||||
# libm is needed by delta_new() that uses round() and by accum() that
|
||||
# uses modf().
|
||||
exts.append( Extension('_datetime', ['_datetimemodule.c'],
|
||||
- libraries=['m']) )
|
||||
+ libraries=[]) )
|
||||
# random number generator implemented in C
|
||||
exts.append( Extension("_random", ["_randommodule.c"]) )
|
||||
# bisect
|
||||
@@ -777,7 +782,7 @@ class PyBuildExt(build_ext):
|
||||
#
|
||||
# audioop needs libm for floor() in multiple functions.
|
||||
exts.append( Extension('audioop', ['audioop.c'],
|
||||
- libraries=['m']) )
|
||||
+ libraries=[]) )
|
||||
|
||||
# readline
|
||||
do_readline = self.compiler.find_library_file(lib_dirs, 'readline')
|
||||
@@ -1976,7 +1981,7 @@ class PyBuildExt(build_ext):
|
||||
# function my_sqrt() needs libm for sqrt()
|
||||
ext_test = Extension('_ctypes_test',
|
||||
sources=['_ctypes/_ctypes_test.c'],
|
||||
- libraries=['m'])
|
||||
+ libraries=[])
|
||||
self.extensions.extend([ext, ext_test])
|
||||
|
||||
if host_platform == 'darwin':
|
||||
@@ -2024,7 +2029,7 @@ class PyBuildExt(build_ext):
|
||||
'Modules',
|
||||
'_decimal',
|
||||
'libmpdec'))]
|
||||
- libraries = ['m']
|
||||
+ libraries = []
|
||||
sources = [
|
||||
'_decimal/_decimal.c',
|
||||
'_decimal/libmpdec/basearith.c',
|
||||
@@ -2187,7 +2192,7 @@ class PyBuildExt(build_ext):
|
||||
return ssl_ext, hashlib_ext
|
||||
|
||||
def _detect_nis(self, inc_dirs, lib_dirs):
|
||||
- if host_platform in {'win32', 'cygwin', 'qnx6'}:
|
||||
+ if host_platform in {'win32', 'cygwin', 'qnx6', 'haiku1'}:
|
||||
return None
|
||||
|
||||
libs = []
|
||||
|
||||
From d9e7a5386b6668d9bf46b1ade6356322ea11fa41 Mon Sep 17 00:00:00 2001
|
||||
From: Jerome Duval <jerome.duval@gmail.com>
|
||||
Date: Sun, 16 Apr 2017 10:05:42 +0200
|
||||
Subject: fix for negative errnos
|
||||
|
||||
|
||||
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
|
||||
index 290ae44..95ec9d3 100644
|
||||
--- a/Lib/subprocess.py
|
||||
+++ b/Lib/subprocess.py
|
||||
@@ -1508,6 +1508,8 @@ class Popen(object):
|
||||
SubprocessError)
|
||||
if issubclass(child_exception_type, OSError) and hex_errno:
|
||||
errno_num = int(hex_errno, 16)
|
||||
+ if sys.platform.startswith('haiku'):
|
||||
+ errno_num = -errno_num;
|
||||
child_exec_never_called = (err_msg == "noexec")
|
||||
if child_exec_never_called:
|
||||
err_msg = ""
|
||||
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
|
||||
index fe0e554..d2a0d52 100644
|
||||
--- a/Modules/_posixsubprocess.c
|
||||
+++ b/Modules/_posixsubprocess.c
|
||||
@@ -534,6 +534,10 @@ error:
|
||||
char *cur;
|
||||
_Py_write_noraise(errpipe_write, "OSError:", 8);
|
||||
cur = hex_errno + sizeof(hex_errno);
|
||||
+#ifdef __HAIKU__
|
||||
+ if (saved_errno < 0)
|
||||
+ saved_errno = -saved_errno;
|
||||
+#endif
|
||||
while (saved_errno != 0 && cur != hex_errno) {
|
||||
*--cur = Py_hexdigits[saved_errno % 16];
|
||||
saved_errno /= 16;
|
||||
--
|
||||
2.19.1
|
||||
|
||||
|
||||
From f9408c3d0f3242fa21cb06278ded8b684eafd805 Mon Sep 17 00:00:00 2001
|
||||
From: Philippe Houdoin <philippe.houdoin@gmail.com>
|
||||
Date: Wed, 24 May 2017 11:09:43 +0000
|
||||
Subject: Implement CTypes's find_library for Haiku
|
||||
|
||||
|
||||
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
||||
index 339ae8a..d537963 100644
|
||||
--- a/Lib/ctypes/util.py
|
||||
+++ b/Lib/ctypes/util.py
|
||||
@@ -252,6 +252,56 @@ elif os.name == "posix":
|
||||
def find_library(name, is64 = False):
|
||||
return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name))
|
||||
|
||||
+ elif sys.platform.startswith("haiku"):
|
||||
+
|
||||
+ def _num_version(libname):
|
||||
+ # "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ]
|
||||
+ parts = libname.split('.')
|
||||
+ nums = []
|
||||
+ try:
|
||||
+ while parts:
|
||||
+ nums.insert(0, int(parts.pop()))
|
||||
+ except ValueError:
|
||||
+ pass
|
||||
+ return nums or [sys.maxint]
|
||||
+
|
||||
+ def find_library(name):
|
||||
+ if name in ('c', 'm'):
|
||||
+ return find_library('root')
|
||||
+ for directory in os.environ['LIBRARY_PATH'].split(os.pathsep):
|
||||
+ if directory.startswith("%A/"):
|
||||
+ directory = directory.replace('%A',
|
||||
+ os.path.dirname(os.path.abspath(sys.argv[0] or os.getcwd())))
|
||||
+
|
||||
+ if not os.path.isdir(directory):
|
||||
+ continue
|
||||
+
|
||||
+ # try direct match
|
||||
+ fname = os.path.join(directory, name)
|
||||
+ if os.path.isfile(fname):
|
||||
+ return fname
|
||||
+
|
||||
+ fname = os.path.join(directory, 'lib%s.so' % name)
|
||||
+ if os.path.isfile(fname):
|
||||
+ return fname
|
||||
+
|
||||
+ # no exact matching in this directroy
|
||||
+ # collect versioned candidates, if any
|
||||
+ candidates = []
|
||||
+ pattern = re.compile(r'lib%s\.so\.\S+' % re.escape(name))
|
||||
+ for entry in os.listdir(directory):
|
||||
+ if not os.path.isfile(os.path.join(directory, entry)):
|
||||
+ continue
|
||||
+
|
||||
+ if re.match(pattern, entry):
|
||||
+ candidates.append(os.path.join(directory, entry))
|
||||
+
|
||||
+ if candidates:
|
||||
+ # return latest version found
|
||||
+ candidates.sort(key=_num_version)
|
||||
+ return candidates[-1]
|
||||
+
|
||||
+ return None
|
||||
else:
|
||||
|
||||
def _findSoname_ldconfig(name):
|
||||
@@ -349,6 +399,12 @@ def test():
|
||||
print(f"crypt\t:: {cdll.LoadLibrary(find_library('crypt'))}")
|
||||
print(f"crypto\t:: {find_library('crypto')}")
|
||||
print(f"crypto\t:: {cdll.LoadLibrary(find_library('crypto'))}")
|
||||
+ elif sys.platform.startswith("haiku"):
|
||||
+ print(find_library("libbz2.so.1.0"))
|
||||
+ print(find_library("tracker"))
|
||||
+ print(find_library("media"))
|
||||
+ print(cdll.LoadLibrary(find_library("tracker")))
|
||||
+ print(cdll.LoadLibrary("libmedia.so"))
|
||||
else:
|
||||
print(cdll.LoadLibrary("libm.so"))
|
||||
print(cdll.LoadLibrary("libcrypt.so"))
|
||||
--
|
||||
2.19.1
|
||||
|
||||
41
dev-lang/python/patches/python3_x86-3.7.2.patchset
Normal file
41
dev-lang/python/patches/python3_x86-3.7.2.patchset
Normal file
@@ -0,0 +1,41 @@
|
||||
From 80df8f959af84ea3223ae9136ac4568c59420311 Mon Sep 17 00:00:00 2001
|
||||
From: Adrien Destugues <pulkomandy@pulkomandy.tk>
|
||||
Date: Sat, 3 Feb 2018 11:33:49 +0100
|
||||
Subject: Fix include paths for secondary x86
|
||||
|
||||
This helps python find libraries and dependencies properly (openssl,
|
||||
etc), so a few more modules are enabled.
|
||||
|
||||
It also fixes a crash because python would try to load the gcc2 libroot
|
||||
even when built with gcc5.
|
||||
|
||||
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
||||
index d537963..fdbb8f4 100644
|
||||
--- a/Lib/ctypes/util.py
|
||||
+++ b/Lib/ctypes/util.py
|
||||
@@ -273,6 +273,7 @@ elif os.name == "posix":
|
||||
directory = directory.replace('%A',
|
||||
os.path.dirname(os.path.abspath(sys.argv[0] or os.getcwd())))
|
||||
|
||||
+ directory = os.path.join(directory, "x86")
|
||||
if not os.path.isdir(directory):
|
||||
continue
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index 21b0de2..33ba3f3 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -628,8 +628,8 @@ class PyBuildExt(build_ext):
|
||||
# Haiku-specific library locations
|
||||
if host_platform == 'haiku1':
|
||||
inc_dirs += ['/boot/develop/headers/posix',
|
||||
- '/boot/system/develop/headers']
|
||||
- lib_dirs += ['/boot/system/develop/lib']
|
||||
+ '/boot/system/develop/headers/x86']
|
||||
+ lib_dirs += ['/boot/system/develop/lib/x86']
|
||||
# OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
|
||||
if host_platform in ['osf1', 'unixware7', 'openunix8']:
|
||||
lib_dirs += ['/usr/ccs/lib']
|
||||
--
|
||||
2.15.1
|
||||
|
||||
159
dev-lang/python/python3-3.7.2.recipe
Normal file
159
dev-lang/python/python3-3.7.2.recipe
Normal file
@@ -0,0 +1,159 @@
|
||||
SUMMARY="An interpreted, interactive, object-oriented programming language"
|
||||
DESCRIPTION="
|
||||
Python is a programming language that lets you work more quickly and integrate \
|
||||
your systems more effectively. You can learn to use Python and see almost \
|
||||
immediate gains in productivity and lower maintenance costs.
|
||||
Python runs on Windows, Linux/Unix, Mac OS X, and has been ported to the Java \
|
||||
and .NET virtual machines.
|
||||
Python is free to use, even for commercial products, because of its \
|
||||
OSI-approved open source license.
|
||||
"
|
||||
HOMEPAGE="https://www.python.org"
|
||||
LICENSE="Python"
|
||||
COPYRIGHT="1990-2018 Python Software Foundation"
|
||||
REVISION="1"
|
||||
SOURCE_URI="https://www.python.org/ftp/python/$portVersion/Python-$portVersion.tar.xz"
|
||||
CHECKSUM_SHA256="d83fe8ce51b1bb48bbcf0550fd265b9a75cdfdfa93f916f9e700aef8444bf1bb"
|
||||
SOURCE_DIR="Python-$portVersion"
|
||||
PATCHES="python3-$portVersion.patchset"
|
||||
if [ "$secondaryArchSuffix" = _x86 ] ; then
|
||||
PATCHES+="
|
||||
python3_x86-$portVersion.patchset
|
||||
"
|
||||
fi
|
||||
|
||||
ARCHITECTURES=" !x86_gcc2 x86 x86_64"
|
||||
SECONDARY_ARCHITECTURES="x86"
|
||||
|
||||
# On x86_gcc2 we don't want to install the commands in bin/<arch>/, but in bin/.
|
||||
commandSuffix=$secondaryArchSuffix
|
||||
commandBinDir=$binDir
|
||||
if [ "$targetArchitecture" = x86_gcc2 ]; then
|
||||
commandSuffix=
|
||||
commandBinDir=$prefix/bin
|
||||
fi
|
||||
|
||||
PROVIDES="
|
||||
python3$secondaryArchSuffix = $portVersion compat >= 3.7
|
||||
cmd:2to3 = $portVersion compat >= 3.7
|
||||
cmd:2to3_3.7 = $portVersion compat >= 3.7
|
||||
cmd:idle = $portVersion compat >= 3.7
|
||||
cmd:idle3 = $portVersion compat >= 3.7
|
||||
cmd:idle3.7 = $portVersion compat >= 3.7
|
||||
cmd:pydoc3 = $portVersion compat >= 3.7
|
||||
cmd:pydoc3.7 = $portVersion compat >= 3.7
|
||||
cmd:python3 = $portVersion compat >= 3.7
|
||||
cmd:python3_config = $portVersion compat >= 3.7
|
||||
cmd:python3.7 = $portVersion compat >= 3.7
|
||||
cmd:python3.7_config = $portVersion compat >= 3.7
|
||||
cmd:python3.7m = $portVersion compat >= 3.7
|
||||
cmd:python3.7m_config = $portVersion compat >= 3.7
|
||||
cmd:pyvenv = $portVersion compat >= 3.7
|
||||
cmd:pyvenv_3.7 = $portVersion compat >= 3.7
|
||||
devel:libpython3.7m$secondaryArchSuffix = 1.0
|
||||
lib:libpython3.7m$secondaryArchSuffix = 1.0
|
||||
"
|
||||
REQUIRES="
|
||||
haiku$secondaryArchSuffix
|
||||
cmd:file
|
||||
lib:libbz2$secondaryArchSuffix
|
||||
lib:libexpat$secondaryArchSuffix
|
||||
lib:libffi$secondaryArchSuffix
|
||||
lib:liblzma$secondaryArchSuffix
|
||||
lib:libncurses$secondaryArchSuffix
|
||||
lib:libssl$secondaryArchSuffix
|
||||
lib:libreadline$secondaryArchSuffix
|
||||
lib:libsqlite3$secondaryArchSuffix
|
||||
lib:libz$secondaryArchSuffix
|
||||
"
|
||||
BUILD_REQUIRES="
|
||||
devel:libbz2$secondaryArchSuffix
|
||||
devel:libexpat$secondaryArchSuffix
|
||||
devel:libffi$secondaryArchSuffix
|
||||
devel:liblzma$secondaryArchSuffix
|
||||
devel:libncurses$secondaryArchSuffix
|
||||
devel:libssl$secondaryArchSuffix
|
||||
devel:libreadline$secondaryArchSuffix
|
||||
devel:libsqlite3$secondaryArchSuffix
|
||||
devel:libz$secondaryArchSuffix
|
||||
"
|
||||
BUILD_PREREQUIRES="
|
||||
haiku${secondaryArchSuffix}_devel
|
||||
cmd:aclocal
|
||||
cmd:autoconf
|
||||
cmd:find
|
||||
cmd:gcc$secondaryArchSuffix
|
||||
cmd:ld$secondaryArchSuffix
|
||||
cmd:libtoolize
|
||||
cmd:pkg_config$secondaryArchSuffix
|
||||
cmd:make
|
||||
cmd:python
|
||||
"
|
||||
|
||||
GLOBAL_WRITABLE_FILES="
|
||||
non-packaged/lib/python3.7/site-packages directory keep-old
|
||||
"
|
||||
|
||||
BUILD()
|
||||
{
|
||||
export CFLAGS="-D_BSD_SOURCE"
|
||||
rm -Rf Modules/expat
|
||||
|
||||
libtoolize --force --copy --install
|
||||
aclocal
|
||||
autoconf
|
||||
export OPT=""
|
||||
runConfigure --omit-dirs binDir,includeDir ./configure \
|
||||
--enable-shared --without-ensurepip --with-system-ffi \
|
||||
--with-system-expat --bindir=$commandBinDir --includedir=$developDir/headers
|
||||
|
||||
# prevent make from rebuilding stuff that requires python
|
||||
touch Parser/asdl* Python/Python-ast.c Include/Python-ast.h
|
||||
|
||||
rm -f python
|
||||
|
||||
make $jobArgs
|
||||
}
|
||||
|
||||
INSTALL()
|
||||
{
|
||||
make install
|
||||
|
||||
rm $libDir/libpython3.so
|
||||
|
||||
if [ "$targetArchitecture" = x86_gcc2 ]; then
|
||||
# On x86_gcc2, move lib-dynload to lib/python3.x/
|
||||
mv $libDir/python3.7/lib-dynload $prefix/lib/python3.7/
|
||||
fi
|
||||
prepareInstalledDevelLibs libpython3.7m
|
||||
fixPkgconfig
|
||||
if [ "$targetArchitecture" = x86_gcc2 ]; then
|
||||
# fix pkgconfig to match configure flags
|
||||
sed -i -e 's,headers/x86,headers,' $developLibDir/pkgconfig/python*.pc
|
||||
fi
|
||||
|
||||
mkdir -p $prefix/lib/python3.7/vendor-packages
|
||||
echo 'This directory contains packaged python modules.' \
|
||||
>$prefix/lib/python3.7/vendor-packages/README
|
||||
|
||||
mkdir -p $prefix/non-packaged/lib/python3.7
|
||||
mv $prefix/lib/python3.7/site-packages $prefix/non-packaged/lib/python3.7/
|
||||
|
||||
# drop testsuite altogether; move to a separate package if needed
|
||||
cd $prefix/lib/python3.7
|
||||
rm -rf ctypes/test distutils/tests idlelib/idle_test lib2to3/tests \
|
||||
sqlite3/test test tkinter/test unittest/test
|
||||
|
||||
# TODO: drop __pycache__ folders as well?
|
||||
find . -name __pycache__ | xargs rm -rf
|
||||
}
|
||||
|
||||
TEST()
|
||||
{
|
||||
cd Lib/test
|
||||
rm -f test_asynchat.py # this one stalls, so skip it for now
|
||||
rm -f test_multiprocessing.py # this one stalls, so skip it for now
|
||||
|
||||
cd ../..
|
||||
make $jobArgs test
|
||||
}
|
||||
Reference in New Issue
Block a user