230 lines
8.8 KiB
Diff
230 lines
8.8 KiB
Diff
|
diff -Naurp Python-2.7.15.orig/configure.ac Python-2.7.15/configure.ac
|
||
|
--- Python-2.7.15.orig/configure.ac 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/configure.ac 2018-07-05 17:44:50.500985727 +0200
|
||
|
@@ -1790,7 +1790,7 @@ fi
|
||
|
# structures (such as rlimit64) without declaring them. As a
|
||
|
# work-around, disable LFS on such configurations
|
||
|
|
||
|
-use_lfs=yes
|
||
|
+use_lfs=no
|
||
|
AC_MSG_CHECKING(Solaris LFS bug)
|
||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||
|
#define _LARGEFILE_SOURCE 1
|
||
|
diff -Naurp Python-2.7.15.orig/Modules/mmapmodule.c Python-2.7.15/Modules/mmapmodule.c
|
||
|
--- Python-2.7.15.orig/Modules/mmapmodule.c 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Modules/mmapmodule.c 2018-07-05 16:18:40.953035027 +0200
|
||
|
@@ -78,6 +78,12 @@ my_getpagesize(void)
|
||
|
# define MAP_ANONYMOUS MAP_ANON
|
||
|
#endif
|
||
|
|
||
|
+//PMPP API<21
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ < 21
|
||
|
+ extern void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
|
||
|
+#endif
|
||
|
+//PMPP API<21
|
||
|
+
|
||
|
static PyObject *mmap_module_error;
|
||
|
|
||
|
typedef enum
|
||
|
diff -Naurp Python-2.7.15.orig/Modules/posixmodule.c Python-2.7.15/Modules/posixmodule.c
|
||
|
--- Python-2.7.15.orig/Modules/posixmodule.c 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Modules/posixmodule.c 2018-07-05 16:20:48.933033807 +0200
|
||
|
@@ -9477,6 +9477,12 @@ all_ins(PyObject *d)
|
||
|
#define MODNAME "posix"
|
||
|
#endif
|
||
|
|
||
|
+//PMPP API<21
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ < 21
|
||
|
+ extern ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
|
||
|
+#endif
|
||
|
+//PMPP API<21
|
||
|
+
|
||
|
PyMODINIT_FUNC
|
||
|
INITFUNC(void)
|
||
|
{
|
||
|
diff -Naurp Python-2.7.15.orig/Modules/signalmodule.c Python-2.7.15/Modules/signalmodule.c
|
||
|
--- Python-2.7.15.orig/Modules/signalmodule.c 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Modules/signalmodule.c 2018-07-05 16:40:46.601022385 +0200
|
||
|
@@ -32,6 +32,13 @@
|
||
|
#include <process.h>
|
||
|
#endif
|
||
|
|
||
|
+//PMPP API<21
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ < 21
|
||
|
+ #define SIGRTMIN 32
|
||
|
+ #define SIGRTMAX _NSIG
|
||
|
+#endif
|
||
|
+//PMPP API<21
|
||
|
+
|
||
|
#ifndef NSIG
|
||
|
# if defined(_NSIG)
|
||
|
# define NSIG _NSIG /* For BSD/SysV */
|
||
|
diff -Naurp Python-2.7.15.orig/Modules/termios.c Python-2.7.15/Modules/termios.c
|
||
|
--- Python-2.7.15.orig/Modules/termios.c 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Modules/termios.c 2018-07-05 16:43:16.457020956 +0200
|
||
|
@@ -357,7 +357,11 @@ static struct constant {
|
||
|
#endif
|
||
|
|
||
|
/* tcsetattr() constants */
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ > 0
|
||
|
+ {"TCSANOW", TCSETS}, // https://github.com/android-ndk/ndk/issues/441
|
||
|
+#else
|
||
|
{"TCSANOW", TCSANOW},
|
||
|
+#endif
|
||
|
{"TCSADRAIN", TCSADRAIN},
|
||
|
{"TCSAFLUSH", TCSAFLUSH},
|
||
|
#ifdef TCSASOFT
|
||
|
diff -Naurp Python-2.7.15.orig/Objects/obmalloc.c Python-2.7.15/Objects/obmalloc.c
|
||
|
--- Python-2.7.15.orig/Objects/obmalloc.c 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Objects/obmalloc.c 2018-07-05 16:52:27.577015700 +0200
|
||
|
@@ -1,5 +1,11 @@
|
||
|
#include "Python.h"
|
||
|
|
||
|
+//PMPP API<21
|
||
|
+#if __ANDROID_API__ < 21
|
||
|
+ extern void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
|
||
|
+#endif
|
||
|
+//PMPP API<21
|
||
|
+
|
||
|
#if defined(__has_feature) /* Clang */
|
||
|
#if __has_feature(address_sanitizer) /* is ASAN enabled? */
|
||
|
#define ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS \
|
||
|
###############################################################
|
||
|
######### ANDROID LOCALE PATCHES FOR ANDROID API < 21 #########
|
||
|
###############################################################
|
||
|
--- Python-2.7.15.orig/Modules/_localemodule.c 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Modules/_localemodule.c 2018-07-05 16:39:08.241023323 +0200
|
||
|
@@ -170,6 +170,12 @@ PyLocale_setlocale(PyObject* self, PyObj
|
||
|
PyErr_SetString(Error, "invalid locale category");
|
||
|
return NULL;
|
||
|
}
|
||
|
+#else
|
||
|
+ #ifdef __ANDROID__
|
||
|
+ #if defined(__ANDROID_API__) && __ANDROID_API__ < 20
|
||
|
+ return PyUnicode_FromFormat("%s", "C");
|
||
|
+ #endif
|
||
|
+ #endif
|
||
|
#endif
|
||
|
|
||
|
if (locale) {
|
||
|
@@ -215,7 +221,15 @@ PyLocale_localeconv(PyObject* self)
|
||
|
return NULL;
|
||
|
|
||
|
/* if LC_NUMERIC is different in the C library, use saved value */
|
||
|
- l = localeconv();
|
||
|
+ //PMPP API<21
|
||
|
+ #if defined(__ANDROID_API__) && __ANDROID_API__ < 21
|
||
|
+ /* Don't even try on Android's broken locale.h. */
|
||
|
+ goto failed;
|
||
|
+ #else
|
||
|
+ /* if LC_NUMERIC is different in the C library, use saved value */
|
||
|
+ l = localeconv(); //PATCHED
|
||
|
+ #endif
|
||
|
+ //PMPP API<21
|
||
|
|
||
|
/* hopefully, the localeconv result survives the C library calls
|
||
|
involved herein */
|
||
|
@@ -215,7 +215,11 @@ PyLocale_localeconv(PyObject* self)
|
||
|
return NULL;
|
||
|
|
||
|
/* if LC_NUMERIC is different in the C library, use saved value */
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
|
||
|
l = localeconv();
|
||
|
+#else
|
||
|
+ decimal_point = ".";
|
||
|
+#endif
|
||
|
|
||
|
/* hopefully, the localeconv result survives the C library calls
|
||
|
involved herein */
|
||
|
--- Python-2.7.15/Objects/stringlib/formatter.h.orig 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Objects/stringlib/formatter.h 2018-12-26 11:37:08.771315390 +0100
|
||
|
@@ -640,11 +640,17 @@ get_locale_info(int type, LocaleInfo *lo
|
||
|
{
|
||
|
switch (type) {
|
||
|
case LT_CURRENT_LOCALE: {
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
|
||
|
+/* NDK version for SDK below 21 doesn't implement the whole C++11 standard in
|
||
|
+ the STL. locale.h header has stubs for localeconv() method, but the library
|
||
|
+ doesn't implement it. The closest Android SDK that implement localeconv()
|
||
|
+ is SDK 21*/
|
||
|
struct lconv *locale_data = localeconv();
|
||
|
locale_info->decimal_point = locale_data->decimal_point;
|
||
|
locale_info->thousands_sep = locale_data->thousands_sep;
|
||
|
locale_info->grouping = locale_data->grouping;
|
||
|
break;
|
||
|
+#endif
|
||
|
}
|
||
|
case LT_DEFAULT_LOCALE:
|
||
|
locale_info->decimal_point = ".";
|
||
|
--- Python-2.7.15/Objects/stringlib/localeutil.h.orig 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Objects/stringlib/localeutil.h 2018-12-26 11:38:10.003314806 +0100
|
||
|
@@ -202,9 +202,18 @@ _Py_InsertThousandsGroupingLocale(STRING
|
||
|
Py_ssize_t n_digits,
|
||
|
Py_ssize_t min_width)
|
||
|
{
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
|
||
|
+/* NDK version for SDK below 21 doesn't implement the whole C++11 standard in
|
||
|
+ the STL. locale.h header has stubs for localeconv() method, but the library
|
||
|
+ doesn't implement it. The closest Android SDK that implement localeconv()
|
||
|
+ is SDK 21*/
|
||
|
struct lconv *locale_data = localeconv();
|
||
|
const char *grouping = locale_data->grouping;
|
||
|
const char *thousands_sep = locale_data->thousands_sep;
|
||
|
+#else
|
||
|
+ const char *grouping = "\3\0";
|
||
|
+ const char *thousands_sep = ",";
|
||
|
+#endif
|
||
|
|
||
|
return _Py_InsertThousandsGrouping(buffer, n_buffer, digits, n_digits,
|
||
|
min_width, grouping, thousands_sep);
|
||
|
--- Python-2.7.15/Python/pystrtod.c.orig 2018-04-30 00:47:33.000000000 +0200
|
||
|
+++ Python-2.7.15/Python/pystrtod.c 2018-12-26 11:47:54.723309229 +0100
|
||
|
@@ -126,7 +126,13 @@ _PyOS_ascii_strtod(const char *nptr, cha
|
||
|
{
|
||
|
char *fail_pos;
|
||
|
double val = -1.0;
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
|
||
|
+/* NDK version for SDK below 21 doesn't implement the whole C++11 standard in
|
||
|
+ the STL. locale.h header has stubs for localeconv() method, but the library
|
||
|
+ doesn't implement it. The closest Android SDK that implement localeconv()
|
||
|
+ is SDK 21*/
|
||
|
struct lconv *locale_data;
|
||
|
+#endif
|
||
|
const char *decimal_point;
|
||
|
size_t decimal_point_len;
|
||
|
const char *p, *decimal_point_pos;
|
||
|
@@ -138,8 +144,16 @@ _PyOS_ascii_strtod(const char *nptr, cha
|
||
|
|
||
|
fail_pos = NULL;
|
||
|
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
|
||
|
+/* NDK version for SDK below 21 doesn't implement the whole C++11 standard in
|
||
|
+ the STL. locale.h header has stubs for localeconv() method, but the library
|
||
|
+ doesn't implement it. The closest Android SDK that implement localeconv()
|
||
|
+ is SDK 21*/
|
||
|
locale_data = localeconv();
|
||
|
decimal_point = locale_data->decimal_point;
|
||
|
+#else
|
||
|
+ decimal_point = ".";
|
||
|
+#endif
|
||
|
decimal_point_len = strlen(decimal_point);
|
||
|
|
||
|
assert(decimal_point_len != 0);
|
||
|
@@ -375,8 +389,16 @@ PyOS_string_to_double(const char *s,
|
||
|
Py_LOCAL_INLINE(void)
|
||
|
change_decimal_from_locale_to_dot(char* buffer)
|
||
|
{
|
||
|
+#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
|
||
|
+/* NDK version for SDK below 21 doesn't implement the whole C++11 standard in
|
||
|
+ the STL. locale.h header has stubs for localeconv() method, but the library
|
||
|
+ doesn't implement it. The closest Android SDK that implement localeconv()
|
||
|
+ is SDK 21*/
|
||
|
struct lconv *locale_data = localeconv();
|
||
|
const char *decimal_point = locale_data->decimal_point;
|
||
|
+#else
|
||
|
+ decimal_point = ".";
|
||
|
+#endif
|
||
|
|
||
|
if (decimal_point[0] != '.' || decimal_point[1] != 0) {
|
||
|
size_t decimal_point_len = strlen(decimal_point);
|