]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - debian/scripts/misc/getabis
UBUNTU: [Packaging] initial packaging import from linux-unstable-5.12
[mirror_ubuntu-jammy-kernel.git] / debian / scripts / misc / getabis
CommitLineData
29f98055
LO
1#!/bin/bash
2
3export LC_ALL=C.UTF-8
4
5if [ "$#" = "1" ]; then
6 set - $(echo "$1" | sed -e 's/-/ /')
7fi
8if [ "$#" != "2" ]; then
9 echo "Usage: $0 <version>" 1>&2
10 echo "Usage: $0 <release> <revision>" 1>&2
11 exit 1
12fi
13
14if [ "$DEBIAN" = "" ]; then
15 . debian/debian.env
16fi
17
18ver=$1
19revision=$2
20abi=$(echo $revision | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$/\1/')
21
22verabi=$ver-$abi
23verfull=$ver-$revision
24
25WGET="wget --tries=1 --timeout=10 --quiet -c"
26
27abidir="`pwd`/$DEBIAN/abi/$verfull"
28tmpdir="`pwd`/abi-tmp-$verfull"
29origdir="`pwd`"
30fwinfo=$abidir/fwinfo
31
32test -d $tmpdir || mkdir $tmpdir
33
34package_prefixes() {
35 : # no longer used ...
36}
37
38getall() {
39 arch=$1
40 shift
41
42 mkdir -p $abidir/$arch
43
44 for sub in $@; do
45 if [ -f $abidir/$arch/$sub ]; then
46 echo "Existing $sub($arch)..."
47 continue
48 fi
49 echo "Fetching $sub($arch)..."
50 getall_set "linux-buildinfo" "$arch" "$sub" || \
51 getall_set "linux-image-unsigned linux-modules linux-modules-extra" "$arch" "$sub" || \
52 getall_set "linux-image-unsigned linux-modules" "$arch" "$sub" || \
53 getall_set "linux-image linux-modules linux-modules-extra" "$arch" "$sub" || \
54 getall_set "linux-image linux-modules" "$arch" "$sub" || \
55 getall_set "linux-image linux-image-extra" "$arch" "$sub" || \
56 getall_set "linux-image" "$arch" "$sub" || \
57 { echo "FAILED"; exit 1; }
58 done
59}
60getall_set()
61{
62 prefixes="$1"
63 arch="$2"
64 sub="$3"
65 (
66 echo -n " set:"
67 filenames=""
68 cd $tmpdir
69 found=1
70 for prefix in $prefixes
71 do
72 echo -n " $prefix="
73 if [ "$found" = 0 ]; then
74 echo -n "-"
75 continue
76 fi
77 filename=${prefix}-${verabi}-${sub}_${verfull}_${arch}.deb
78 for r in "${repo_list[@]}"
79 do
80 if ! [ -f $filename ]; then
81 $WGET $r/$filename
82 rc="$?"
83 # If this was not successful or a valid error
84 # return from the server all bets are off, bail.
85 [ "$rc" != 0 -a "$rc" != 8 ] && return 2
86 fi
87 if [ -f $filename ]; then
88 echo -n "y"
89 filenames="$filenames $filename"
90 break
91 fi
92 done
93 if [ ! -f "$filename" ]; then
94 echo -n "n"
95 found=0
96 fi
97 done
98 echo ""
99 if [ "$found" = 0 ]; then
100 return 1
101 fi
102 echo " extracting..."
103 for filename in $filenames
104 do
105 dpkg-deb --extract $filename tmp
106 done
107 # FORM 1: linux-image et al extracted here.
108 if [ -d tmp/boot ]; then
109 echo " images..."
110 find tmp -name "*.ko" | while read f; do
111 modinfo $f | grep ^firmware >> $fwinfo
112 done
113 if [ -f tmp/boot/abi-* ]; then
114 mv tmp/boot/abi-* $abidir/$arch/$sub
115 else
116 echo " NO ABI FILE"
117 fi
118 if [ -f tmp/boot/retpoline-* ]; then
119 mv tmp/boot/retpoline-* $abidir/$arch/$sub.retpoline
120 else
121 echo " NO RETPOLINE FILE"
122 fi
123 (cd tmp; find lib/modules/$verabi-$sub/kernel -name '*.ko') | \
124 sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > \
125 $abidir/$arch/$sub.modules
126 (
127 cd tmp;
128 # Prevent exposing some errors when called by python scripts. SIGPIPE seems to get
129 # exposed when using the `find ...` form of the command.
130 ko=$(find lib/modules/$verabi-$sub/kernel \
131 -name '*.ko' | head -1)
132 readelf -p .comment "$ko" | gawk '
133 ($1 == "[") {
134 printf("%s", $3);
135 for (n=4; n<=NF; n++) {
136 printf(" %s", $n);
137 }
138 print ""
139 }' | sort -u >$abidir/$arch/$sub.compiler
140 version=`cat $abidir/$arch/$sub.compiler`
141 echo " $version"
142 )
143 # FORM 2: moduleinfo packages
144 # cranky fix -- modinfo supported
145 else
146 echo " buildinfo..."
147 base="tmp/usr/lib/linux/${verabi}-${sub}"
148 mv "$base/abi" "$abidir/$arch/$sub"
149 for comp in 'modules' 'retpoline' 'compiler'
150 do
151 mv "$base/$comp" "$abidir/$arch/$sub.$comp"
152 done
153 cat "$base/fwinfo" >>"$fwinfo"
154 fi
155 rm -rf tmp $filenames
156 echo " done"
157 )
158 rc="$?"
159 if [ "$rc" = 2 ]; then
160 echo "ERROR: downloads are reporting network failures" 1>&2
161 exit 1
162 fi
163 return "$rc"
164}
165
166# MAIN
167
168# Setup abi directory
169mkdir -p $abidir
170echo $abi > $abidir/abiname
2392988e 171echo $verfull > $abidir/version
29f98055
LO
172
173# NOTE: The flavours are hardcoded, because they may have changed from the
174# current build.
175
176. $DEBIAN/etc/getabis
177
178# Extract compiler source package version from e.g.:
179# GCC: (Ubuntu/Linaro 4.8.2-19ubuntu1) 4.8.2
180compilers=`sed 's/^.*(.* \(.*\)).*$/\1/' $abidir/*/*.compiler | sort -u | wc -l`
181if [ "$compilers" != 1 ]; then
182 echo "WARNING: inconsistent compiler versions detected:" 1>&2
183 sort -u $abidir/*/*.compiler | sed 's/^/WARNING: /' 1>&2
184fi
185
186sort < $fwinfo | uniq > fwinfo.tmp
187mv fwinfo.tmp $fwinfo
188
189rmdir $tmpdir
190
2392988e
AR
191# Replace the previous ABI directory with the new one
192abiprevdir="$(pwd)/$DEBIAN/abi/previous"
193rm -rf "$abiprevdir"
194mv "$abidir" "$abiprevdir"
195
196# If this is running in a git repo, add the current ABI directory and remove any old ones
29f98055 197if [ -d ".git" ]; then
2392988e
AR
198 git add "$abiprevdir"
199 find "$DEBIAN"/abi/* -maxdepth 0 -type d | grep -v '/previous$' | while read f; do git rm -rf "$f"; done
29f98055 200fi