Add in the mess from the original symbiosisware version.
[distorted-chroot] / mess / maint / install-cross-tools
1 #! /bin/sh -e
2
3 badp=nil
4 myarch=$(dpkg-architecture -qDEB_HOST_ARCH); unset myqarch
5 while getopts "a:q:" opt; do
6 case $opt in
7 a) myarch=$OPTARG ;;
8 q) myqarch=$OPTARG ;;
9 *) badp=t ;;
10 esac
11 done
12 shift $(( $OPTIND - 1 ))
13 case $# in 0) badp=t ;; esac
14 case $badp in
15 t)
16 cat >&2 <<EOF
17 usage: $0 [-a MYARCH] [-q MYQARCH] DIST-ARCH ...
18 EOF
19 exit 1
20 ;;
21 esac
22 case ${myqarch+t} in t) ;; *) myqarch=$myarch ;; esac
23 mymulti=$(dpkg-architecture -a$myarch -qDEB_HOST_MULTIARCH)
24
25 for arg in "$@"; do
26 d=${arg%-*} a=${arg#*-}
27
28 if ! [ -d /usr/local.schroot/cross/$d-$myarch ]; then
29 echo 2>&1 "$0: no tree for \`$d-$myarch'"; exit 1
30 fi
31
32 gnuarch=$(dpkg-architecture -A$a -qDEB_TARGET_GNU_TYPE)
33
34 case $a in
35 armel | armhf) qarch=arm ;;
36 arm64) qarch=aarch64 ;;
37 amd64) qarch=x86_64 ;;
38 i386) qarch=i386 ;;
39 *) echo >&2 "$0: no qemu arch for $a"; exit 1 ;;
40 esac
41
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
46
47 schroot -uroot -rc$sess -- sh -ec '
48 if ! mountpoint -q /mnt; then
49 mount -ttmpfs -omode=700,uid=0,gid=0 private /mnt
50 fi'
51
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 \)
61 } | while read t; do
62 case $t in
63 $qemudir/*)
64 s=/usr/bin/${t#$qemudir/} ;;
65 $crossdir/TOOLCHAIN/$gnuarch/*)
66 s=/usr/bin/${t#$crossdir/TOOLCHAIN/$gnuarch/} ;;
67 *)
68 s=${t#$crossdir} ;;
69 esac
70 if [ -L $t ]; then t=$(readlink $t); fi
71 if [ -d $t ]; then act=LINK; else act=DIVERT; fi
72 echo $act $s $t
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
78
79 schroot -uroot -rc$sess -- sh -ec '
80 dpkg-divert --list |
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"
84 while read s _; do
85 if ! [ -L "$s" ]; then continue; fi
86 t=$(readlink $s)
87 case $t in /usr/local.schroot/cross/*) continue ;; esac
88 echo "$s $t"
89 done </mnt/LINK.want
90 } | sort >/mnt/LINK.have'
91
92 schroot -uroot -rc$sess -- sh -ec '
93 a=$1
94
95 if dpkg-divert >/dev/null 2>&1 --no-rename --help
96 then no_rename=--no-rename
97 else no_rename=
98 fi
99
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"
103 done' - $a
104
105 while read i; do
106 if [ -e $root$i ] && ! [ -e $root$i.$a ]; then
107 if [ -L $root$i ]; then
108 t=$(readlink $root$i)
109 case $t in
110 $crossdir/* | qemudir/* | /usr/local.schroot/qemu/*) continue ;;
111 esac
112 if [ -L $crossdir$i ]; then
113 u=$(readlink $crossdir$i)
114 case $t in "$u") continue ;; esac
115 fi
116 fi
117 echo >&2 "$0: preserve old $i"
118 ln $root$i $root$i.$a
119 fi
120 done <$root/mnt/DIVERT.want
121
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
125 case $t1 in
126 "$t0")
127 continue
128 ;;
129 -)
130 echo >&2 "$0: remove obsolete link $s -> $t0"
131 rm -f $root$s
132 ;;
133 *)
134 case $s in */*) mkdir -p $root${s%/*} ;; esac
135 rm -f $root$s.new
136 ln -s $t1 $root$s.new
137 echo >&2 "$0: link $s -> $t1"
138 mv -T $root$s.new $root$s
139 ;;
140 esac
141 done
142
143 schroot -uroot -rc$sess -- sh -ec '
144 a=$1
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"
148 done' - $a
149
150 schroot -ec$sess
151 done