Previously libandroid-support contained inline stubs for libintl.h
functions (gettext(), dgettext() and friends).
We now provide inline versions of them in libintl.h directly so
libandroid-support is no longer necessary to get them.
The platform headers has the following macro:
#define MB_CUR_MAX __ctype_get_mb_cur_max()
where __ctype_get_mb_cur_max() tries to handle UTF-8 encodings.
However, even in Android 7.0 setlocale(LC_ALL, ""), which many
programs do at startup, doesn't work in that it sets the locale
as non-utf8:
https://android.googlesource.com/platform/bionic/+/nougat-release/libc/bionic/locale.cpp#139
So we just always consider us being in an utf-8 locale.
Also rebuild coreutils to fix#1136.
This will make things as std::to_string() and other C++ features
work with a modern and supported C++ library.
We package up libc++_shared.so and bump the revision of every C++
using package to make it rebuild against it.
Users who have built C++ using libraries or programs will probably
need to rebuild them if they are linked against Termux-supplied
libraries, as user code was previously linked against gnustl while
the system libraries are now using libc++, and it's not a good idea
to mix C++ standard libraries in a program.
By setting the TERMUX_PKG_API_LEVEL property to an android api
level packages can build against later API levels than the current
Termux default of 21.
32-bit android uses 32-bit off_t by default. When building with
-D_FILE_OFFSET_BITS=64 with unified headers off_t are promoted
to 64-bit, but there are bugs in the toolchain and spotty support
for it in the platform (not all functions are available until
android-24, and the platform zlib is compiled with 32-bit off_t).
Also, unless every library&program is rebuilt with 64-bit off_t,
including user-built ones, we risk a mismatch between programs and
libraries which can cause serious (but sometimes subtle) runtime
failures.
As -D_FILE_OFFSET_BITS=64 is not that important for most users
(with mariadb requiring it as an exception), we drop the support
for now by patching it away in <sys/cdefs.h>.
EXPERIMENTAL STATUS!
To try things out: Define TERMUX_UNIFIED_HEADERS=1 and build to
use the new unified headers.
This causes ndk_patches_unified/ to be used to patch the NDK header
files instead of ndk_patches/.
The docker image has been updated, use
./scripts/update-docker.sh
to update.
Note that we are still using the old deprecated non-unified headers
- updating to that is the next step.