Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Doc/library/os.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1479,7 +1479,7 @@ or `the MSDN <https://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx>`_ on Windo
Return a pair of file descriptors ``(r, w)`` usable for reading and writing,
respectively.

.. availability:: Unix, macOS >= 27.0, not WASI, not iOS.
.. availability:: Unix, macOS >= 27.0, iOS >= 27.0, not WASI.

.. versionadded:: 3.3

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
On iOS, add :func:`os.pipe2`, and use the syscalls :manpage:`pipe2 (2)` and
:manpage:`dup3 (2)` internally, when available at both build-time and
run-time.
4 changes: 2 additions & 2 deletions Modules/posixmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -512,8 +512,8 @@ static const unsigned int _Py_STATX_KNOWN = (STATX_BASIC_STATS | STATX_BTIME
# define HAVE_MKFIFOAT_RUNTIME __builtin_available(macOS 13.0, iOS 16.0, tvOS 16.0, watchOS 9.0, *)
# define HAVE_MKNODAT_RUNTIME __builtin_available(macOS 13.0, iOS 16.0, tvOS 16.0, watchOS 9.0, *)
# define HAVE_PTSNAME_R_RUNTIME __builtin_available(macOS 10.13.4, iOS 11.3, tvOS 11.3, watchOS 4.3, *)
# define HAVE_DUP3_RUNTIME __builtin_available(macOS 27.0, *)
# define HAVE_PIPE2_RUNTIME __builtin_available(macOS 27.0, *)
# define HAVE_DUP3_RUNTIME __builtin_available(macOS 27.0, iOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *)
# define HAVE_PIPE2_RUNTIME __builtin_available(macOS 27.0, iOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *)

# define HAVE_POSIX_SPAWN_SETSID_RUNTIME __builtin_available(macOS 10.15, *)

Expand Down
38 changes: 34 additions & 4 deletions configure

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 19 additions & 4 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ if test -z "$AR"; then
aarch64-apple-ios*) AR=arm64-apple-ios-ar ;;
x86_64-apple-ios*-simulator) AR=x86_64-apple-ios-simulator-ar ;;
*)
esac
esac
fi
if test -z "$CC"; then
case "$host" in
Expand Down Expand Up @@ -5576,9 +5576,24 @@ fi
# found by configure), but either raise a compilation error (because the
# header definition prevents usage - autoconf doesn't use the headers), or
# raise an error if used at runtime. Force these symbols off.
if test "$ac_sys_system" != "iOS" ; then
AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system])
fi
# In particular, dup3 and pipe2 are available as of iOS 27 but were
# incorrectly detected in older simulator versions.
case "$ac_sys_system" in
iOS)
AC_MSG_CHECKING([if iOS SDK is older than 27])
ios_sdk_version=$(xcrun --sdk iphoneos --show-sdk-version 2>/dev/null | cut -d. -f1)
if test -n "$ios_sdk_version" && test "$ios_sdk_version" -ge 27; then
AC_MSG_RESULT([no])
AC_CHECK_FUNCS([dup3 pipe2])
else
AC_MSG_RESULT([yes])
fi
;;
*)
# not iOS
AC_CHECK_FUNCS([dup3 getentropy getgroups pipe2 system])
;;
esac

AC_CHECK_DECL([dirfd],
[AC_DEFINE([HAVE_DIRFD], [1],
Expand Down
Loading