mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-09 13:20:08 +02:00
1212 lines
43 KiB
Plaintext
1212 lines
43 KiB
Plaintext
From c390e5ddb4dcd7ee5fe33f9f0bfee3663112bba5 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sun, 8 Oct 2023 01:02:25 -0300
|
|
Subject: initial Haiku patch
|
|
|
|
Based on the patch from Jerome Duval, modified to make it apply cleanly
|
|
over 3.12's sources.
|
|
|
|
Parts of that original patch were split into specific commit/patches.
|
|
|
|
diff --git a/Include/pyport.h b/Include/pyport.h
|
|
index 2ba81a4..8ba7902 100644
|
|
--- a/Include/pyport.h
|
|
+++ b/Include/pyport.h
|
|
@@ -506,7 +506,7 @@ extern "C" {
|
|
# define _Py_FORCE_UTF8_LOCALE
|
|
#endif
|
|
|
|
-#if defined(_Py_FORCE_UTF8_LOCALE) || defined(__APPLE__)
|
|
+#if defined(_Py_FORCE_UTF8_LOCALE) || defined(__APPLE__) || defined(__HAIKU__)
|
|
// Use UTF-8 as the filesystem encoding.
|
|
// See PyUnicode_DecodeFSDefaultAndSize(), PyUnicode_EncodeFSDefault(),
|
|
// Py_DecodeLocale() and Py_EncodeLocale().
|
|
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
|
index 03ca4cb..300f4c2 100644
|
|
--- a/Makefile.pre.in
|
|
+++ b/Makefile.pre.in
|
|
@@ -149,7 +149,7 @@ BINDIR= @bindir@
|
|
LIBDIR= @libdir@
|
|
MANDIR= @mandir@
|
|
INCLUDEDIR= @includedir@
|
|
-CONFINCLUDEDIR= $(exec_prefix)/include
|
|
+CONFINCLUDEDIR= $(INCLUDEDIR)
|
|
PLATLIBDIR= @PLATLIBDIR@
|
|
SCRIPTDIR= $(prefix)/$(PLATLIBDIR)
|
|
# executable name for shebangs
|
|
diff --git a/Modules/resource.c b/Modules/resource.c
|
|
index 3fe18e7..d0e1872 100644
|
|
--- a/Modules/resource.c
|
|
+++ b/Modules/resource.c
|
|
@@ -126,6 +126,7 @@ resource_getrusage_impl(PyObject *module, int who)
|
|
PyFloat_FromDouble(doubletime(ru.ru_utime)));
|
|
PyStructSequence_SetItem(result, 1,
|
|
PyFloat_FromDouble(doubletime(ru.ru_stime)));
|
|
+#ifndef __HAIKU__
|
|
PyStructSequence_SetItem(result, 2, PyLong_FromLong(ru.ru_maxrss));
|
|
PyStructSequence_SetItem(result, 3, PyLong_FromLong(ru.ru_ixrss));
|
|
PyStructSequence_SetItem(result, 4, PyLong_FromLong(ru.ru_idrss));
|
|
@@ -140,6 +141,22 @@ resource_getrusage_impl(PyObject *module, int who)
|
|
PyStructSequence_SetItem(result, 13, PyLong_FromLong(ru.ru_nsignals));
|
|
PyStructSequence_SetItem(result, 14, PyLong_FromLong(ru.ru_nvcsw));
|
|
PyStructSequence_SetItem(result, 15, PyLong_FromLong(ru.ru_nivcsw));
|
|
+#else
|
|
+ PyStructSequence_SetItem(result, 2, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 3, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 4, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 5, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 6, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 7, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 8, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 9, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 10, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 11, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 12, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 13, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 14, PyLong_FromLong(0));
|
|
+ PyStructSequence_SetItem(result, 15, PyLong_FromLong(0));
|
|
+#endif
|
|
|
|
if (PyErr_Occurred()) {
|
|
Py_DECREF(result);
|
|
@@ -387,19 +404,19 @@ resource_exec(PyObject *module)
|
|
}
|
|
|
|
/* insert constants */
|
|
-#ifdef RLIMIT_CPU
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_CPU)
|
|
ADD_INT(module, RLIMIT_CPU);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_FSIZE
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_FSIZE)
|
|
ADD_INT(module, RLIMIT_FSIZE);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_DATA
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_DATA)
|
|
ADD_INT(module, RLIMIT_DATA);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_STACK
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_STACK)
|
|
ADD_INT(module, RLIMIT_STACK);
|
|
#endif
|
|
|
|
@@ -411,31 +428,31 @@ resource_exec(PyObject *module)
|
|
ADD_INT(module, RLIMIT_NOFILE);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_OFILE
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_OFILE)
|
|
ADD_INT(module, RLIMIT_OFILE);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_VMEM
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_VMEM)
|
|
ADD_INT(module, RLIMIT_VMEM);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_AS
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_AS)
|
|
ADD_INT(module, RLIMIT_AS);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_RSS
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_RSS)
|
|
ADD_INT(module, RLIMIT_RSS);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_NPROC
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_NPROC)
|
|
ADD_INT(module, RLIMIT_NPROC);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_MEMLOCK
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_MEMLOCK)
|
|
ADD_INT(module, RLIMIT_MEMLOCK);
|
|
#endif
|
|
|
|
-#ifdef RLIMIT_SBSIZE
|
|
+#if !defined(__HAIKU__) && defined(RLIMIT_SBSIZE)
|
|
ADD_INT(module, RLIMIT_SBSIZE);
|
|
#endif
|
|
|
|
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
|
|
index 09fd70f..97e15d2 100644
|
|
--- a/Modules/socketmodule.h
|
|
+++ b/Modules/socketmodule.h
|
|
@@ -113,6 +113,10 @@ typedef int socklen_t;
|
|
# undef AF_QIPCRTR
|
|
#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/configure.ac b/configure.ac
|
|
index a764028..f77214b 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -1573,6 +1573,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)
|
|
@@ -1720,6 +1730,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
|
|
@@ -3587,7 +3598,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/*|iOS/*)
|
|
LINKFORSHARED="$extra_undefs -framework CoreFoundation"
|
|
@@ -5804,6 +5815,7 @@ AC_CHECK_FUNC([__fpu_control],
|
|
AC_SUBST([LIBM])
|
|
case $ac_sys_system in
|
|
Darwin) ;;
|
|
+Haiku) ;;
|
|
*) LIBM=-lm
|
|
esac
|
|
AC_MSG_CHECKING([for --with-libm=STRING])
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 6ff61441a930b2e3dc5ed1cbe6cff0012a7fd8e5 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 b2dcb14..7a20db7 100644
|
|
--- a/Lib/subprocess.py
|
|
+++ b/Lib/subprocess.py
|
|
@@ -1951,6 +1951,8 @@ class Popen:
|
|
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;
|
|
if err_msg == "noexec:chdir":
|
|
err_msg = ""
|
|
# The error must be from chdir(cwd).
|
|
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
|
|
index daec4ad..1647199 100644
|
|
--- a/Modules/_posixsubprocess.c
|
|
+++ b/Modules/_posixsubprocess.c
|
|
@@ -841,6 +841,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.45.2
|
|
|
|
|
|
From f97a10b6431b381ed13acc2dcb3b618694920f1c Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sun, 8 Oct 2023 20:06:31 -0300
|
|
Subject: Implement CTypes's find_library for Haiku
|
|
|
|
This combines:
|
|
- the original patch by Philippe Houdoin <philippe.houdoin@gmail.com>
|
|
- A slight variation of Adrien Destugues' fix for x86_gcc2.
|
|
|
|
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
|
index 117bf06..6301aa2 100644
|
|
--- a/Lib/ctypes/util.py
|
|
+++ b/Lib/ctypes/util.py
|
|
@@ -1,4 +1,5 @@
|
|
import os
|
|
+import platform
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
@@ -277,6 +278,60 @@ 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())))
|
|
+
|
|
+ # Are we on x86 32 bits?:
|
|
+ if platform.machine() == 'BePC':
|
|
+ directory = os.path.join(directory, "x86")
|
|
+
|
|
+ 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):
|
|
@@ -379,6 +434,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.45.2
|
|
|
|
|
|
From b438ba3f454c40ef6f0b86ab86e206750782baac Mon Sep 17 00:00:00 2001
|
|
From: Philipp Wolfer <phil@parolu.io>
|
|
Date: Mon, 23 Sep 2019 09:14:58 +0200
|
|
Subject: webbrowser: Support for default browsers on Haiku
|
|
|
|
|
|
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
|
|
index 2f9555a..90bea57 100755
|
|
--- a/Lib/webbrowser.py
|
|
+++ b/Lib/webbrowser.py
|
|
@@ -496,6 +496,12 @@ def register_standard_browsers():
|
|
# SerenityOS webbrowser, simply called "Browser".
|
|
register("Browser", None, BackgroundBrowser("Browser"))
|
|
|
|
+ if sys.platform[:5] == "haiku":
|
|
+ # First try to use the default configured browser
|
|
+ register("haiku-default", None, GenericBrowser("open"))
|
|
+ # Fall back to WebPositive as the standard browser of Haiku
|
|
+ register("webpositive", None, BackgroundBrowser("WebPositive"))
|
|
+
|
|
if sys.platform[:3] == "win":
|
|
# First try to use the default Windows browser
|
|
register("windows-default", WindowsDefault)
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 4c8eaa2208b385ec1b7031a7d046a05ca83799a1 Mon Sep 17 00:00:00 2001
|
|
From: Jerome Duval <jerome.duval@gmail.com>
|
|
Date: Fri, 4 Oct 2019 22:02:35 +0200
|
|
Subject: since 3.8, don't reinit locks on fork.
|
|
|
|
|
|
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
|
|
index aa9b79d..b99e1e0 100644
|
|
--- a/Lib/logging/__init__.py
|
|
+++ b/Lib/logging/__init__.py
|
|
@@ -253,7 +253,7 @@ def _afterFork():
|
|
|
|
# Prevent a held logging lock from blocking a child from logging.
|
|
|
|
-if not hasattr(os, 'register_at_fork'): # Windows and friends.
|
|
+if sys.platform.startswith('haiku') or not hasattr(os, 'register_at_fork'): # Windows and friends.
|
|
def _register_at_fork_reinit_lock(instance):
|
|
pass # no-op when os.register_at_fork does not exist.
|
|
else:
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 3150dfbd38f1d63d318b80f13caf1eb1d6391ee6 Mon Sep 17 00:00:00 2001
|
|
From: Jerome Duval <jerome.duval@gmail.com>
|
|
Date: Fri, 15 May 2020 15:20:57 +0200
|
|
Subject: handle errors returned by internal_connect()
|
|
|
|
upstream bug #40628 by Ryan C. Gordon
|
|
|
|
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
|
|
index 1c0bc79..e8d1cf2 100644
|
|
--- a/Modules/socketmodule.c
|
|
+++ b/Modules/socketmodule.c
|
|
@@ -3483,7 +3483,7 @@ sock_connect(PySocketSockObject *s, PyObject *addro)
|
|
}
|
|
|
|
res = internal_connect(s, SAS2SA(&addrbuf), addrlen, 1);
|
|
- if (res < 0)
|
|
+ if (res == -1)
|
|
return NULL;
|
|
|
|
Py_RETURN_NONE;
|
|
@@ -3514,7 +3514,7 @@ sock_connect_ex(PySocketSockObject *s, PyObject *addro)
|
|
}
|
|
|
|
res = internal_connect(s, SAS2SA(&addrbuf), addrlen, 0);
|
|
- if (res < 0)
|
|
+ if (res == -1)
|
|
return NULL;
|
|
|
|
return PyLong_FromLong((long) res);
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 202daa413c01b94425fd55d54a82995055530d40 Mon Sep 17 00:00:00 2001
|
|
From: Jerome Duval <jerome.duval@gmail.com>
|
|
Date: Mon, 19 Oct 2020 18:03:09 +0200
|
|
Subject: ttyname_r can use MAXPATHLEN
|
|
|
|
|
|
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
|
index a09305c..75a52c8 100644
|
|
--- a/Modules/posixmodule.c
|
|
+++ b/Modules/posixmodule.c
|
|
@@ -3311,11 +3311,14 @@ static PyObject *
|
|
os_ttyname_impl(PyObject *module, int fd)
|
|
/*[clinic end generated code: output=c424d2e9d1cd636a input=9ff5a58b08115c55]*/
|
|
{
|
|
-
|
|
+#ifndef __HAIKU__
|
|
long size = sysconf(_SC_TTY_NAME_MAX);
|
|
if (size == -1) {
|
|
return posix_error();
|
|
}
|
|
+#else
|
|
+ long size = MAXPATHLEN;
|
|
+#endif
|
|
char *buffer = (char *)PyMem_RawMalloc(size);
|
|
if (buffer == NULL) {
|
|
return PyErr_NoMemory();
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 72ccb71a32892d02853877b4a64d05cb1b79fa00 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Mon, 24 Oct 2022 20:04:10 -0300
|
|
Subject: Lib/test: require the "largefile" usage flag for I/O heavy tests.
|
|
|
|
The same is done for Windows and macOS already.
|
|
|
|
This avoids needing several GBs of storage to run the tests
|
|
(unless the "largefile" resource usage flag is enabled).
|
|
|
|
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
|
|
index f1f8ce5..895815e 100644
|
|
--- a/Lib/test/test_io.py
|
|
+++ b/Lib/test/test_io.py
|
|
@@ -628,7 +628,7 @@ class IOTest(unittest.TestCase):
|
|
# On Windows and Apple platforms this test consumes large resources; It
|
|
# takes a long time to build the >2 GiB file and takes >2 GiB of disk
|
|
# space therefore the resource must be enabled to run this test.
|
|
- if sys.platform[:3] == 'win' or is_apple:
|
|
+ if sys.platform[:3] == 'win' or is_apple or sys.platform[:5] == 'haiku':
|
|
support.requires(
|
|
'largefile',
|
|
'test requires %s bytes and a long time to run' % self.LARGE)
|
|
diff --git a/Lib/test/test_largefile.py b/Lib/test/test_largefile.py
|
|
index 41f7b70..e4830de 100644
|
|
--- a/Lib/test/test_largefile.py
|
|
+++ b/Lib/test/test_largefile.py
|
|
@@ -273,7 +273,7 @@ def setUpModule():
|
|
# takes a long time to build the >2 GiB file and takes >2 GiB of disk
|
|
# space therefore the resource must be enabled to run this test.
|
|
# If not, nothing after this line stanza will be executed.
|
|
- if sys.platform[:3] == 'win' or sys.platform == 'darwin':
|
|
+ if sys.platform[:3] == 'win' or sys.platform == 'darwin' or sys.platform[:5] == 'haiku':
|
|
requires('largefile',
|
|
'test requires %s bytes and a long time to run' % str(size))
|
|
else:
|
|
diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
|
|
index a1cf538..c04d9e3 100644
|
|
--- a/Lib/test/test_mmap.py
|
|
+++ b/Lib/test/test_mmap.py
|
|
@@ -1144,7 +1144,7 @@ class LargeMmapTests(unittest.TestCase):
|
|
unlink(TESTFN)
|
|
|
|
def _make_test_file(self, num_zeroes, tail):
|
|
- if sys.platform[:3] == 'win' or is_apple:
|
|
+ if sys.platform[:3] == 'win' or is_apple or sys.platform[:5] == 'haiku':
|
|
requires('largefile',
|
|
'test requires %s bytes and a long time to run' % str(0x180000000))
|
|
f = open(TESTFN, 'w+b')
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 666d402e3361e08604e5b7ffe4bdb4ed846bfd36 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sat, 27 Jul 2024 04:51:52 -0300
|
|
Subject: _getuserbase(), getsitepackages(), and INSTALL_SCHEMES for Haiku.
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
This combines (at least parts of) previous "commits" on older ".patchset"s:
|
|
|
|
* Initial Haiku patch.
|
|
* default schemes for Haiku
|
|
|
|
from Jérôme Duval
|
|
|
|
* syncronize both _getuserbase() copies on site.py and sysconfig.py.
|
|
* Add missing 'platinclude' to sysconfig's _INSTALL_SCHEMES.
|
|
* Adjust test_sysconfig.test_get_scheme_names for Haiku.
|
|
|
|
by me, plus:
|
|
|
|
* new changes to allow Python to find modules installed via 'pkgman -H'.
|
|
* Attempt to support the "venv" install scheme (untested).
|
|
|
|
The idea was to have all _getuserbase()/INSTALL_SCHEMES related changes in "one place".
|
|
|
|
diff --git a/Lib/site.py b/Lib/site.py
|
|
index 89a81c5..3477bf6 100644
|
|
--- a/Lib/site.py
|
|
+++ b/Lib/site.py
|
|
@@ -306,6 +306,14 @@ def _getuserbase():
|
|
return joinuser("~", "Library", sys._framework,
|
|
"%d.%d" % sys.version_info[:2])
|
|
|
|
+ if sys.platform.startswith('haiku'):
|
|
+ try:
|
|
+ import subprocess
|
|
+ return subprocess.check_output(
|
|
+ ['finddir', 'B_USER_NONPACKAGED_DIRECTORY']).rstrip().decode('utf-8')
|
|
+ except:
|
|
+ pass
|
|
+
|
|
return joinuser("~", ".local")
|
|
|
|
|
|
@@ -398,7 +406,31 @@ def getsitepackages(prefixes=None):
|
|
abi_thread = 't'
|
|
else:
|
|
abi_thread = ''
|
|
- if os.sep == '/':
|
|
+ if sys.platform.startswith('haiku'):
|
|
+ # Locations under /system/
|
|
+ sitepackages.append(os.path.join(prefix, "non-packaged", "lib",
|
|
+ f"{implementation}{ver[0]}.{ver[1]}{abi_thread}",
|
|
+ "site-packages"))
|
|
+ sitepackages.append(os.path.join(prefix, "lib",
|
|
+ f"{implementation}{ver[0]}.{ver[1]}{abi_thread}",
|
|
+ "vendor-packages"))
|
|
+
|
|
+ # For .hpkg installed under ~/config/ (pkgman install -H)
|
|
+ # ("pip install --user" uses ~/config/non-packaged/, and gets
|
|
+ # handled by the "haiku_user" install scheme.
|
|
+ try:
|
|
+ import subprocess
|
|
+ _home_prefix = subprocess.check_output(
|
|
+ ['finddir', 'B_USER_CONFIG_DIRECTORY']).rstrip().decode('utf-8')
|
|
+ except:
|
|
+ # print("'finddir B_USER_CONFIG_DIRECTORY' failed.")
|
|
+ _home_prefix = None
|
|
+
|
|
+ if _home_prefix is not None:
|
|
+ sitepackages.append(os.path.join(_home_prefix, "lib",
|
|
+ f"{implementation}{ver[0]}.{ver[1]}{abi_thread}",
|
|
+ "vendor-packages"))
|
|
+ elif os.sep == '/':
|
|
libdirs = [sys.platlibdir]
|
|
if sys.platlibdir != "lib":
|
|
libdirs.append("lib")
|
|
diff --git a/Lib/sysconfig/__init__.py b/Lib/sysconfig/__init__.py
|
|
index ec3b638..e6bbe86 100644
|
|
--- a/Lib/sysconfig/__init__.py
|
|
+++ b/Lib/sysconfig/__init__.py
|
|
@@ -48,6 +48,36 @@ _INSTALL_SCHEMES = {
|
|
'scripts': '{base}/bin',
|
|
'data': '{base}',
|
|
},
|
|
+ 'haiku': {
|
|
+ 'stdlib': '{installed_base}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'platstdlib': '{platbase}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'purelib': '{base}/non-packaged/lib/python{py_version_short}{abi_thread}/site-packages',
|
|
+ 'platlib': '{platbase}/non-packaged/lib/python{py_version_short}{abi_thread}/site-packages',
|
|
+ 'include': '{installed_base}/non-packaged/develop/headers/python{py_version_short}{abiflags}',
|
|
+ 'platinclude': '{installed_platbase}/develop/headers/python{py_version_short}{abiflags}',
|
|
+ 'scripts': '{base}/non-packaged/bin',
|
|
+ 'data' : '{base}/non-packaged',
|
|
+ },
|
|
+ 'haiku_vendor': {
|
|
+ 'stdlib': '{installed_base}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'platstdlib': '{platbase}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'purelib': '{base}/lib/python{py_version_short}{abi_thread}/vendor-packages',
|
|
+ 'platlib': '{platbase}/lib/python{py_version_short}{abi_thread}/vendor-packages',
|
|
+ 'include': '{installed_base}/develop/headers/python{py_version_short}{abiflags}',
|
|
+ 'platinclude': '{installed_platbase}/develop/headers/python{py_version_short}{abiflags}',
|
|
+ 'scripts': '{base}/bin',
|
|
+ 'data' : '{base}',
|
|
+ },
|
|
+ 'haiku_home': {
|
|
+ 'stdlib': '{installed_base}/lib/python{py_version_short}',
|
|
+ 'platstdlib': '{base}/lib/python{py_version_short}',
|
|
+ 'purelib': '{base}/lib/python{py_version_short}',
|
|
+ 'platlib': '{base}/lib/python{py_version_short}',
|
|
+ 'include': '{installed_base}/develop/headers/python{py_version_short}',
|
|
+ 'platinclude': '{installed_base}/develop/headers/python{py_version_short}',
|
|
+ 'scripts': '{base}/bin',
|
|
+ 'data': '{base}',
|
|
+ },
|
|
'nt': {
|
|
'stdlib': '{installed_base}/Lib',
|
|
'platstdlib': '{base}/Lib',
|
|
@@ -88,6 +118,16 @@ _INSTALL_SCHEMES = {
|
|
'scripts': '{base}/bin',
|
|
'data': '{base}',
|
|
},
|
|
+ 'haiku_venv': {
|
|
+ 'stdlib': '{installed_base}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'platstdlib': '{platbase}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'purelib': '{base}/non-packaged/lib/python{py_version_short}{abi_thread}/site-packages',
|
|
+ 'platlib': '{platbase}/non-packaged/lib/python{py_version_short}{abi_thread}/site-packages',
|
|
+ 'include': '{installed_base}/non-packaged/develop/headers/python{py_version_short}{abiflags}',
|
|
+ 'platinclude': '{installed_platbase}/develop/headers/python{py_version_short}{abiflags}',
|
|
+ 'scripts': '{base}/non-packaged/bin',
|
|
+ 'data' : '{base}/non-packaged',
|
|
+ },
|
|
'nt_venv': {
|
|
'stdlib': '{installed_base}/Lib',
|
|
'platstdlib': '{base}/Lib',
|
|
@@ -103,6 +143,8 @@ _INSTALL_SCHEMES = {
|
|
# For the OS-native venv scheme, we essentially provide an alias:
|
|
if os.name == 'nt':
|
|
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['nt_venv']
|
|
+elif sys.platform.startswith('haiku'):
|
|
+ _INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['haiku_venv']
|
|
else:
|
|
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
|
|
|
@@ -131,6 +173,14 @@ def _getuserbase():
|
|
return joinuser("~", "Library", sys._framework,
|
|
f"{sys.version_info[0]}.{sys.version_info[1]}")
|
|
|
|
+ if sys.platform.startswith('haiku'):
|
|
+ try:
|
|
+ import subprocess
|
|
+ return subprocess.check_output(
|
|
+ ['finddir', 'B_USER_NONPACKAGED_DIRECTORY']).rstrip().decode('utf-8')
|
|
+ except:
|
|
+ pass
|
|
+
|
|
return joinuser("~", ".local")
|
|
|
|
_HAS_USER_BASE = (_getuserbase() is not None)
|
|
@@ -156,6 +206,15 @@ if _HAS_USER_BASE:
|
|
'scripts': '{userbase}/bin',
|
|
'data': '{userbase}',
|
|
},
|
|
+ 'haiku_user': {
|
|
+ 'stdlib': '{userbase}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'platstdlib': '{userbase}/lib/python{py_version_short}{abi_thread}',
|
|
+ 'purelib': '{userbase}/lib/python{py_version_short}{abi_thread}/site-packages',
|
|
+ 'platlib': '{userbase}/lib/python{py_version_short}{abi_thread}/site-packages',
|
|
+ 'include': '{userbase}/develop/headers/python{py_version_short}{abi_thread}',
|
|
+ 'scripts': '{userbase}/bin',
|
|
+ 'data': '{userbase}',
|
|
+ },
|
|
'osx_framework_user': {
|
|
'stdlib': '{userbase}/lib/{implementation_lower}',
|
|
'platstdlib': '{userbase}/lib/{implementation_lower}',
|
|
@@ -278,6 +337,18 @@ def _expand_vars(scheme, vars):
|
|
|
|
|
|
def _get_preferred_schemes():
|
|
+ if sys.platform.startswith('haiku'):
|
|
+ if os.environ.get('HAIKU_USE_VENDOR_DIRECTORIES') == '1':
|
|
+ return {
|
|
+ 'prefix': 'haiku_vendor',
|
|
+ 'home': 'haiku_home',
|
|
+ 'user': 'haiku_user',
|
|
+ }
|
|
+ return {
|
|
+ 'prefix': 'haiku',
|
|
+ 'home': 'haiku_home',
|
|
+ 'user': 'haiku_user',
|
|
+ }
|
|
if os.name == 'nt':
|
|
return {
|
|
'prefix': 'nt',
|
|
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
|
|
index bf53413..80daae7 100644
|
|
--- a/Lib/test/test_sysconfig.py
|
|
+++ b/Lib/test/test_sysconfig.py
|
|
@@ -386,9 +386,10 @@ class TestSysConfig(unittest.TestCase):
|
|
self.assertTrue(os.path.isfile(config_h), config_h)
|
|
|
|
def test_get_scheme_names(self):
|
|
- wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv']
|
|
+ wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv', 'haiku',
|
|
+ 'haiku_home', 'haiku_vendor']
|
|
if HAS_USER_BASE:
|
|
- wanted.extend(['nt_user', 'osx_framework_user', 'posix_user'])
|
|
+ wanted.extend(['nt_user', 'osx_framework_user', 'posix_user', 'haiku_user'])
|
|
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
|
|
|
|
@skip_unless_symlink
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 69371788003ea8cacfdac3b4b84fe37dfcefef28 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Mon, 12 Feb 2024 08:39:38 -0300
|
|
Subject: Fix location of REPL's history file.
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Adapted from previous patches by Jérôme Duval.
|
|
|
|
diff --git a/Lib/site.py b/Lib/site.py
|
|
index 3477bf6..cfd4e49 100644
|
|
--- a/Lib/site.py
|
|
+++ b/Lib/site.py
|
|
@@ -505,8 +505,18 @@ def gethistoryfile():
|
|
history = os.environ.get("PYTHON_HISTORY")
|
|
if history:
|
|
return history
|
|
- return os.path.join(os.path.expanduser('~'),
|
|
- '.python_history')
|
|
+
|
|
+ import subprocess
|
|
+ try:
|
|
+ history = os.path.join(subprocess.check_output(
|
|
+ ['finddir', 'B_USER_VAR_DIRECTORY']).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')
|
|
+
|
|
+ return history
|
|
|
|
|
|
def enablerlcompleter():
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 8441eae6b0dc39ed2dbd2042e96e65553e6c2086 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sun, 8 Oct 2023 17:02:19 -0300
|
|
Subject: Use spawn instead of fork for multiprocessing.
|
|
|
|
Without this change, we get:
|
|
|
|
```
|
|
Fatal Python error: PyOS_AfterFork_Child:
|
|
the function must be called with the GIL held, after Python initialization
|
|
and before Python finalization, but the GIL is released (the current Python
|
|
thread state is NULL)
|
|
```
|
|
|
|
when running "test_re.py" (as part of the "--with-optimizations" build) without
|
|
using spawn instead of fork in multiprocessing/context.py.
|
|
|
|
and also:
|
|
|
|
```
|
|
Traceback (most recent call last):
|
|
File "<string>", line 1, in <module>
|
|
File "/sources/Python-3.12.0/Lib/multiprocessing/forkserver.py", line 202, in main
|
|
signal.set_wakeup_fd(sig_w)
|
|
ValueError: the fd 6 must be in non-blocking mode
|
|
```
|
|
|
|
when running the "compileall" step of "make install".
|
|
|
|
From:
|
|
https://docs.python.org/3.12/library/multiprocessing.html#contexts-and-start-methods
|
|
|
|
"The default start method will change away from fork in Python 3.14."
|
|
|
|
So, we might be in the clear switching to "spawn" now.
|
|
|
|
diff --git a/Lib/multiprocessing/context.py b/Lib/multiprocessing/context.py
|
|
index de8a264..02a301e 100644
|
|
--- a/Lib/multiprocessing/context.py
|
|
+++ b/Lib/multiprocessing/context.py
|
|
@@ -320,7 +320,7 @@ if sys.platform != 'win32':
|
|
'spawn': SpawnContext(),
|
|
'forkserver': ForkServerContext(),
|
|
}
|
|
- if sys.platform == 'darwin':
|
|
+ if sys.platform == 'darwin' or sys.platform[:5] == 'haiku':
|
|
# bpo-33725: running arbitrary code after fork() is no longer reliable
|
|
# on macOS since macOS 10.14 (Mojave). Use spawn by default instead.
|
|
_default_context = DefaultContext(_concrete_contexts['spawn'])
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From ff34d5fc9aba3529e5663524a8be683dee64597f Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sun, 10 Dec 2023 19:50:22 -0300
|
|
Subject: Miscellaneous "Lib/test/" fixes for Haiku.
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
test_fileio.py fix from "initial Haiku patch" by Jérôme Duval.
|
|
|
|
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
|
|
index a2ed99a..e8449b9 100644
|
|
--- a/Lib/test/datetimetester.py
|
|
+++ b/Lib/test/datetimetester.py
|
|
@@ -6080,6 +6080,9 @@ def pairs(iterable):
|
|
|
|
class ZoneInfo(tzinfo):
|
|
zoneroot = '/usr/share/zoneinfo'
|
|
+ if sys.platform.startswith('haiku'):
|
|
+ zoneroot = '/system/data/zoneinfo'
|
|
+
|
|
def __init__(self, ut, ti):
|
|
"""
|
|
|
|
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py
|
|
index 0611d17..ce7c87d 100644
|
|
--- a/Lib/test/test_fileio.py
|
|
+++ b/Lib/test/test_fileio.py
|
|
@@ -404,6 +404,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)
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 61910a330dad56e9371b5cd60f5f8d5a027111e2 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Mon, 12 Feb 2024 10:50:34 -0300
|
|
Subject: Fix build on nightlies, following the addition of kqueue.
|
|
|
|
See HaikuPorts issue #10001.
|
|
|
|
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
|
|
index 5bd9b77..88e29a4 100644
|
|
--- a/Modules/selectmodule.c
|
|
+++ b/Modules/selectmodule.c
|
|
@@ -2769,13 +2769,21 @@ _select_exec(PyObject *m)
|
|
#ifdef EVFILT_SIGNAL
|
|
ADD_INT_CONST("KQ_FILTER_SIGNAL", EVFILT_SIGNAL);
|
|
#endif
|
|
+#ifdef EVFILT_TIMER
|
|
ADD_INT_CONST("KQ_FILTER_TIMER", EVFILT_TIMER);
|
|
+#endif
|
|
|
|
/* event flags */
|
|
ADD_INT_CONST("KQ_EV_ADD", EV_ADD);
|
|
ADD_INT_CONST("KQ_EV_DELETE", EV_DELETE);
|
|
+#ifdef EV_ENABLE
|
|
ADD_INT_CONST("KQ_EV_ENABLE", EV_ENABLE);
|
|
+#else
|
|
+ ADD_INT_CONST("KQ_EV_ENABLE", 0); // "test_kqueue.py" assumes KQ_EV_ENABLE exists
|
|
+#endif
|
|
+#ifdef EV_DISABLE
|
|
ADD_INT_CONST("KQ_EV_DISABLE", EV_DISABLE);
|
|
+#endif
|
|
ADD_INT_CONST("KQ_EV_ONESHOT", EV_ONESHOT);
|
|
ADD_INT_CONST("KQ_EV_CLEAR", EV_CLEAR);
|
|
|
|
@@ -2808,14 +2816,28 @@ _select_exec(PyObject *m)
|
|
/* PROC filter flags */
|
|
#ifdef EVFILT_PROC
|
|
ADD_INT_CONST("KQ_NOTE_EXIT", NOTE_EXIT);
|
|
+#ifdef NOTE_FORK
|
|
ADD_INT_CONST("KQ_NOTE_FORK", NOTE_FORK);
|
|
+#endif
|
|
+#ifdef NOTE_EXEC
|
|
ADD_INT_CONST("KQ_NOTE_EXEC", NOTE_EXEC);
|
|
+#endif
|
|
+#ifdef NOTE_PCTRLMASK
|
|
ADD_INT_CONST("KQ_NOTE_PCTRLMASK", NOTE_PCTRLMASK);
|
|
+#endif
|
|
+#ifdef NOTE_PDATAMASK
|
|
ADD_INT_CONST("KQ_NOTE_PDATAMASK", NOTE_PDATAMASK);
|
|
+#endif
|
|
|
|
+#ifdef NOTE_TRACK
|
|
ADD_INT_CONST("KQ_NOTE_TRACK", NOTE_TRACK);
|
|
+#endif
|
|
+#ifdef NOTE_CHILD
|
|
ADD_INT_CONST("KQ_NOTE_CHILD", NOTE_CHILD);
|
|
+#endif
|
|
+#ifdef NOTE_TRACKERR
|
|
ADD_INT_CONST("KQ_NOTE_TRACKERR", NOTE_TRACKERR);
|
|
+#endif
|
|
#endif
|
|
|
|
/* NETDEV filter flags */
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 0460e4a82df9299e97aecaae76e0f0674875e681 Mon Sep 17 00:00:00 2001
|
|
From: Alexander von Gluck IV <kallisti5@unixzen.com>
|
|
Date: Thu, 14 Mar 2024 12:54:33 -0500
|
|
Subject: config.guess: Update to universal haiku arch guessing
|
|
|
|
* Matches upstream config.guess as of 2022, python just
|
|
ships a really old one
|
|
|
|
diff --git a/config.guess b/config.guess
|
|
index e81d3ae..366429c 100755
|
|
--- a/config.guess
|
|
+++ b/config.guess
|
|
@@ -1364,8 +1364,11 @@ EOF
|
|
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
|
GUESS=i586-pc-haiku
|
|
;;
|
|
- x86_64:Haiku:*:*)
|
|
- GUESS=x86_64-unknown-haiku
|
|
+ ppc:Haiku:*:*)
|
|
+ GUESS=powerpc-apple-haiku
|
|
+ ;;
|
|
+ *:Haiku:*:*)
|
|
+ GUESS=$UNAME_MACHINE-unknown-haiku
|
|
;;
|
|
SX-4:SUPER-UX:*:*)
|
|
GUESS=sx4-nec-superux$UNAME_RELEASE
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 61f60797b4daad8bda46fa207e44a78bb1e6b0d0 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Fri, 9 Aug 2024 13:38:28 -0300
|
|
Subject: fix test_utf8_mode.
|
|
|
|
|
|
diff --git a/Lib/test/test_utf8_mode.py b/Lib/test/test_utf8_mode.py
|
|
index f668810..a55a8e4 100644
|
|
--- a/Lib/test/test_utf8_mode.py
|
|
+++ b/Lib/test/test_utf8_mode.py
|
|
@@ -226,7 +226,7 @@ class UTF8ModeTests(unittest.TestCase):
|
|
with self.subTest(LC_ALL=loc):
|
|
check('utf8', [arg_utf8], LC_ALL=loc)
|
|
|
|
- if sys.platform == 'darwin' or support.is_android or VXWORKS:
|
|
+ if sys.platform == 'darwin' or support.is_android or VXWORKS or sys.platform[:5] == 'haiku':
|
|
c_arg = arg_utf8
|
|
elif sys.platform.startswith("aix"):
|
|
c_arg = arg.decode('iso-8859-1')
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 9b4391f96d34fde5979575ff6c8783aeba6a21a8 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Fri, 9 Aug 2024 14:35:04 -0300
|
|
Subject: Fix test_site.
|
|
|
|
test_site expects a specific set of modules to be imported.
|
|
By importing "subprocess" (for calling `finddir`) we end up breaking
|
|
that assumption.
|
|
|
|
Also, site.py should avoid costly imports to help startup times.
|
|
|
|
Hardcoding a few paths avoids having to import subprocess, that
|
|
causes many other subsequent imports.
|
|
|
|
Lib/site.py changes should eventually be merged with previous commits.
|
|
Leaving the changes here now for easier review.
|
|
|
|
diff --git a/Lib/site.py b/Lib/site.py
|
|
index cfd4e49..b414150 100644
|
|
--- a/Lib/site.py
|
|
+++ b/Lib/site.py
|
|
@@ -307,12 +307,8 @@ def _getuserbase():
|
|
"%d.%d" % sys.version_info[:2])
|
|
|
|
if sys.platform.startswith('haiku'):
|
|
- try:
|
|
- import subprocess
|
|
- return subprocess.check_output(
|
|
- ['finddir', 'B_USER_NONPACKAGED_DIRECTORY']).rstrip().decode('utf-8')
|
|
- except:
|
|
- pass
|
|
+ # 'B_USER_NONPACKAGED_DIRECTORY'
|
|
+ return joinuser("~", "config", "non-packaged")
|
|
|
|
return joinuser("~", ".local")
|
|
|
|
@@ -418,18 +414,10 @@ def getsitepackages(prefixes=None):
|
|
# For .hpkg installed under ~/config/ (pkgman install -H)
|
|
# ("pip install --user" uses ~/config/non-packaged/, and gets
|
|
# handled by the "haiku_user" install scheme.
|
|
- try:
|
|
- import subprocess
|
|
- _home_prefix = subprocess.check_output(
|
|
- ['finddir', 'B_USER_CONFIG_DIRECTORY']).rstrip().decode('utf-8')
|
|
- except:
|
|
- # print("'finddir B_USER_CONFIG_DIRECTORY' failed.")
|
|
- _home_prefix = None
|
|
-
|
|
- if _home_prefix is not None:
|
|
- sitepackages.append(os.path.join(_home_prefix, "lib",
|
|
- f"{implementation}{ver[0]}.{ver[1]}{abi_thread}",
|
|
- "vendor-packages"))
|
|
+ _home_prefix = os.path.expanduser(os.path.join("~", "config"))
|
|
+ sitepackages.append(os.path.join(_home_prefix, "lib",
|
|
+ f"{implementation}{ver[0]}.{ver[1]}{abi_thread}",
|
|
+ "vendor-packages"))
|
|
elif os.sep == '/':
|
|
libdirs = [sys.platlibdir]
|
|
if sys.platlibdir != "lib":
|
|
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
|
|
index 2df17b9..332063b 100644
|
|
--- a/Lib/test/test_site.py
|
|
+++ b/Lib/test/test_site.py
|
|
@@ -323,7 +323,21 @@ class HelperFunctionsTests(unittest.TestCase):
|
|
def test_getsitepackages(self):
|
|
site.PREFIXES = ['xoxo']
|
|
dirs = site.getsitepackages()
|
|
- if os.sep == '/':
|
|
+ if sys.platform[:5] == 'haiku':
|
|
+ self.assertEqual(len(dirs), 3) # site-packages + sys/user vendor-packages
|
|
+ wanted = os.path.join('xoxo', 'non-packaged', 'lib',
|
|
+ 'python%d.%d' % sys.version_info[:2],
|
|
+ 'site-packages')
|
|
+ self.assertEqual(dirs[0], wanted)
|
|
+ wanted = os.path.join('xoxo', sys.platlibdir,
|
|
+ 'python%d.%d' % sys.version_info[:2],
|
|
+ 'vendor-packages')
|
|
+ self.assertEqual(dirs[1], wanted)
|
|
+ wanted = os.path.join('xoxo', os.path.expanduser('~/config'), 'lib',
|
|
+ 'python%d.%d' % sys.version_info[:2],
|
|
+ 'vendor-packages')
|
|
+ self.assertEqual(dirs[2], wanted)
|
|
+ elif os.sep == '/':
|
|
# OS X, Linux, FreeBSD, etc
|
|
if sys.platlibdir != "lib":
|
|
self.assertEqual(len(dirs), 2)
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 7304af9e5a5dd2f6a5fb7f367db6ff712cc18acf Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Fri, 9 Aug 2024 15:37:13 -0300
|
|
Subject: Fix test_sysconfig.
|
|
|
|
|
|
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
|
|
index 80daae7..5194c47 100644
|
|
--- a/Lib/test/test_sysconfig.py
|
|
+++ b/Lib/test/test_sysconfig.py
|
|
@@ -221,6 +221,19 @@ class TestSysConfig(unittest.TestCase):
|
|
sysconfig.get_path('purelib', scheme='venv'),
|
|
sysconfig.get_path('purelib', scheme='nt_venv')
|
|
)
|
|
+ elif sys.platform[:5] == 'haiku':
|
|
+ self.assertEqual(
|
|
+ sysconfig.get_path('scripts', scheme='venv'),
|
|
+ sysconfig.get_path('scripts', scheme='haiku_venv')
|
|
+ )
|
|
+ self.assertEqual(
|
|
+ sysconfig.get_path('include', scheme='venv'),
|
|
+ sysconfig.get_path('include', scheme='haiku_venv')
|
|
+ )
|
|
+ self.assertEqual(
|
|
+ sysconfig.get_path('purelib', scheme='venv'),
|
|
+ sysconfig.get_path('purelib', scheme='haiku_venv')
|
|
+ )
|
|
else:
|
|
self.assertEqual(
|
|
sysconfig.get_path('scripts', scheme='venv'),
|
|
@@ -387,7 +400,7 @@ class TestSysConfig(unittest.TestCase):
|
|
|
|
def test_get_scheme_names(self):
|
|
wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv', 'haiku',
|
|
- 'haiku_home', 'haiku_vendor']
|
|
+ 'haiku_home', 'haiku_vendor', 'haiku_venv']
|
|
if HAS_USER_BASE:
|
|
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user', 'haiku_user'])
|
|
self.assertEqual(get_scheme_names(), tuple(sorted(wanted)))
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From 3517fc45c182c10aeee265cdd99b01a977bc5aac Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sun, 29 Sep 2024 03:01:27 -0300
|
|
Subject: Partially fix test_compileall by skipping tests that need hardlink
|
|
support.
|
|
|
|
|
|
diff --git a/Lib/test/support/os_helper.py b/Lib/test/support/os_helper.py
|
|
index 8914059..bfedd2d 100644
|
|
--- a/Lib/test/support/os_helper.py
|
|
+++ b/Lib/test/support/os_helper.py
|
|
@@ -206,6 +206,8 @@ def can_hardlink():
|
|
# Android blocks hard links using SELinux
|
|
# (https://stackoverflow.com/q/32365690).
|
|
_can_hardlink = hasattr(os, "link") and not support.is_android
|
|
+ if sys.platform[:5] == 'haiku':
|
|
+ _can_hardlink = False
|
|
return _can_hardlink
|
|
|
|
|
|
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
|
|
index 812ff5e..834474b 100644
|
|
--- a/Lib/test/test_compileall.py
|
|
+++ b/Lib/test/test_compileall.py
|
|
@@ -946,6 +946,7 @@ class CommandLineTestsBase:
|
|
# only for more than one optimization level
|
|
self.assertRunNotOK(self.directory, "-o 1", "--hardlink-dupes")
|
|
|
|
+ @os_helper.skip_unless_hardlink
|
|
def test_hardlink(self):
|
|
# 'a = 0' code produces the same bytecode for the 3 optimization
|
|
# levels. All three .pyc files must have the same inode (hardlinks).
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From c1bc7f41c445834aa126df4ddb539ddf9167ebbf Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Thu, 9 May 2024 15:16:26 -0300
|
|
Subject: Fix 3.13.0 build.
|
|
|
|
The change in Makefile.pre.in is to stop failing tests on the PGO stage
|
|
breaking the `--with-optimizations` builds (and to restore a sane timeout).
|
|
|
|
Previous Python versions had both the time out and the "|| true".
|
|
|
|
Some of the test run in that PGO stage sadly still fail on Haiku.
|
|
|
|
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
|
index 300f4c2..fdbb877 100644
|
|
--- a/Makefile.pre.in
|
|
+++ b/Makefile.pre.in
|
|
@@ -752,7 +752,7 @@ profile-run-stamp:
|
|
$(MAKE) profile-gen-stamp
|
|
# Next, run the profile task to generate the profile information.
|
|
@ # FIXME: can't run for a cross build
|
|
- $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK)
|
|
+ $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
|
|
$(LLVM_PROF_MERGER)
|
|
# Remove profile generation binary since we are done with it.
|
|
$(MAKE) clean-retain-profile
|
|
@@ -2029,7 +2029,7 @@ $(LIBRARY_OBJS) $(MODOBJS) Programs/python.o: $(PYTHON_HEADERS)
|
|
TESTOPTS= $(EXTRATESTOPTS)
|
|
TESTPYTHON= $(RUNSHARED) $(PYTHON_FOR_BUILD) $(TESTPYTHONOPTS)
|
|
TESTRUNNER= $(TESTPYTHON) -m test
|
|
-TESTTIMEOUT=
|
|
+TESTTIMEOUT= 1200
|
|
|
|
# Remove "test_python_*" directories of previous failed test jobs.
|
|
# Pass TESTOPTS options because it can contain --tempdir option.
|
|
diff --git a/Objects/mimalloc/prim/unix/prim.c b/Objects/mimalloc/prim/unix/prim.c
|
|
index 4d3fb65..be95e7d 100644
|
|
--- a/Objects/mimalloc/prim/unix/prim.c
|
|
+++ b/Objects/mimalloc/prim/unix/prim.c
|
|
@@ -49,6 +49,8 @@ terms of the MIT license. A copy of the license can be found in the file
|
|
#include <sys/domainset.h>
|
|
#endif
|
|
#include <sys/sysctl.h>
|
|
+#elif defined(__HAIKU__)
|
|
+ #include <fcntl.h>
|
|
#endif
|
|
|
|
#if !defined(__HAIKU__) && !defined(__APPLE__) && !defined(__CYGWIN__) && !defined(_AIX) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__sun) && !defined(__NetBSD__)
|
|
--
|
|
2.45.2
|
|
|
|
|
|
From d74c91e332059ee3672703f7b7d9d195f26f20c9 Mon Sep 17 00:00:00 2001
|
|
From: Oscar Lesta <oscar.lesta@gmail.com>
|
|
Date: Sat, 5 Oct 2024 07:32:17 -0300
|
|
Subject: Avoid forcing "-g" on LTO builds, unless Py_DEBUG is defined.
|
|
|
|
|
|
diff --git a/configure.ac b/configure.ac
|
|
index f77214b..27003df 100644
|
|
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -2069,7 +2069,9 @@ if test "$Py_LTO" = 'true' ; then
|
|
then
|
|
# bpo-30345: Add -g to LDFLAGS when compiling with LTO
|
|
# to get debug symbols.
|
|
- LTOFLAGS="$LTOFLAGS -g"
|
|
+ if test "$Py_DEBUG" = 'true' ; then
|
|
+ LTOFLAGS="$LTOFLAGS -g"
|
|
+ fi
|
|
fi
|
|
|
|
CFLAGS_NODIST="$CFLAGS_NODIST ${LTOCFLAGS-$LTOFLAGS}"
|
|
--
|
|
2.45.2
|
|
|