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"