*/
#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
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
--- /dev/null
+Added and fixed ``#ifdef HAVE_FEATURE`` checks for functionality that is not
+available on WASI platform.
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);
#endif /* defined(HAVE_SYSTEM) && !defined(MS_WINDOWS) */
+#if defined(HAVE_UMASK)
+
PyDoc_STRVAR(os_umask__doc__,
"umask($module, mask, /)\n"
"--\n"
return return_value;
}
+#endif /* defined(HAVE_UMASK) */
+
PyDoc_STRVAR(os_unlink__doc__,
"unlink($module, /, path, *, dir_fd=None)\n"
"--\n"
#define OS_SYSTEM_METHODDEF
#endif /* !defined(OS_SYSTEM_METHODDEF) */
+#ifndef OS_UMASK_METHODDEF
+ #define OS_UMASK_METHODDEF
+#endif /* !defined(OS_UMASK_METHODDEF) */
+
#ifndef OS_UNAME_METHODDEF
#define OS_UNAME_METHODDEF
#endif /* !defined(OS_UNAME_METHODDEF) */
#ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF
#define OS_WAITSTATUS_TO_EXITCODE_METHODDEF
#endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */
-/*[clinic end generated code: output=05505f171cdcff72 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=d95ba7b0b9c52685 input=a9049054013a1b77]*/
#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
}
else
#endif /* HAVE_FHCMODAT */
+ {
+#ifdef HAVE_CHMOD
result = chmod(path->narrow, mode);
+#else
+ result = -1;
+ errno = ENOSYS;
+#endif
+ }
Py_END_ALLOW_THREADS
if (result) {
#endif /* HAVE_SYSTEM */
+#ifdef HAVE_UMASK
/*[clinic input]
os.umask
return posix_error();
return PyLong_FromLong((long)i);
}
+#endif
#ifdef MS_WINDOWS
{
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);
Py_DECREF(res);
}
t1 = clock();
+#endif
return PyFloat_FromDouble((double)(t1-t0) / CLOCKS_PER_SEC);
}
/* 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 */
* 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
--- /dev/null
+# config.site override for cross compiling to wasm32-wasi platform
+#
+# Written by Christian Heimes <christian@python.org>
+# 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
EXEEXT=.html ;; #(
Emscripten/node) :
EXEEXT=.js ;; #(
- wasi/*) :
+ WASI/*) :
EXEEXT=.wasm ;; #(
*) :
EXEEXT=
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
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 \
# 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 \
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 :
AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
[Emscripten/browser], [EXEEXT=.html],
[Emscripten/node], [EXEEXT=.js],
- [wasi/*], [EXEEXT=.wasm],
+ [WASI/*], [EXEEXT=.wasm],
[EXEEXT=]
)
])
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)
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 \
# 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 \
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 \
])
/* 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
/* 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
/* 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
/* 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