4 myarch=$(dpkg-architecture -qDEB_HOST_ARCH); unset myqarch
5 while getopts "a:q:" opt; do
12 shift $(( $OPTIND - 1 ))
13 case $# in 0) badp=t ;; esac
17 usage: $0 [-a MYARCH] [-q MYQARCH] DIST-ARCH ...
22 case ${myqarch+t} in t) ;; *) myqarch=$myarch ;; esac
23 mymulti=$(dpkg-architecture -a$myarch -qDEB_HOST_MULTIARCH)
26 d=${arg%-*} a=${arg#*-}
28 if ! [ -d /usr/local.schroot/cross/$d-$myarch ]; then
29 echo 2>&1 "$0: no tree for \`$d-$myarch'"; exit 1
32 gnuarch=$(dpkg-architecture -A$a -qDEB_TARGET_GNU_TYPE)
35 armel | armhf) qarch=arm ;;
36 arm64) qarch=aarch64 ;;
37 amd64) qarch=x86_64 ;;
39 *) echo >&2 "$0: no qemu arch for $a"; exit 1 ;;
42 sess=$(schroot -bcsource:$d-$a)
43 root=/schroot/$sess/fs
44 qemudir=/usr/local.schroot/cross/$d-$myqarch/QEMU
45 crossdir=/usr/local.schroot/cross/$d-$myarch
47 schroot -uroot -rc$sess -- sh -ec '
48 if ! mountpoint -q /mnt; then
49 mount -ttmpfs -omode=700,uid=0,gid=0 private /mnt
52 { echo $qemudir/qemu-$qarch-static
53 echo $crossdir/lib/$mymulti
54 echo $crossdir/usr/lib/$mymulti
55 echo $crossdir/usr/lib/gcc-cross
56 find $crossdir $crossdir/TOOLCHAIN/$gnuarch \
57 \( \( -path "*/QEMU" -o -path "*/TOOLCHAIN" -o \
58 -path "*/lib/$mymulti" -o \
59 -path "*/lib/gcc-cross" \) -prune \) -o \
60 \( ! -type d -print \)
64 s=/usr/bin/${t#$qemudir/} ;;
65 $crossdir/TOOLCHAIN/$gnuarch/*)
66 s=/usr/bin/${t#$crossdir/TOOLCHAIN/$gnuarch/} ;;
70 if [ -L $t ]; then t=$(readlink $t); fi
71 if [ -d $t ]; then act=LINK; else act=DIVERT; fi
73 done >$root/mnt/ALL.want
74 sed -n '/^DIVERT \(.*\) .*$/s//\1/p' $root/mnt/ALL.want | \
75 sort >$root/mnt/DIVERT.want
76 sed -n '/^\(DIVERT\|LINK\) /s///p' $root/mnt/ALL.want | \
77 sort >$root/mnt/LINK.want
79 schroot -uroot -rc$sess -- sh -ec '
81 sed -n "/^diversion of \(.*\) to .* by install-cross-tools\$/s//\1/p" | \
82 sort >/mnt/DIVERT.have
83 { find / -xdev -lname "/usr/local.schroot/cross/*" -printf "%p %l\n"
85 if ! [ -L "$s" ]; then continue; fi
87 case $t in /usr/local.schroot/cross/*) continue ;; esac
90 } | sort >/mnt/LINK.have'
92 schroot -uroot -rc$sess -- sh -ec '
95 if dpkg-divert >/dev/null 2>&1 --no-rename --help
96 then no_rename=--no-rename
100 comm -13 /mnt/DIVERT.have /mnt/DIVERT.want | while read i; do
101 dpkg-divert --package "install-cross-tools" $no_rename \
102 --divert "$i.$a" --add "$i"
106 if [ -e $root$i ] && ! [ -e $root$i.$a ]; then
107 if [ -L $root$i ]; then
108 t=$(readlink $root$i)
110 $crossdir/* | qemudir/* | /usr/local.schroot/qemu/*) continue ;;
112 if [ -L $crossdir$i ]; then
113 u=$(readlink $crossdir$i)
114 case $t in "$u") continue ;; esac
117 echo >&2 "$0: preserve old $i"
118 ln $root$i $root$i.$a
120 done <$root/mnt/DIVERT.want
122 join -j1 -a1 -a2 -e- -o"0 1.2 2.2" \
123 $root/mnt/LINK.have $root/mnt/LINK.want |
124 while read s t0 t1; do
130 echo >&2 "$0: remove obsolete link $s -> $t0"
134 case $s in */*) mkdir -p $root${s%/*} ;; esac
136 ln -s $t1 $root$s.new
137 echo >&2 "$0: link $s -> $t1"
138 mv -T $root$s.new $root$s
143 schroot -uroot -rc$sess -- sh -ec '
145 comm -23 /mnt/DIVERT.have /mnt/DIVERT.want | while read i; do
146 dpkg-divert --package "install-cross-tools" --rename \
147 --divert "$i.$a" --remove "$i"