the same license as bash, while the patches and scripts to build python are licensed
under the same license as python).
-Build environment on Ubuntu 16.04
+Build environment on Ubuntu 16.10
=================================
-Packages are built using Ubuntu 16.04. Perform the following steps to configure a Ubuntu 16.04 installation:
+Packages are built using Ubuntu 16.10. Perform the following steps to configure a Ubuntu 16.10 installation:
- Run `scripts/setup-ubuntu.sh` to install required packages and setup the `/data/` folder.
Build environment using Docker
==============================
-On other Linux distributions than Ubuntu 16.04 (or on other platforms than Linux) the best course
+On other Linux distributions than Ubuntu 16.10 (or on other platforms than Linux) the best course
of action is to setup a Docker container for building packages by executing:
- ./scripts/run-docker.sh
+ ./scripts/run-docker.sh # On Linux and macOS.
+ .\scripts\run-docker.ps1 # On Windows.
This will setup a container (from an image created by [scripts/Dockerfile](scripts/Dockerfile))
suitable for building packages.
====================
* build-all.sh: used for building all packages in the correct order (using buildorder.py).
-* clean-rebuild-all.sh: used for doing a clean rebuild of all packages.
+* clean.sh: used for doing a clean rebuild of all packages.
* scripts/check-pie.sh: Used for verifying that all binaries are using PIE, which is required for Android 5+.
-* scripts/detect-hardlinks.sh: Used for finding if any packages uses hardlinks, which does not work on Android M.
-
* scripts/check-versions.sh: used for checking for package updates.
* scripts/list-packages.sh: used for listing all packages with a one-line summary.
Common porting problems
=======================
-* The Android bionic libc does not have iconv and gettext/libintl functionality built in. A package from the NDK, libandroid-support, contains these and may be used by all packages.
+* The Android bionic libc does not have iconv and gettext/libintl functionality built in. A `libandroid-support` package contains these and may be used by all packages.
* "error: z: no archive symbol table (run ranlib)" usually means that the build machines libz is used instead of the one for cross compilation, due to the builder library -L path being setup incorrectly
-* rindex(3) is defined in <strings.h> but does not exist in NDK, but strrchr(3) from <string.h> is preferred anyway
+* rindex(3) does not exist, but strrchr(3) is preferred anyway.
* <sys/termios.h> does not exist, but <termios.h> is the standard location.
* <sys/fcntl.h> does not exist, but <fcntl.h> is the standard location.
-* glob(3) system function (glob.h) - not in bionic, but use the `libandroid-glob` package
+* <sys/timeb.h> does not exist (removed in POSIX 2008), but ftime(3) can be replaced with gettimeofday(2).
-* [Cmake and cross compiling](http://www.cmake.org/Wiki/CMake_Cross_Compiling).
- `CMAKE_FIND_ROOT_PATH=$TERMUX_PREFIX` to search there.
- `CMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY` and `CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY`
- for only searching there and don't fall back to build machines
+* <glob.h> does not exist, but is available through the `libandroid-glob` package.
-* Android is removing sys/timeb.h because it was removed in POSIX 2008, but ftime(3) can be replaced with gettimeofday(2)
+* SYSV shared memory is not supported by the kernel. A `libandroid-shmem` package, which emulates SYSV shared memory on top of the [ashmem](http://elinux.org/Android_Kernel_Features#ashmem) shared memory system, is available. Use it with `LDFLAGS+=" -landroid-shmem`.
-* mempcpy(3) is a GNU extension. We have added it to <string.h> provided TERMUX_EXPOSE_MEMPCPY is defined,
- so use something like CFLAGS+=" -DTERMUX_EXPOSE_MEMPCPY=1" for packages expecting that function to exist.
+* SYSV semaphores is not supported by the kernel. Use unnamed POSIX semaphores instead (named semaphores are unimplemented).
dlopen() and RTLD_* flags
=================================