Modify setup in wrappers for /system/bin/ commands
authorFredrik Fornwall <fredrik@fornwall.net>
Mon, 11 Apr 2016 00:20:17 +0000 (20:20 -0400)
committerFredrik Fornwall <fredrik@fornwall.net>
Mon, 11 Apr 2016 00:20:17 +0000 (20:20 -0400)
On several devices several tools in /system/bin/ requires
LD_LIBRARY_PATH to contain /system/lib(64). Check for the bit-ness
with `getprop ro.product.cpu.abilist64`  and setup the environment
accordingly.

Closes #193.
Closes #206.

packages/jack/build.sh
packages/jack/jack.sh
packages/termux-api/build.sh
packages/termux-api/termux-api.c
packages/termux-tools/build.sh
packages/termux-tools/termux-reload-settings
packages/termux-tools/termux-setup-storage

index deb758a..35584fd 100755 (executable)
@@ -4,7 +4,7 @@
 TERMUX_PKG_HOMEPAGE=http://tools.android.com/tech-docs/jackandjill
 TERMUX_PKG_DESCRIPTION="Java Android Compiler Kit"
 TERMUX_PKG_VERSION="1.1-mr2"
-TERMUX_PKG_BUILD_REVISION=2
+TERMUX_PKG_BUILD_REVISION=3
 TERMUX_PKG_PLATFORM_INDEPENDENT=true
 
 termux_step_make () {
index c439255..db43657 100755 (executable)
@@ -4,20 +4,11 @@
 export ANDROID_DATA=@TERMUX_PREFIX@/var/android/
 mkdir -p $ANDROID_DATA/dalvik-cache
 
-# Find the right lib folder for dalvikvm. We cannot take LD_LIBRARY_PATH
-# as is since it contains Termux-supplied libraries which may clash with
-# system ones.
-LIBFOLDER=/system/lib
-if test -d /system/lib64; then
-       LIBFOLDER=/system/lib64
-fi
-
-LD_LIBRARY_PATH=$LIBFOLDER \
-               exec dalvikvm -Xmx256m \
-               -Djava.io.tmpdir=@TERMUX_PREFIX@/tmp \
-               -cp @TERMUX_PREFIX@/share/dex/jack.jar com.android.jack.Main \
-               -cp @TERMUX_PREFIX@/share/jack/android.jack \
-               -D jack.library.digest.algo=MD5 -D sched.vfs.case-insensitive.algo=MD5 \
-               -D jack.annotation-processor=off \
-               --output-dex=`pwd` \
-               $@
+exec dalvikvm -Xmx256m \
+-Djava.io.tmpdir=@TERMUX_PREFIX@/tmp \
+-cp @TERMUX_PREFIX@/share/dex/jack.jar com.android.jack.Main \
+-cp @TERMUX_PREFIX@/share/jack/android.jack \
+-D jack.library.digest.algo=MD5 -D sched.vfs.case-insensitive.algo=MD5 \
+-D jack.annotation-processor=off \
+--output-dex=`pwd` \
+$@
index 287423d..73060d0 100644 (file)
@@ -1,6 +1,6 @@
 TERMUX_PKG_HOMEPAGE=http://termux.com/add-ons/api/
 TERMUX_PKG_DESCRIPTION="Termux API commands"
-TERMUX_PKG_VERSION=0.13
+TERMUX_PKG_VERSION=0.14
 
 termux_step_make_install () {
         mkdir -p $TERMUX_PREFIX/bin
index f1eaa71..ca51755 100644 (file)
@@ -32,12 +32,6 @@ void exec_am_broadcast(int argc, char** argv, char* input_address_string, char*
         // Close stdin:
         close(STDIN_FILENO);
 
-        char const* const file = "/system/bin/am";
-        // Avoid the system am binary from linking to wrong libraries:
-        unsetenv("LD_LIBRARY_PATH");
-       // Ensure /system/bin/app_process is in path, which is needed by am in some systems:
-       putenv("PATH=/system/bin");
-
        // The user is calculated from the uid in android.os.UserHandle#getUserId(int uid) as "uid / 100000", so we do the same:
        uid_t current_uid = getuid();
        int android_user_id = current_uid / 100000;
@@ -73,7 +67,10 @@ void exec_am_broadcast(int argc, char** argv, char* input_address_string, char*
         // End with NULL:
         child_argv[argc + extra_args] = NULL;
 
-        execv(file, child_argv);
+       // Use an a executable taking care of PATH and LD_LIBRARY_PATH:
+        char const* const am_executable = "/data/data/com.termux/files/usr/bin/am";
+        execv(am_executable, child_argv);
+
         perror("execv(\"/system/bin/am\")");
        exit(1);
 }
index a171bf8..a44d77c 100644 (file)
@@ -1,21 +1,27 @@
 TERMUX_PKG_HOMEPAGE=http://termux.com/
 TERMUX_PKG_DESCRIPTION="Some tools for Termux"
-TERMUX_PKG_VERSION=0.24
+TERMUX_PKG_VERSION=0.25
 
 termux_step_make_install () {
        $CXX $CFLAGS $LDFLAGS -std=c++14 -Wall -Wextra -pedantic -Werror $TERMUX_PKG_BUILDER_DIR/*.cpp -o $TERMUX_PREFIX/bin/termux-elf-cleaner
 
        # Remove LD_LIBRARY_PATH from environment to avoid conflicting
        # with system libraries that am may link against.
-       for tool in am dalvikvm df getprop logcat ping ping6 ip pm; do
+       for tool in am dalvikvm df getprop logcat ping ping6 ip pm settings; do
                WRAPPER_FILE=$TERMUX_PREFIX/bin/$tool
                echo '#!/bin/sh' > $WRAPPER_FILE
-               if [ $tool = am -o $tool = pm ]; then
-                       # These tools require having /system/bin/app_process in the PATH,
-                       # at least on a Nexus 6p running Android 6.0.
-                       echo -n 'PATH=$PATH:/system/bin ' >> $WRAPPER_FILE
+
+               # Some of these tools (am,dalvikvm,?) requires LD_LIBRARY_PATH setup on at least some devices:
+               if [ $tool != getprop ]; then
+                       echo 'if [ -n "`getprop ro.product.cpu.abilist64`" ]; then BITS=64; else BITS=; fi' >> $WRAPPER_FILE
+                       echo -n 'LD_LIBRARY_PATH=/system/lib$BITS ' >> $WRAPPER_FILE
                fi
-               echo "LD_LIBRARY_PATH= exec /system/bin/$tool \$@" >> $WRAPPER_FILE
+
+               # Some tools require having /system/bin/app_process in the PATH,
+               # at least am&pm on a Nexus 6p running Android 6.0:
+               echo -n 'PATH=$PATH:/system/bin ' >> $WRAPPER_FILE
+
+               echo "exec /system/bin/$tool \$@" >> $WRAPPER_FILE
                chmod +x $TERMUX_PREFIX/bin/$tool
        done
 
index 2fbe68d..0f8e606 100755 (executable)
@@ -9,4 +9,4 @@ if [ "$#" != "0" ]; then
         exit
 fi
 
-LD_LIBRARY_PATH= am broadcast --user 0 -a com.termux.app.reload_style com.termux > /dev/null
+am broadcast --user 0 -a com.termux.app.reload_style com.termux > /dev/null
index f2cf483..eec7f77 100755 (executable)
@@ -7,6 +7,6 @@ if [ "$#" != "0" ]; then
         exit
 fi
 
-LD_LIBRARY_PATH= am broadcast --user 0 \
+am broadcast --user 0 \
                 --es com.termux.app.reload_style storage \
                 -a com.termux.app.reload_style com.termux > /dev/null