# set -x
# Install the perl and its libraries anywhere:
-userelocatableinc='define'
+case "$userelocatableinc" in
+'') userelocatableinc='define' ;;
+esac
# The Android linker has some unusual behavior: No matter what
# path is passed in to dlopen(), it'll only use the path's
# On Android the shell is /system/bin/sh:
targetsh='/system/bin/sh'
+case "$usecrosscompile" in
+define) ;;
+ # If we aren't cross-compiling, then sh should also point
+ # to /system/bin/sh.
+*) sh=$targetsh ;;
+esac
+
+# Make sure that we look for libm
+libswanted="$libswanted m"
# Down with locales!
# https://github.com/android/platform_bionic/blob/master/libc/CAVEATS
d_locconv='undef'
d_setlocale='undef'
d_setlocale_r='undef'
+d_lc_monetary_2008='undef'
i_locale='undef'
# https://code.google.com/p/android-source-browsing/source/browse/libc/netbsd/net/getservent_r.c?repo=platform--bionic&r=ca6fe7bebe3cc6ed7e2db5a3ede2de0fcddf411d#95
# getusershell setusershell endusershell
# This script UU/archname.cbu will get 'called-back' by Configure.
-cat > UU/archname.cbu <<'EOCBU'
+$cat > UU/archname.cbu <<'EOCBU'
# egrep pattern to detect a stub warning on Android.
# Right now we're checking for:
# Android 2.x: FIX ME! implement FUNC
# Android 4.x: FUNC is not implemented on Android
android_stub='FIX|Android'
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <netdb.h>
int main() { (void) getnetbyname("foo"); return(0); }
EOM
d_getnbyname="$undef"
fi
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <netdb.h>
int main() { (void) getnetbyaddr((uint32_t)1, AF_INET); return(0); }
EOM
d_getnbyaddr="$undef"
fi
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <stdio.h>
#include <mntent.h>
#include <unistd.h>
d_getmntent="$undef"
fi
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <netdb.h>
int main() { (void) getprotobyname("foo"); return(0); }
EOM
d_getpbyname="$undef"
fi
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <netdb.h>
int main() { (void) getprotobynumber(1); return(0); }
EOM
d_getpbynumber="$undef"
fi
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <sys/types.h>
#include <pwd.h>
int main() { endpwent(); return(0); }
d_endpwent="$undef"
fi
-cat > try.c << 'EOM'
+$cat > try.c << 'EOM'
#include <unistd.h>
int main() { (void) ttyname(STDIN_FILENO); return(0); }
EOM
EOCBU
+if $test "X$targetrun" = "Xadb"; then
+
+$rm $run $to $from $targetmkdir
+
case "$src" in
/*) run=$src/Cross/run
targetmkdir=$src/Cross/mkdir
from=$pwd/Cross/from
;;
esac
-
+
targetrun=adb-shell
targetto=adb-push
targetfrom=adb-pull
to=$to-$targetto
from=$from-$targetfrom
-cat >$run <<EOF
+$cat >$run <<EOF
#!/bin/sh
doexit="echo \\\$? >$targetdir/output.status"
env=''
# sometimes there is no $?, I dunno why? we then get Cross/run-adb-shell: line 39: exit: XX: numeric argument required
adb -s $targethost shell "sh -c '(cd \$cwd && \$env ; \$exe \$args > $targetdir/output.stdout 2>$targetdir/output.stderr) ; \$doexit '" > /dev/null
+rm output.stdout output.stderr output.status 2>/dev/null
+
$from output.stdout
$from output.stderr
$from output.status
-result=\`cat output.stdout\`
-result_err=\`cat output.stderr\`
-result_status=\`cat output.status\`
-rm output.stdout output.stderr output.status
-
# We get back Ok\r\n on android for some reason, grrr:
-result=\`echo "\$result" | sed -e 's|\r||g'\`
-result_err=\`echo "\$result_err" | sed -e 's|\r||g'\`
-result_status=\`echo \$result_status | sed -e 's|\r||g'\`
-
-echo "\$result"
-if test "X\$result_err" != X; then
- echo "\$result_err" >&2
+$cat output.stdout | $tr -d '\r'
+if test -s output.stderr; then
+ $cat output.stderr | $tr -d '\r' >&2
fi
+result_status=\`$cat output.status | $tr -d '\r'\`
+
+rm output.stdout output.stderr output.status
+
# Also, adb doesn't exit with the commands exit code, like ssh does, double-grr
exit \$result_status
EOF
-chmod a+rx $run
+$chmod a+rx $run
-cat >$targetmkdir <<EOF
+$cat >$targetmkdir <<EOF
#!/bin/sh
adb -s $targethost shell "mkdir -p \$@"
EOF
-chmod a+rx $targetmkdir
+$chmod a+rx $targetmkdir
-cat >$to <<EOF
+$cat >$to <<EOF
#!/bin/sh
for f in \$@
do
case "\$f" in
/*)
- $targetmkdir \`dirname \$f\`
adb -s $targethost push \$f \$f || exit 1
;;
*)
- $targetmkdir $targetdir/\`dirname \$f\`
(adb -s $targethost push \$f $targetdir/\$f < /dev/null 2>&1) || exit 1
;;
esac
done
exit 0
EOF
-chmod a+rx $to
+$chmod a+rx $to
-cat >$from <<EOF
+$cat >$from <<EOF
#!/bin/sh
for f in \$@
do
done
exit 0
EOF
-chmod a+rx $from
+$chmod a+rx $from
+
+fi # Cross-compiling with adb
+
+case "$usecrosscompile" in
+define)
+# The tests for this in Configure doesn't play nicely with
+# cross-compiling
+d_procselfexe="define"
+if $test "X$hostosname" = "Xdarwin"; then
+ firstmakefile=GNUmakefile;
+fi
+
+# When cross-compiling, full_csh and d_csh will get the
+# host's values, which is all sorts of wrong. So unless
+# full_csh has been set on the command line, set d_csh to
+# undef.
+case "$full_csh" in
+'') d_csh="$undef"
+;;
+esac
+
+;;
+*)
+ldflags="$ldflags -L/system/lib"
+;;
+esac
+
+osvers="`$run getprop ro.build.version.release`"
+
+# We want osname to be linux-android during Configure,
+# but plain 'android' afterwards.
+case "$src" in
+ /*) pwd="$src";;
+ *) pwd=`test -f ../Configure && cd ..; pwd`
+ ;;
+esac
+
+$cat <<'EOO' >> $pwd/config.arch
+
+osname='android'
+eval "libpth='$libpth /system/lib /vendor/lib'"
+
+if $test "X$procselfexe" = X; then
+ case "$d_procselfexe" in
+ define) procselfexe='"/proc/self/exe"';;
+ esac
+fi
+EOO
+# Android is a linux variant, so run those hints.
+. ./hints/linux.sh