--- /dev/null
+# From https://github.com/etiago/termux-nodejs-lts
+TERMUX_PKG_HOMEPAGE=http://nodejs.org/
+TERMUX_PKG_DESCRIPTION="Platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications"
+TERMUX_PKG_VERSION=4.4.3
+TERMUX_PKG_SRCURL=https://nodejs.org/dist/v${TERMUX_PKG_VERSION}/node-v${TERMUX_PKG_VERSION}.tar.gz
+TERMUX_PKG_DEPENDS="openssl, libuv"
+TERMUX_PKG_RM_AFTER_INSTALL="lib/node_modules/npm/html lib/node_modules/npm/make.bat share/systemtap lib/dtrace"
+TERMUX_PKG_BUILD_IN_SRC=yes
+TERMUX_PKG_CONFLICTS=nodejs
+
+termux_step_configure () {
+ #XXX: node.js build does not handle already installed headers
+ # https://github.com/nodejs/node/issues/2637
+ # So we remove them here and restore afterwards.
+ rm -Rf $TERMUX_PKG_CACHEDIR/gtest-include-dir $TERMUX_PKG_CACHEDIR/ares-includes
+ test -d $TERMUX_PREFIX/include/gtest &&
+ mv $TERMUX_PREFIX/include/gtest $TERMUX_PKG_CACHEDIR/gtest-include-dir
+ test -f $TERMUX_PREFIX/include/ares.h &&
+ mkdir $TERMUX_PKG_CACHEDIR/ares-includes/ &&
+ mv $TERMUX_PREFIX/include/ares* $TERMUX_PKG_CACHEDIR/ares-includes/
+
+ # https://github.com/nodejs/build/issues/266: "V8 can handle cross compiling of
+ # snapshots if the {CC,CXX}_host variables are defined, by compiling the
+ # mksnapshot executable with the host compiler". But this currently fails
+ # due to the host build picking up targets flags.
+ export CC_host=gcc
+ export CXX_host=g++
+
+ if [ $TERMUX_ARCH = "arm" ]; then
+ DEST_CPU="arm"
+ elif [ $TERMUX_ARCH = "i686" ]; then
+ DEST_CPU="ia32"
+ elif [ $TERMUX_ARCH = "aarch64" ]; then
+ DEST_CPU="arm64"
+ elif [ $TERMUX_ARCH = "x86_64" ]; then
+ DEST_CPU="x64"
+ else
+ echo "Unsupported arch: $TERMUX_ARCH"
+ exit 1
+ fi
+
+ #LDFLAGS+=" -lstlport_static"
+
+ ./configure \
+ --prefix=$TERMUX_PREFIX \
+ --dest-cpu=$DEST_CPU \
+ --dest-os=android \
+ --shared-openssl --shared-zlib --shared-libuv \
+ --without-snapshot
+}
+
+termux_step_post_massage () {
+ test -d $TERMUX_PKG_CACHEDIR/gtest-include-dir &&
+ mv $TERMUX_PKG_CACHEDIR/gtest-include-dir $TERMUX_PREFIX/include/gtest
+ test -d $TERMUX_PKG_CACHEDIR/ares-includes &&
+ mv $TERMUX_PKG_CACHEDIR/ares-includes/* $TERMUX_PREFIX/include/
+ # Exit with success to avoid aborting script due to set -e:
+ true
+}
--- /dev/null
+etiago: Backported this from fornwall's patch.
+
+XXX: Revert https://github.com/nodejs/node/pull/3135 since it causes
+problems when trying to compile on Android with shared libuv, zlib
+and openssl due to v8 not using stlport correctly.
+
+diff -u -r ../node-v4.4.3/configure ./configure > configure.patch
+--- ../node-v4.4.3/configure 2016-04-12 19:42:04.000000000 +0000
++++ ./configure 2016-04-19 09:09:06.036762598 +0000
+@@ -760,15 +760,15 @@
+ if pkg_cflags:
+ output['include_dirs'] += (
+ filter(None, map(str.strip, pkg_cflags.split('-I'))))
+- elif options.__dict__[shared_lib + '_includes']:
+- output['include_dirs'] += [options.__dict__[shared_lib + '_includes']]
++ #elif options.__dict__[shared_lib + '_includes']:
++ # output['include_dirs'] += [options.__dict__[shared_lib + '_includes']]
+
+ # libpath needs to be provided ahead libraries
+ if pkg_libpath:
+- output['libraries'] += [pkg_libpath]
+- elif options.__dict__[shared_lib + '_libpath']:
+- output['libraries'] += [
+- '-L%s' % options.__dict__[shared_lib + '_libpath']]
++ output['libraries'] += filter(None, map(str.strip, pkg_cflags.split('-L')))
++ #elif options.__dict__[shared_lib + '_libpath']:
++ # output['libraries'] += [
++ # '-L%s' % options.__dict__[shared_lib + '_libpath']]
+
+ default_libs = getattr(options, shared_lib + '_libname')
+ default_libs = map('-l{0}'.format, default_libs.split(','))
--- /dev/null
+diff -u -r ../node-v4.4.3/deps/npm/lib/build.js ./deps/npm/lib/build.js > deps-npm-lib-build.js.patch
+--- ../node-v4.4.3/deps/npm/lib/build.js 2016-04-12 19:42:04.000000000 +0000
++++ ./deps/npm/lib/build.js 2016-04-19 09:24:57.262100886 +0000
+@@ -208,6 +208,8 @@
+
+ function linkBin (from, to, gently, cb) {
+ if (process.platform !== "win32") {
++ // Fix shebang paths in binary scripts:
++ require('child_process').spawn('termux-fix-shebang', [from])
+ return linkIfExists(from, to, gently, cb)
+ } else {
+ return cmdShimIfExists(from, to, cb)
--- /dev/null
+ diff -u -r ../node-v4.4
+.3/deps/npm/scripts/install.sh ./deps/npm/scripts/install.sh > deps-npm-scripts-install.sh.patch
+--- ../node-v4.4.3/deps/npm/scripts/install.sh 2016-04-12 19:42:06.000000000 +0000
++++ ./deps/npm/scripts/install.sh 2016-04-20 13:14:30.572016130 +0000
+@@ -69,7 +69,7 @@
+ # set the temp dir
+ TMP="${TMPDIR}"
+ if [ "x$TMP" = "x" ]; then
+- TMP="/tmp"
++ TMP="@TERMUX_PREFIX@/tmp"
+ fi
+ TMP="${TMP}/npm.$$"
+ rm -rf "$TMP" || true
--- /dev/null
+diff -u -r ../node-v4.4.3/lib/os.js ./lib/os.js > lib-os.js.patch
+--- ../node-v4.4.3/lib/os.js 2016-04-12 19:42:14.000000000 +0000
++++ ./lib/os.js 2016-04-19 09:27:26.330140690 +0000
+@@ -36,7 +36,7 @@
+ path = process.env.TMPDIR ||
+ process.env.TMP ||
+ process.env.TEMP ||
+- '/tmp';
++ '@TERMUX_PREFIX@/tmp';
+ if (path.length > 1 && path.endsWith('/'))
+ path = path.slice(0, -1);
+ }
--- /dev/null
+Termux is effectively a single-user system so chown:ing
+does not make much sense.
+
+Without this patch npm fails with EPERM on chown
+for cache.json when first building the local index.
+diff -u -r ../node-v4.4.3/deps/npm/lib/cache/update-index.js ./deps/npm/lib/cache/update-index.js > npm-avoid-chown.patch
+--- ../node-v4.4.3/deps/npm/lib/cache/update-index.js 2016-04-12 19:42:04.000000000 +0000
++++ ./deps/npm/lib/cache/update-index.js 2016-04-19 09:29:54.634171804 +0000
+@@ -4,7 +4,7 @@
+ var assert = require('assert')
+ var path = require('path')
+ var mkdir = require('mkdirp')
+-var chownr = require('chownr')
++var chownr = function(path, uid, gid, cb) { cb(null); }
+ var npm = require('../npm.js')
+ var log = require('npmlog')
+ var cacheFile = require('npm-cache-filename')
--- /dev/null
+diff -u -r ../node-v4.4.3/deps/npm/node_modules/osenv/node_modules/os-tmpdir/index.js ./deps/npm/node_modules/osenv/node_modules/os-tmpdir/index.js > npm-tmp-patch.patch
+--- ../node-v4.4.3/deps/npm/node_modules/osenv/node_modules/os-tmpdir/index.js 2016-04-12 19:42:05.000000000 +0000
++++ ./deps/npm/node_modules/osenv/node_modules/os-tmpdir/index.js 2016-04-19 09:33:06.883412631 +0000
+@@ -14,7 +14,7 @@
+ path = process.env.TMPDIR ||
+ process.env.TMP ||
+ process.env.TEMP ||
+- '/tmp';
++ '@TERMUX_PREFIX@/tmp';
+ }
+
+ if (trailingSlashRe.test(path)) {
--- /dev/null
+etiago: Backported this from fornwall's patch.
+
+Without this patch functions such as process.getgroups
+are not built on Android, which breaks things such as
+npm/node_modules/which/which.js.
+
+diff -u -r ../node-v4.4.3/src/node.cc ./src/node.cc > src-node.cc.patch
+--- ../node-v4.4.3/src/node.cc 2016-04-12 19:42:14.000000000 +0000
++++ ./src/node.cc 2016-04-19 07:42:50.984256666 +0000
+@@ -74,7 +74,7 @@
+ #include <unistd.h> // setuid, getuid
+ #endif
+
+-#if defined(__POSIX__) && !defined(__ANDROID__)
++#if defined(__POSIX__)
+ #include <pwd.h> // getpwnam()
+ #include <grp.h> // getgrnam()
+ #endif
+@@ -1718,7 +1718,7 @@
+ }
+
+
+-#if defined(__POSIX__) && !defined(__ANDROID__)
++#if defined(__POSIX__)
+
+ static const uid_t uid_not_found = static_cast<uid_t>(-1);
+ static const gid_t gid_not_found = static_cast<gid_t>(-1);
+@@ -2038,7 +2038,7 @@
+ }
+ }
+
+-#endif // __POSIX__ && !defined(__ANDROID__)
++#endif // __POSIX__
+
+
+ void Exit(const FunctionCallbackInfo<Value>& args) {
+@@ -3028,7 +3028,7 @@
+
+ env->SetMethod(process, "umask", Umask);
+
+-#if defined(__POSIX__) && !defined(__ANDROID__)
++#if defined(__POSIX__)
+ env->SetMethod(process, "getuid", GetUid);
+ env->SetMethod(process, "geteuid", GetEUid);
+ env->SetMethod(process, "setuid", SetUid);
+@@ -3042,7 +3042,7 @@
+ env->SetMethod(process, "getgroups", GetGroups);
+ env->SetMethod(process, "setgroups", SetGroups);
+ env->SetMethod(process, "initgroups", InitGroups);
+-#endif // __POSIX__ && !defined(__ANDROID__)
++#endif // __POSIX__
+
+ env->SetMethod(process, "_kill", Kill);
+