GeezerVison is showing github.com — bpo-46315: Add ifdef HAVE_ feature checks for WASI compatibility (GH-30507) by tiran · Pull Request #30507 · python/cpython
bpo-46315: Add ifdef HAVE_ feature checks for WASI compatibility (GH-30507)
#30507
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement . We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Uh oh!
There was an error while loading. Please reload this page.
Show file tree
Hide file tree
Changes from all commits
Commits
File filter
Filter by extension
.ac
(1)
.c
(5)
.h
(4)
.in
(1)
.rst
(1)
.site-wasm32-wasi
(1)
No extension
(1)
All 7 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Hide whitespace
Diff view
Hide whitespace
There are no files selected for viewing
Original file line number
Diff line number
Diff line change
Expand Up
@@ -20,7 +20,9 @@
*/
#define Py_HAVE_CONDVAR
#include <pthread.h>
#ifdef HAVE_PTHREAD_H
# include <pthread.h>
#endif
#define PyMUTEX_T pthread_mutex_t
#define PyCOND_T pthread_cond_t
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -125,7 +125,7 @@ Py_DEPRECATED(3.7) PyAPI_FUNC(void) PyThread_ReInitTLS(void);
typedef struct _Py_tss_t Py_tss_t; /* opaque */
#ifndef Py_LIMITED_API
#if defined(_POSIX_THREADS)
#ifdef HAVE_PTHREAD_H
/* Darwin needs pthread.h to know type name the pthread_key_t. */
# include <pthread.h>
# define NATIVE_TSS_KEY_T pthread_key_t
Expand Down
Original file line number
Diff line number
Diff line change
@@ -0,0 +1,2 @@
Added and fixed ``#ifdef HAVE_FEATURE`` checks for functionality that is not
available on WASI platform.
Original file line number
Diff line number
Diff line change
Expand Up
@@ -258,7 +258,11 @@ random_seed_time_pid(RandomObject *self)
key[0] = (uint32_t)(now & 0xffffffffU);
key[1] = (uint32_t)(now >> 32);
#ifdef HAVE_GETPID
key[2] = (uint32_t)getpid();
#else
key[2] = 0;
#endif
now = _PyTime_GetMonotonicClock();
key[3] = (uint32_t)(now & 0xffffffffU);
Expand Down
Oops, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Original file line number
Diff line number
Diff line change
Expand Up
@@ -10,7 +10,7 @@
#include <signal.h>
#include <signal.h>
#include <stdlib.h> // abort()
#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
#if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK) && defined(HAVE_PTHREAD_H)
# include <pthread.h>
#endif
#ifdef MS_WINDOWS
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -3292,7 +3292,14 @@ os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd,
}
else
#endif /* HAVE_FHCMODAT */
{
#ifdef HAVE_CHMOD
result = chmod(path->narrow, mode);
#else
result = -1;
errno = ENOSYS;
#endif
}
Py_END_ALLOW_THREADS
if (result) {
Expand Down
Expand Up
@@ -4885,6 +4892,7 @@ os_system_impl(PyObject *module, PyObject *command)
#endif /* HAVE_SYSTEM */
#ifdef HAVE_UMASK
/*[clinic input]
os.umask
Expand All
@@ -4903,6 +4911,7 @@ os_umask_impl(PyObject *module, int mask)
return posix_error();
return PyLong_FromLong((long)i);
}
#endif
#ifdef MS_WINDOWS
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -237,10 +237,11 @@ spam_bench(PyObject *self, PyObject *args)
{
PyObject *obj, *name, *res;
int n = 1000;
time_t t0, t1;
time_t t0 = 0 , t1 = 0 ;
if (!PyArg_ParseTuple(args, "OU|i", &obj, &name, &n))
return NULL;
#ifdef HAVE_CLOCK
t0 = clock();
while (--n >= 0) {
res = PyObject_GetAttr(obj, name);
Expand All
@@ -249,6 +250,7 @@ spam_bench(PyObject *self, PyObject *args)
Py_DECREF(res);
}
t1 = clock();
#endif
return PyFloat_FromDouble((double)(t1-t0) / CLOCKS_PER_SEC);
}
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -529,6 +529,9 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
/* Define if you have times. */
/* #undef HAVE_TIMES */
/* Define to 1 if you have the `umask' function. */
#define HAVE_UMASK 1
/* Define if you have uname. */
/* #undef HAVE_UNAME */
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -3,9 +3,12 @@
* though, because they may be referenced by extensions using the stable ABI.
*/
#include "setjmp.h"
#ifdef HAVE_SETJMP_H
#include <setjmp.h>
jmp_buf PyFPE_jbuf;
#endif
int PyFPE_counter;
double
Expand Down
Original file line number
Diff line number
Diff line change
@@ -0,0 +1,17 @@
# config.site override for cross compiling to wasm32-wasi platform
#
# Written by Christian Heimes <[email protected] >
# Partly based on pyodide's pyconfig.undefs.h file.
# cannot be detected in cross builds
ac_cv_buggy_getaddrinfo=no
# WASI has no /dev/pt*
ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no
# dummy readelf, WASI build does not need readelf.
ac_cv_prog_ac_ct_READELF=true
ac_cv_func_eventfd=no
17 changes: 13 additions & 4 deletions
17
configure
Original file line number
Diff line number
Diff line change
Expand Up
@@ -6268,7 +6268,7 @@ else
EXEEXT=.html ;; #(
Emscripten/node) :
EXEEXT=.js ;; #(
wasi /*) :
WASI /*) :
EXEEXT=.wasm ;; #(
*) :
EXEEXT=
Expand Down
Expand Up
@@ -7627,6 +7627,15 @@ case $ac_sys_system/$ac_sys_emscripten_target in #(
LDFLAGS_NODIST="$(LDFLAGS_NODIST) -s ASSERTIONS=1 -s ALLOW_MEMORY_GROWTH=1 -s NODERAWFS=1 -s EXIT_RUNTIME=1 -s USE_PTHREADS -s PROXY_TO_PTHREAD"
CFLAGS_NODIST="$(CFLAGS_NODIST) -pthread"
;; #(
WASI) :
$as_echo "#define _WASI_EMULATED_SIGNAL 1" >>confdefs.h
LIBS="$LIBS -lwasi-emulated-signal"
echo "#define _WASI_EMULATED_SIGNAL 1" >> confdefs.h
;; #(
*) :
;;
esac
Expand Down
Expand Up
@@ -8543,7 +8552,7 @@ for ac_header in \
alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
ieeefp.h io.h langinfo.h libintl.h libutil.h linux/memfd.h linux/random.h linux/soundcard.h \
linux/tipc.h linux/wait.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
sched.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
sys/random.h sys/resource.h sys/select.h sys/sendfile.h sys/socket.h sys/soundcard.h sys/stat.h \
Expand Down
Expand Up
@@ -13630,7 +13639,7 @@ fi
# checks for library functions
for ac_func in \
accept4 alarm bind_textdomain_codeset chown clock close_range confstr \
accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \
copy_file_range ctermid dup3 execv explicit_bzero explicit_memset \
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
Expand All
@@ -13652,7 +13661,7 @@ for ac_func in \
sigfillset siginterrupt sigpending sigrelse sigtimedwait sigwait \
sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \
sysconf system tcgetpgrp tcsetpgrp tempnam timegm times tmpfile \
tmpnam tmpnam_r truncate ttyname uname unlinkat utimensat utimes vfork \
tmpnam tmpnam_r truncate ttyname umask uname unlinkat utimensat utimes vfork \
wait wait3 wait4 waitid waitpid wcscoll wcsftime wcsxfrm wmemcmp writev \
do :
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -1093,7 +1093,7 @@ AC_ARG_WITH([suffix],
AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
[Emscripten/browser], [EXEEXT=.html],
[Emscripten/node], [EXEEXT=.js],
[wasi /*], [EXEEXT=.wasm],
[WASI /*], [EXEEXT=.wasm],
[EXEEXT=]
)
])
Expand Down
Expand Up
@@ -1805,6 +1805,11 @@ AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
LDFLAGS_NODIST="$(LDFLAGS_NODIST) -s ASSERTIONS=1 -s ALLOW_MEMORY_GROWTH=1 -s NODERAWFS=1 -s EXIT_RUNTIME=1 -s USE_PTHREADS -s PROXY_TO_PTHREAD"
CFLAGS_NODIST="$(CFLAGS_NODIST) -pthread"
],
[WASI], [
AC_DEFINE([_WASI_EMULATED_SIGNAL], [1], [Define to 1 if you want to emulate signals on WASI])
LIBS="$LIBS -lwasi-emulated-signal"
echo "#define _WASI_EMULATED_SIGNAL 1" >> confdefs.h
]
)
AC_SUBST(BASECFLAGS)
Expand Down
Expand Up
@@ -2306,7 +2311,7 @@ AC_CHECK_HEADERS([ \
alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
ieeefp.h io.h langinfo.h libintl.h libutil.h linux/memfd.h linux/random.h linux/soundcard.h \
linux/tipc.h linux/wait.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
sched.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
sys/random.h sys/resource.h sys/select.h sys/sendfile.h sys/socket.h sys/soundcard.h sys/stat.h \
Expand Down
Expand Up
@@ -4062,7 +4067,7 @@ fi
# checks for library functions
AC_CHECK_FUNCS([ \
accept4 alarm bind_textdomain_codeset chown clock close_range confstr \
accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \
copy_file_range ctermid dup3 execv explicit_bzero explicit_memset \
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
Expand All
@@ -4084,7 +4089,7 @@ AC_CHECK_FUNCS([ \
sigfillset siginterrupt sigpending sigrelse sigtimedwait sigwait \
sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \
sysconf system tcgetpgrp tcsetpgrp tempnam timegm times tmpfile \
tmpnam tmpnam_r truncate ttyname uname unlinkat utimensat utimes vfork \
tmpnam tmpnam_r truncate ttyname umask uname unlinkat utimensat utimes vfork \
wait wait3 wait4 waitid waitpid wcscoll wcsftime wcsxfrm wmemcmp writev \
])
Expand Down
Original file line number
Diff line number
Diff line change
Expand Up
@@ -127,6 +127,9 @@
/* Define to 1 if you have the 'chflags' function. */
#undef HAVE_CHFLAGS
/* Define to 1 if you have the `chmod' function. */
#undef HAVE_CHMOD
/* Define to 1 if you have the `chown' function. */
#undef HAVE_CHOWN
Expand Down
Expand Up
@@ -977,6 +980,9 @@
/* Define to 1 if you have the `setitimer' function. */
#undef HAVE_SETITIMER
/* Define to 1 if you have the <setjmp.h> header file. */
#undef HAVE_SETJMP_H
/* Define to 1 if you have the `setlocale' function. */
#undef HAVE_SETLOCALE
Expand Down
Expand Up
@@ -1336,6 +1342,9 @@
/* Define this if you have tcl and TCL_UTF_MAX==6 */
#undef HAVE_UCS4_TCL
/* Define to 1 if you have the `umask' function. */
#undef HAVE_UMASK
/* Define to 1 if you have the `uname' function. */
#undef HAVE_UNAME
Expand Down
Expand Up
@@ -1704,6 +1713,9 @@
/* Define to force use of thread-safe errno, h_errno, and other functions */
#undef _REENTRANT
/* Define to 1 if you want to emulate signals on WASI */
#undef _WASI_EMULATED_SIGNAL
/* Define to the level of X/Open that your system supports */
#undef _XOPEN_SOURCE
Expand Down
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.