#! /bin/sh -e badp=nil myarch=$(dpkg-architecture -qDEB_HOST_ARCH); unset myqarch while getopts "a:q:" opt; do case $opt in a) myarch=$OPTARG ;; q) myqarch=$OPTARG ;; *) badp=t ;; esac done shift $(( $OPTIND - 1 )) case $# in 0) badp=t ;; esac case $badp in t) cat >&2 <&1 "$0: no tree for \`$d-$myarch'"; exit 1 fi gnuarch=$(dpkg-architecture -A$a -qDEB_TARGET_GNU_TYPE) case $a in armel | armhf) qarch=arm ;; arm64) qarch=aarch64 ;; amd64) qarch=x86_64 ;; i386) qarch=i386 ;; *) echo >&2 "$0: no qemu arch for $a"; exit 1 ;; esac sess=$(schroot -bcsource:$d-$a) root=/schroot/$sess/fs qemudir=/usr/local.schroot/cross/$d-$myqarch/QEMU crossdir=/usr/local.schroot/cross/$d-$myarch schroot -uroot -rc$sess -- sh -ec ' if ! mountpoint -q /mnt; then mount -ttmpfs -omode=700,uid=0,gid=0 private /mnt fi' { echo $qemudir/qemu-$qarch-static echo $crossdir/lib/$mymulti echo $crossdir/usr/lib/$mymulti echo $crossdir/usr/lib/gcc-cross find $crossdir $crossdir/TOOLCHAIN/$gnuarch \ \( \( -path "*/QEMU" -o -path "*/TOOLCHAIN" -o \ -path "*/lib/$mymulti" -o \ -path "*/lib/gcc-cross" \) -prune \) -o \ \( ! -type d -print \) } | while read t; do case $t in $qemudir/*) s=/usr/bin/${t#$qemudir/} ;; $crossdir/TOOLCHAIN/$gnuarch/*) s=/usr/bin/${t#$crossdir/TOOLCHAIN/$gnuarch/} ;; *) s=${t#$crossdir} ;; esac if [ -L $t ]; then t=$(readlink $t); fi if [ -d $t ]; then act=LINK; else act=DIVERT; fi echo $act $s $t done >$root/mnt/ALL.want sed -n '/^DIVERT \(.*\) .*$/s//\1/p' $root/mnt/ALL.want | \ sort >$root/mnt/DIVERT.want sed -n '/^\(DIVERT\|LINK\) /s///p' $root/mnt/ALL.want | \ sort >$root/mnt/LINK.want schroot -uroot -rc$sess -- sh -ec ' dpkg-divert --list | sed -n "/^diversion of \(.*\) to .* by install-cross-tools\$/s//\1/p" | \ sort >/mnt/DIVERT.have { find / -xdev -lname "/usr/local.schroot/cross/*" -printf "%p %l\n" while read s _; do if ! [ -L "$s" ]; then continue; fi t=$(readlink $s) case $t in /usr/local.schroot/cross/*) continue ;; esac echo "$s $t" done /mnt/LINK.have' schroot -uroot -rc$sess -- sh -ec ' a=$1 if dpkg-divert >/dev/null 2>&1 --no-rename --help then no_rename=--no-rename else no_rename= fi comm -13 /mnt/DIVERT.have /mnt/DIVERT.want | while read i; do dpkg-divert --package "install-cross-tools" $no_rename \ --divert "$i.$a" --add "$i" done' - $a while read i; do if [ -e $root$i ] && ! [ -e $root$i.$a ]; then if [ -L $root$i ]; then t=$(readlink $root$i) case $t in $crossdir/* | qemudir/* | /usr/local.schroot/qemu/*) continue ;; esac if [ -L $crossdir$i ]; then u=$(readlink $crossdir$i) case $t in "$u") continue ;; esac fi fi echo >&2 "$0: preserve old $i" ln $root$i $root$i.$a fi done <$root/mnt/DIVERT.want join -j1 -a1 -a2 -e- -o"0 1.2 2.2" \ $root/mnt/LINK.have $root/mnt/LINK.want | while read s t0 t1; do case $t1 in "$t0") continue ;; -) echo >&2 "$0: remove obsolete link $s -> $t0" rm -f $root$s ;; *) case $s in */*) mkdir -p $root${s%/*} ;; esac rm -f $root$s.new ln -s $t1 $root$s.new echo >&2 "$0: link $s -> $t1" mv -T $root$s.new $root$s ;; esac done schroot -uroot -rc$sess -- sh -ec ' a=$1 comm -23 /mnt/DIVERT.have /mnt/DIVERT.want | while read i; do dpkg-divert --package "install-cross-tools" --rename \ --divert "$i.$a" --remove "$i" done' - $a schroot -ec$sess done