OSDN Git Service

Merge remote-tracking branch 'toybox/master' into HEAD am: fe3d63b269 am: 21b59f15b6
[android-x86/external-toybox.git] / scripts / install.sh
index 961341e..898bfad 100755 (executable)
@@ -23,11 +23,15 @@ do
   # Use {,usr}/{bin,sbin} paths instead of all files in one directory?
   [ "$1" == "--long" ] && LONG_PATH="bin/"
 
+  # Symlink host toolchain binaries to destination to create cross compile $PATH
+  [ "$1" == "--airlock" ] && AIRLOCK=1
+
   shift
 done
 
 echo "Compile instlist..."
 
+NOBUILD=1 scripts/make.sh
 $DEBUG $HOSTCC -I . scripts/install.c -o generated/instlist || exit 1
 COMMANDS="$(generated/instlist $LONG_PATH)"
 
@@ -88,4 +92,61 @@ do
   fi
 done
 
+[ -z "$AIRLOCK" ] && exit 0
+
+# --airlock creates a single directory you can point the $PATH to for cross
+# compiling, which contains just toybox and symlinks to toolchain binaries.
+
+# This not only means you're building with a known set of tools (insulated from
+# variations in the host distro), but that everything else is NOT in your PATH
+# and thus various configure stages won't find things on thie host that won't
+# be there on the target (such as the distcc build noticing the host has
+# python and deciding to #include Python.h).
+
+# The following are commands toybox should provide, but doesn't yet.
+# For now symlink the host version. This list must go away by 1.0.
+
+PENDING="bunzip2 bzcat dd diff expr ftpd ftpget ftpput gunzip less ping route tar test tr vi wget zcat awk bzip2 fdisk gzip sh sha512sum unxz xzcat bc"
+
+# "gcc" should go away for llvm, but some things still hardwire it
+TOOLCHAIN="ar as nm cc make ld gcc objdump"
+
+if [ ! -z "$AIRLOCK" ]
+then
+
+  # Tools needed to build packages
+  for i in $TOOLCHAIN $PENDING $HOST_EXTRA
+  do
+    if [ ! -f "$i" ]
+  then
+    # Loop through each instance, populating fallback directories (used by
+    # things like distcc, which require multiple instances of the same binary
+    # in a known order in the $PATH).
+
+    X=0
+    FALLBACK="$PREFIX"
+    which -a "$i" | while read j
+    do
+      if [ ! -e "$FALLBACK/$i" ]
+      then
+        mkdir -p "$FALLBACK" &&
+        ln -sf "$j" "$FALLBACK/$i" || exit 1
+      fi
+
+      X=$[$X+1]
+      FALLBACK="$PREFIX/fallback-$X"
+    done
+
+    if [ ! -f "$PREFIX/$i" ]
+    then
+      echo "Toolchain component missing: $i" >&2
+      [ -z "$PEDANTIC" ] || EXIT=1
+    fi
+  fi
+done
+
+
+
+fi
+
 exit $EXIT