| Index: ports/python-static/nacl.patch
|
| ===================================================================
|
| new file mode 100644
|
|
|
| --- /dev/null
|
| +++ b/ports/python-static/nacl.patch
|
| @@ -0,0 +1,627 @@
|
| +diff --git a/Include/datetime.h b/Include/datetime.h
|
| +index 47abe5c..4884e79 100644
|
| +--- a/Include/datetime.h
|
| ++++ b/Include/datetime.h
|
| +@@ -166,6 +166,8 @@ typedef struct {
|
| +
|
| + #ifdef Py_BUILD_CORE
|
| +
|
| ++#define PyDataTime_STATIC 1
|
| ++
|
| + /* Macros for type checking when building the Python core. */
|
| + #define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType)
|
| + #define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType)
|
| +diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py
|
| +index 2aa1cb1..e90c38f 100644
|
| +--- a/Lib/distutils/unixccompiler.py
|
| ++++ b/Lib/distutils/unixccompiler.py
|
| +@@ -286,3 +286,42 @@ class UnixCCompiler(CCompiler):
|
| +
|
| + # Oops, didn't find it in *any* of 'dirs'
|
| + return None
|
| ++
|
| ++# Thanks to the GPAW project for this function.
|
| ++def _link_shared_object (self,
|
| ++ objects,
|
| ++ output_filename,
|
| ++ output_dir=None,
|
| ++ libraries=None,
|
| ++ library_dirs=None,
|
| ++ runtime_library_dirs=None,
|
| ++ export_symbols=None,
|
| ++ debug=0,
|
| ++ extra_preargs=None,
|
| ++ extra_postargs=None,
|
| ++ build_temp=None,
|
| ++ target_lang=None):
|
| ++
|
| ++ if output_dir is None:
|
| ++ (output_dir, output_filename) = os.path.split(output_filename)
|
| ++ output_fullname = os.path.join(output_dir, output_filename)
|
| ++ output_fullname = os.path.abspath(output_fullname)
|
| ++ linkline = "%s %s" % (output_filename[:-2], output_fullname)
|
| ++ for l in library_dirs:
|
| ++ linkline += " -L" + l
|
| ++ for l in libraries:
|
| ++ linkline += " -l" + l
|
| ++ old_fmt = self.static_lib_format
|
| ++ self.static_lib_format = "%s%.0s"
|
| ++ self.create_static_lib(objects,
|
| ++ output_filename,
|
| ++ output_dir,
|
| ++ debug,
|
| ++ target_lang)
|
| ++
|
| ++ self.static_lib_format = old_fmt
|
| ++
|
| ++# Only override when the NACL_SDK_ROOT
|
| ++import os
|
| ++if os.environ.get("NACL_PORT_BUILD", None) in ["dest", "bootstrap"]:
|
| ++ UnixCCompiler.link_shared_object = _link_shared_object
|
| +diff --git a/Makefile.pre.in b/Makefile.pre.in
|
| +index 9d55550..09e7a69 100644
|
| +--- a/Makefile.pre.in
|
| ++++ b/Makefile.pre.in
|
| +@@ -592,14 +592,18 @@ Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule
|
| +
|
| + $(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGENSRCS)
|
| + @$(MKDIR_P) Include
|
| ++ifndef CROSS_COMPILE
|
| + $(MAKE) $(PGEN)
|
| ++endif
|
| + $(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)
|
| + $(GRAMMAR_C): $(GRAMMAR_H) $(GRAMMAR_INPUT) $(PGENSRCS)
|
| + $(MAKE) $(GRAMMAR_H)
|
| + touch $(GRAMMAR_C)
|
| +
|
| ++ifndef CROSS_COMPILE
|
| + $(PGEN): $(PGENOBJS)
|
| + $(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
|
| ++endif
|
| +
|
| + Parser/grammar.o: $(srcdir)/Parser/grammar.c \
|
| + $(srcdir)/Include/token.h \
|
| +@@ -1000,6 +1004,7 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
|
| + $(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
|
| + $(DESTDIR)$(LIBDEST)/distutils/tests ; \
|
| + fi
|
| ++ifndef CROSS_COMPILE
|
| + PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
| + $(PYTHON_FOR_BUILD) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
|
| + -d $(LIBDEST) -f \
|
| +@@ -1018,6 +1023,7 @@ libinstall: build_all $(srcdir)/Lib/$(PLATDIR) $(srcdir)/Modules/xxmodule.c
|
| + $(PYTHON_FOR_BUILD) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
|
| + -d $(LIBDEST)/site-packages -f \
|
| + -x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
|
| ++endif
|
| + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
| + $(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
|
| + -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
|
| +diff --git a/Modules/_ctypes/libffi/configure b/Modules/_ctypes/libffi/configure
|
| +index 8230830..1ab4dcb 100755
|
| +--- a/Modules/_ctypes/libffi/configure
|
| ++++ b/Modules/_ctypes/libffi/configure
|
| +@@ -13393,7 +13393,7 @@ case "$host" in
|
| + TARGETDIR=x86
|
| + if test $ac_cv_sizeof_size_t = 4; then
|
| + case "$host" in
|
| +- *-gnux32)
|
| ++ *-gnux32 | *-nacl)
|
| + TARGET=X86_64
|
| + ;;
|
| + *)
|
| +diff --git a/Modules/_ctypes/libffi/src/x86/ffi64.c b/Modules/_ctypes/libffi/src/x86/ffi64.c
|
| +index 2014af2..cacf894 100644
|
| +--- a/Modules/_ctypes/libffi/src/x86/ffi64.c
|
| ++++ b/Modules/_ctypes/libffi/src/x86/ffi64.c
|
| +@@ -202,10 +202,12 @@ classify_argument (ffi_type *type, enum x86_64_reg_class classes[],
|
| + case FFI_TYPE_DOUBLE:
|
| + classes[0] = X86_64_SSEDF_CLASS;
|
| + return 1;
|
| ++#if FFI_TYPE_DOUBLE != FFI_TYPE_LONGDOUBLE
|
| + case FFI_TYPE_LONGDOUBLE:
|
| + classes[0] = X86_64_X87_CLASS;
|
| + classes[1] = X86_64_X87UP_CLASS;
|
| + return 2;
|
| ++#endif
|
| + case FFI_TYPE_STRUCT:
|
| + {
|
| + const int UNITS_PER_WORD = 8;
|
| +diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
|
| +index b0386f0..a5c77b4 100644
|
| +--- a/Modules/_testcapimodule.c
|
| ++++ b/Modules/_testcapimodule.c
|
| +@@ -1278,6 +1278,9 @@ static int test_run_counter = 0;
|
| +
|
| + static PyObject *
|
| + test_datetime_capi(PyObject *self, PyObject *args) {
|
| ++#ifdef PyDataTime_STATIC
|
| ++ Py_RETURN_NONE;
|
| ++#else
|
| + if (PyDateTimeAPI) {
|
| + if (test_run_counter) {
|
| + /* Probably regrtest.py -R */
|
| +@@ -1295,6 +1298,7 @@ test_datetime_capi(PyObject *self, PyObject *args) {
|
| + Py_RETURN_NONE;
|
| + else
|
| + return NULL;
|
| ++#endif
|
| + }
|
| +
|
| +
|
| +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
| +index 65ade9f..1a971dc 100644
|
| +--- a/Modules/posixmodule.c
|
| ++++ b/Modules/posixmodule.c
|
| +@@ -663,9 +663,13 @@ posix_error_with_unicode_filename(Py_UNICODE* name)
|
| +
|
| +
|
| + static PyObject *
|
| +-posix_error_with_allocated_filename(char* name)
|
| ++posix_error_with_allocated_filename(const char* func, char* name)
|
| + {
|
| +- PyObject *rc = PyErr_SetFromErrnoWithFilename(PyExc_OSError, name);
|
| ++ PyObject *rc;
|
| ++ if (errno == ENOSYS)
|
| ++ rc = PyErr_SetFromErrnoWithFilename(PyExc_OSError, func);
|
| ++ else
|
| ++ rc = PyErr_SetFromErrnoWithFilename(PyExc_OSError, name);
|
| + PyMem_Free(name);
|
| + return rc;
|
| + }
|
| +@@ -826,7 +830,7 @@ posix_1str(PyObject *args, char *format, int (*func)(const char*))
|
| + res = (*func)(path1);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path1);
|
| ++ return posix_error_with_allocated_filename(format, path1);
|
| + PyMem_Free(path1);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -1859,7 +1863,7 @@ posix_chmod(PyObject *self, PyObject *args)
|
| + res = chmod(path, i);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("chmod", path);
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -1906,7 +1910,7 @@ posix_lchmod(PyObject *self, PyObject *args)
|
| + res = lchmod(path, i);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("lchmod", path);
|
| + PyMem_Free(path);
|
| + Py_RETURN_NONE;
|
| + }
|
| +@@ -1931,7 +1935,7 @@ posix_chflags(PyObject *self, PyObject *args)
|
| + res = chflags(path, flags);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("chflags", path);
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -1957,7 +1961,7 @@ posix_lchflags(PyObject *self, PyObject *args)
|
| + res = lchflags(path, flags);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("lchflags", path);
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -2028,7 +2032,7 @@ posix_chown(PyObject *self, PyObject *args)
|
| + res = chown(path, uid, gid);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("chown", path);
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -2083,7 +2087,7 @@ posix_lchown(PyObject *self, PyObject *args)
|
| + res = lchown(path, uid, gid);
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("lchown", path);
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -2478,7 +2482,7 @@ posix_listdir(PyObject *self, PyObject *args)
|
| + dirp = opendir(name);
|
| + Py_END_ALLOW_THREADS
|
| + if (dirp == NULL) {
|
| +- return posix_error_with_allocated_filename(name);
|
| ++ return posix_error_with_allocated_filename("listdir", name);
|
| + }
|
| + if ((d = PyList_New(0)) == NULL) {
|
| + Py_BEGIN_ALLOW_THREADS
|
| +@@ -2500,7 +2504,7 @@ posix_listdir(PyObject *self, PyObject *args)
|
| + closedir(dirp);
|
| + Py_END_ALLOW_THREADS
|
| + Py_DECREF(d);
|
| +- return posix_error_with_allocated_filename(name);
|
| ++ return posix_error_with_allocated_filename("listdir", name);
|
| + }
|
| + }
|
| + if (ep->d_name[0] == '.' &&
|
| +@@ -2660,7 +2664,7 @@ posix_mkdir(PyObject *self, PyObject *args)
|
| + #endif
|
| + Py_END_ALLOW_THREADS
|
| + if (res < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("mkdir", path);
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| + return Py_None;
|
| +@@ -3059,7 +3063,7 @@ done:
|
| + #endif /* HAVE_UTIMES */
|
| + }
|
| + if (res < 0) {
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("utime", path);
|
| + }
|
| + PyMem_Free(path);
|
| + Py_INCREF(Py_None);
|
| +@@ -6286,7 +6290,7 @@ posix_readlink(PyObject *self, PyObject *args)
|
| + n = readlink(path, buf, (int) sizeof buf);
|
| + Py_END_ALLOW_THREADS
|
| + if (n < 0)
|
| +- return posix_error_with_allocated_filename(path);
|
| ++ return posix_error_with_allocated_filename("readlink", path);
|
| +
|
| + PyMem_Free(path);
|
| + v = PyString_FromStringAndSize(buf, n);
|
| +@@ -6532,7 +6536,7 @@ posix_open(PyObject *self, PyObject *args)
|
| + PyErr_Clear();
|
| + #endif
|
| +
|
| +- if (!PyArg_ParseTuple(args, "eti|i",
|
| ++ if (!PyArg_ParseTuple(args, "eti|i:open",
|
| + Py_FileSystemDefaultEncoding, &file,
|
| + &flag, &mode))
|
| + return NULL;
|
| +@@ -6541,7 +6545,7 @@ posix_open(PyObject *self, PyObject *args)
|
| + fd = open(file, flag, mode);
|
| + Py_END_ALLOW_THREADS
|
| + if (fd < 0)
|
| +- return posix_error_with_allocated_filename(file);
|
| ++ return posix_error_with_allocated_filename("open", file);
|
| + PyMem_Free(file);
|
| + return PyInt_FromLong((long)fd);
|
| + }
|
| +diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
|
| +index c2907f6..faa3ad6 100644
|
| +--- a/Modules/pwdmodule.c
|
| ++++ b/Modules/pwdmodule.c
|
| +@@ -94,6 +94,29 @@ mkpwent(struct passwd *p)
|
| + return v;
|
| + }
|
| +
|
| ++#ifdef __native_client__
|
| ++// python relies on a working version of getpwuid(3)
|
| ++// which Native Client does not yet provide.
|
| ++// TODO(sbc): This should only really be needed when
|
| ++// building for the sel_ldr. It should be possible to
|
| ++// use the C-library version (which tries of open files
|
| ++// under /etc) when using nacl_io.
|
| ++static struct passwd *my_getpwuid(uid_t uid)
|
| ++{
|
| ++ static struct passwd dummy = {
|
| ++ "nacl_user",
|
| ++ "nacl_pass",
|
| ++ 1,
|
| ++ 1,
|
| ++ "NaCl User",
|
| ++ "/home/nacl_user",
|
| ++ "/bin/sh",
|
| ++ };
|
| ++ return &dummy;
|
| ++}
|
| ++#define getpwuid my_getpwuid
|
| ++#endif
|
| ++
|
| + PyDoc_STRVAR(pwd_getpwuid__doc__,
|
| + "getpwuid(uid) -> (pw_name,pw_passwd,pw_uid,\n\
|
| + pw_gid,pw_gecos,pw_dir,pw_shell)\n\
|
| +diff --git a/Modules/python.c b/Modules/python.c
|
| +index 2739b8b..5a5b753 100644
|
| +--- a/Modules/python.c
|
| ++++ b/Modules/python.c
|
| +@@ -6,6 +6,19 @@
|
| + #include <floatingpoint.h>
|
| + #endif
|
| +
|
| ++#ifdef __native_client__
|
| ++#include <stdio.h>
|
| ++#include <sys/utsname.h>
|
| ++
|
| ++// Dummy implementation of uname. This is only needed for the sel_ldr
|
| ++// version of python. Otherwise it gets provided by nacl_io.
|
| ++int uname(struct utsname *buf)
|
| ++{
|
| ++ sprintf(buf->sysname, "NaCl");
|
| ++ return 0;
|
| ++}
|
| ++#endif
|
| ++
|
| + int
|
| + main(int argc, char **argv)
|
| + {
|
| +@@ -20,5 +33,9 @@ main(int argc, char **argv)
|
| + m = fpgetmask();
|
| + fpsetmask(m & ~FP_X_OFL);
|
| + #endif
|
| ++#ifdef __native_client__
|
| ++ setvbuf(stdout, NULL, _IOLBF, 0);
|
| ++ setvbuf(stdin, NULL, _IOLBF, 0);
|
| ++#endif
|
| + return Py_Main(argc, argv);
|
| + }
|
| +diff --git a/Modules/timemodule.c b/Modules/timemodule.c
|
| +index 12c43b0..b727afa 100644
|
| +--- a/Modules/timemodule.c
|
| ++++ b/Modules/timemodule.c
|
| +@@ -34,6 +34,11 @@ extern int ftime(struct timeb *);
|
| + #endif /* MS_WINDOWS */
|
| + #endif /* HAVE_FTIME */
|
| +
|
| ++#if defined(__native_client__) && !defined(__GLIBC__)
|
| ++#define timezone _timezone
|
| ++#define daylight _daylight
|
| ++#endif
|
| ++
|
| + #if defined(__WATCOMC__) && !defined(__QNX__)
|
| + #include <i86.h>
|
| + #else
|
| +diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
|
| +index 17ebab1..93ea45d 100644
|
| +--- a/Python/dynload_shlib.c
|
| ++++ b/Python/dynload_shlib.c
|
| +@@ -84,6 +84,11 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
|
| + PyOS_snprintf(funcname, sizeof(funcname),
|
| + LEAD_UNDERSCORE "init%.200s", shortname);
|
| +
|
| ++
|
| ++/* Native Client's fstat() imlemenation doesn't set st_dev
|
| ++ * and st_ino correctly so disable the dlopen handle cache.
|
| ++ * TODO(sbc): fix NaCl's fstat() */
|
| ++#ifndef __native_client__
|
| + if (fp != NULL) {
|
| + int i;
|
| + struct stat statb;
|
| +@@ -107,6 +112,7 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
|
| + #endif
|
| + }
|
| + }
|
| ++#endif
|
| +
|
| + #if !(defined(PYOS_OS2) && defined(PYCC_GCC))
|
| + dlopenflags = PyThreadState_GET()->interp->dlopenflags;
|
| +diff --git a/Python/getversion.c b/Python/getversion.c
|
| +index 7bd6efd..b4f6702 100644
|
| +--- a/Python/getversion.c
|
| ++++ b/Python/getversion.c
|
| +@@ -8,8 +8,8 @@
|
| + const char *
|
| + Py_GetVersion(void)
|
| + {
|
| +- static char version[250];
|
| +- PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s",
|
| ++ static char version[270];
|
| ++ PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.100s",
|
| + PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler());
|
| + return version;
|
| + }
|
| +diff --git a/Python/thread.c b/Python/thread.c
|
| +index dd333e8..33fec81 100644
|
| +--- a/Python/thread.c
|
| ++++ b/Python/thread.c
|
| +@@ -14,9 +14,19 @@
|
| + library (e.g. gnu pth in pthread emulation) */
|
| + # ifdef HAVE_PTHREAD_H
|
| + # include <pthread.h> /* _POSIX_THREADS */
|
| ++# if defined __native_client__ && !defined __GLIBC__
|
| ++ /* Under NaCl newlib neither pthread.h nor unistd.h defines _POSIX_THREADS.
|
| ++ However this file expects it to be defined if pthreads are present so we
|
| ++ define it here after including pthread.h
|
| ++ TODO(sbc): remove this hack once newlib is fixed:
|
| ++ https://code.google.com/p/nativeclient/issues/detail?id=3551
|
| ++ */
|
| ++# define _POSIX_THREADS
|
| ++# endif
|
| + # endif
|
| + #endif
|
| +
|
| ++
|
| + #ifndef DONT_HAVE_STDIO_H
|
| + #include <stdio.h>
|
| + #endif
|
| +diff --git a/configure b/configure
|
| +index dc0dfd0..d45f7b0 100755
|
| +--- a/configure
|
| ++++ b/configure
|
| +@@ -2853,19 +2853,26 @@ if test "$cross_compiling" = yes; then
|
| + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5
|
| + $as_echo_n "checking for python interpreter for cross build... " >&6; }
|
| + if test -z "$PYTHON_FOR_BUILD"; then
|
| +- for interp in python$PACKAGE_VERSION python2 python; do
|
| +- which $interp >/dev/null 2>&1 || continue
|
| +- if $interp -c 'import sys;sys.exit(not (sys.version_info[:2] >= (2,7) and sys.version_info[0] < 3))'; then
|
| +- break
|
| +- fi
|
| +- interp=
|
| +- done
|
| ++ case "$host" in
|
| ++ *-*-nacl*)
|
| ++ interp=$(cd ../../python-host/build-nacl-host && pwd)/python
|
| ++ ;;
|
| ++ *)
|
| ++ for interp in python$PACKAGE_VERSION python2 python; do
|
| ++ which $interp >/dev/null 2>&1 || continue
|
| ++ if $interp -c 'import sys;sys.exit(not (sys.version_info@<:@:2@:>@ >= (2,7) and sys.version_info@<:@0@:>@ < 3))'; then
|
| ++ break
|
| ++ fi
|
| ++ interp=
|
| ++ done
|
| ++ ;;
|
| ++ esac
|
| + if test x$interp = x; then
|
| + as_fn_error $? "python$PACKAGE_VERSION interpreter not found" "$LINENO" 5
|
| + fi
|
| + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $interp" >&5
|
| + $as_echo "$interp" >&6; }
|
| +- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
|
| ++ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(abs_srcdir)/Lib:$(abs_srcdir)/Lib/plat-$(MACHDEP) '$interp
|
| + fi
|
| + elif test "$cross_compiling" = maybe; then
|
| + as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5
|
| +@@ -3168,6 +3175,9 @@ then
|
| + # `define_xopen_source' in the case statement below. For the
|
| + # current supported cross builds, this macro is not adjusted.
|
| + case "$host" in
|
| ++ *-*-nacl*)
|
| ++ ac_sys_system=NaCl
|
| ++ ;;
|
| + *-*-linux*)
|
| + ac_sys_system=Linux
|
| + ;;
|
| +@@ -3217,6 +3227,15 @@ if test "$cross_compiling" = yes; then
|
| + _host_cpu=$host_cpu
|
| + esac
|
| + ;;
|
| ++ *-*-nacl*)
|
| ++ case "$host_cpu" in
|
| ++ arm*)
|
| ++ _host_cpu=arm
|
| ++ ;;
|
| ++ *)
|
| ++ _host_cpu=$host_cpu
|
| ++ esac
|
| ++ ;;
|
| + *-*-cygwin*)
|
| + _host_cpu=
|
| + ;;
|
| +@@ -8246,7 +8265,7 @@ then
|
| + fi
|
| + fi
|
| + ;;
|
| +- Linux*|GNU*|QNX*)
|
| ++ Linux*|GNU*|QNX*|NaCl*)
|
| + LDSHARED='$(CC) -shared'
|
| + LDCXXSHARED='$(CXX) -shared';;
|
| + BSD/OS*/4*)
|
| +@@ -8320,7 +8339,7 @@ then
|
| + then CCSHARED="-fPIC";
|
| + else CCSHARED="+z";
|
| + fi;;
|
| +- Linux*|GNU*) CCSHARED="-fPIC";;
|
| ++ Linux*|GNU*|NaCl*) CCSHARED="-fPIC";;
|
| + BSD/OS*/4*) CCSHARED="-fpic";;
|
| + FreeBSD*|NetBSD*|OpenBSD*|DragonFly*) CCSHARED="-fPIC";;
|
| + OpenUNIX*|UnixWare*)
|
| +@@ -8354,7 +8373,7 @@ then
|
| + LINKFORSHARED="-Wl,-E -Wl,+s";;
|
| + # LINKFORSHARED="-Wl,-E -Wl,+s -Wl,+b\$(BINLIBDEST)/lib-dynload";;
|
| + BSD/OS/4*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
| +- Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
| ++ Linux*|GNU*|NaCl*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
| + # -u libsys_s pulls in all symbols in libsys
|
| + Darwin/*)
|
| + # -u _PyMac_Error is needed to pull in the mac toolbox glue,
|
| +diff --git a/configure.ac b/configure.ac
|
| +index 30f5bf4..4a8f64c 100644
|
| +--- a/configure.ac
|
| ++++ b/configure.ac
|
| +@@ -19,18 +19,25 @@ AC_SUBST(host)
|
| + if test "$cross_compiling" = yes; then
|
| + AC_MSG_CHECKING([for python interpreter for cross build])
|
| + if test -z "$PYTHON_FOR_BUILD"; then
|
| +- for interp in python$PACKAGE_VERSION python2 python; do
|
| +- which $interp >/dev/null 2>&1 || continue
|
| +- if $interp -c 'import sys;sys.exit(not (sys.version_info@<:@:2@:>@ >= (2,7) and sys.version_info@<:@0@:>@ < 3))'; then
|
| +- break
|
| +- fi
|
| +- interp=
|
| +- done
|
| ++ case "$host" in
|
| ++ *-*-nacl*)
|
| ++ interp=$(cd ../../python-host/build-nacl-host && pwd)/python
|
| ++ ;;
|
| ++ *)
|
| ++ for interp in python$PACKAGE_VERSION python2 python; do
|
| ++ which $interp >/dev/null 2>&1 || continue
|
| ++ if $interp -c 'import sys;sys.exit(not (sys.version_info@<:@:2@:>@ >= (2,7) and sys.version_info@<:@0@:>@ < 3))'; then
|
| ++ break
|
| ++ fi
|
| ++ interp=
|
| ++ done
|
| ++ ;;
|
| ++ esac
|
| + if test x$interp = x; then
|
| + AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
|
| + fi
|
| + AC_MSG_RESULT($interp)
|
| +- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/plat-$(MACHDEP) '$interp
|
| ++ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(abs_srcdir)/Lib:$(abs_srcdir)/Lib/plat-$(MACHDEP) '$interp
|
| + fi
|
| + elif test "$cross_compiling" = maybe; then
|
| + AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
|
| +@@ -318,6 +325,9 @@ then
|
| + *-*-cygwin*)
|
| + ac_sys_system=Cygwin
|
| + ;;
|
| ++ *-*-nacl*)
|
| ++ ac_sys_system=NaCl
|
| ++ ;;
|
| + *)
|
| + # for now, limit cross builds to known configurations
|
| + MACHDEP="unknown"
|
| +@@ -361,6 +371,15 @@ if test "$cross_compiling" = yes; then
|
| + _host_cpu=$host_cpu
|
| + esac
|
| + ;;
|
| ++ *-*-nacl*)
|
| ++ case "$host_cpu" in
|
| ++ arm*)
|
| ++ _host_cpu=arm
|
| ++ ;;
|
| ++ *)
|
| ++ _host_cpu=$host_cpu
|
| ++ esac
|
| ++ ;;
|
| + *-*-cygwin*)
|
| + _host_cpu=
|
| + ;;
|
| +@@ -2024,7 +2043,7 @@ then
|
| + fi
|
| + fi
|
| + ;;
|
| +- Linux*|GNU*|QNX*)
|
| ++ Linux*|GNU*|QNX*|NaCl*)
|
| + LDSHARED='$(CC) -shared'
|
| + LDCXXSHARED='$(CXX) -shared';;
|
| + BSD/OS*/4*)
|
| +@@ -2096,7 +2115,7 @@ then
|
| + then CCSHARED="-fPIC";
|
| + else CCSHARED="+z";
|
| + fi;;
|
| +- Linux*|GNU*) CCSHARED="-fPIC";;
|
| ++ Linux*|GNU*|NaCl*) CCSHARED="-fPIC";;
|
| + BSD/OS*/4*) CCSHARED="-fpic";;
|
| + FreeBSD*|NetBSD*|OpenBSD*|DragonFly*) CCSHARED="-fPIC";;
|
| + OpenUNIX*|UnixWare*)
|
| +@@ -2128,7 +2147,7 @@ then
|
| + LINKFORSHARED="-Wl,-E -Wl,+s";;
|
| + # LINKFORSHARED="-Wl,-E -Wl,+s -Wl,+b\$(BINLIBDEST)/lib-dynload";;
|
| + BSD/OS/4*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
| +- Linux*|GNU*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
| ++ Linux*|GNU*|NaCl*) LINKFORSHARED="-Xlinker -export-dynamic";;
|
| + # -u libsys_s pulls in all symbols in libsys
|
| + Darwin/*)
|
| + # -u _PyMac_Error is needed to pull in the mac toolbox glue,
|
|
|
|
|