]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - debian/scripts/misc/getabis
UBUNTU: Ubuntu-4.14.0-11.13
[mirror_ubuntu-bionic-kernel.git] / debian / scripts / misc / getabis
1 #!/bin/bash
2
3 export LC_ALL=C.UTF-8
4
5 if [ "$#" != "2" ]; then
6 echo "Usage: $0 <release> <revision>" 1>&2
7 exit 1
8 fi
9
10 if [ "$DEBIAN" = "" ]; then
11 . debian/debian.env
12 fi
13
14 ver=$1
15 revision=$2
16 abi=$(echo $revision | sed -r -e 's/([^\+~]*)\.[^\.]+(~.*)?(\+.*)?$/\1/')
17
18 verabi=$ver-$abi
19 verfull=$ver-$revision
20
21 WGET="wget --tries=1 --timeout=10 --quiet -c"
22
23 abidir="`pwd`/$DEBIAN/abi/$verfull"
24 tmpdir="`pwd`/abi-tmp-$verfull"
25 origdir="`pwd`"
26 fwinfo=$abidir/fwinfo
27
28 test -d $tmpdir || mkdir $tmpdir
29
30 package_prefixes() {
31 __package_prefixes="$@"
32 }
33
34 getall() {
35 arch=$1
36 shift
37
38 mkdir -p $abidir/$arch
39
40 for sub in $@; do
41 if [ -f $abidir/$arch/$sub ]; then
42 echo "Exists: $sub"
43 continue
44 fi
45 echo -n "Fetching $sub($arch)..."
46 prefixes=""
47 filenames=""
48 cd $tmpdir
49 for prefix in $__package_prefixes
50 do
51 filename=${prefix}-${verabi}-${sub}_${verfull}_${arch}.deb
52 for r in "${repo_list[@]}"
53 do
54 if ! [ -f $filename ]; then
55 $WGET $r/$filename
56 fi
57 if [ -f $filename ]; then
58 prefixes="$prefixes $prefix"
59 filenames="$filenames $filename"
60 break
61 fi
62 done
63 done
64 if [ "$filenames" != "" ]; then
65 echo -n "extracting$prefixes..."
66 for filename in $filenames
67 do
68 dpkg-deb --extract $filename tmp
69 done
70 find tmp -name "*.ko" | while read f; do
71 modinfo $f | grep ^firmware >> $fwinfo
72 done
73 if [ -f tmp/boot/abi-* ]; then
74 mv tmp/boot/abi-* $abidir/$arch/$sub
75 else
76 echo -n "NO ABI FILE..."
77 fi
78 (cd tmp; find lib/modules/$verabi-$sub/kernel -name '*.ko') | \
79 sed -e 's/.*\/\([^\/]*\)\.ko/\1/' | sort > \
80 $abidir/$arch/$sub.modules
81 (
82 cd tmp;
83 # Prevent exposing some errors when called by python scripts. SIGPIPE seems to get
84 # exposed when using the `find ...` form of the command.
85 ko=$(find lib/modules/$verabi-$sub/kernel \
86 -name '*.ko' | head -1)
87 readelf -p .comment "$ko" | gawk '
88 ($1 == "[") {
89 printf("%s", $3);
90 for (n=4; n<=NF; n++) {
91 printf(" %s", $n);
92 }
93 print ""
94 }' | sort -u >$abidir/$arch/$sub.compiler
95 version=`cat $abidir/$arch/$sub.compiler`
96 echo -n "$version..."
97 )
98 rm -rf tmp $filenames
99 echo "done."
100 else
101 echo "FAILED."
102 fi
103 cd $origdir
104 done
105 }
106
107 # MAIN
108
109 # Setup abi directory
110 mkdir -p $abidir
111 echo $abi > $abidir/abiname
112
113 # NOTE: The flavours are hardcoded, because they may have changed from the
114 # current build.
115
116 __package_prefixes="linux-image"
117
118 . $DEBIAN/etc/getabis
119
120 # Extract compiler source package version from e.g.:
121 # GCC: (Ubuntu/Linaro 4.8.2-19ubuntu1) 4.8.2
122 compilers=`sed 's/^.*(.* \(.*\)).*$/\1/' $abidir/*/*.compiler | sort -u | wc -l`
123 if [ "$compilers" != 1 ]; then
124 echo "WARNING: inconsistent compiler versions detected:" 1>&2
125 sort -u $abidir/*/*.compiler | sed 's/^/WARNING: /' 1>&2
126 fi
127
128 sort < $fwinfo | uniq > fwinfo.tmp
129 mv fwinfo.tmp $fwinfo
130
131 rmdir $tmpdir
132
133 # If this is running in a git repo, add the new ABI directory, remove the old
134 if [ -d ".git" ]; then
135 git add $abidir
136 find $DEBIAN/abi/* -maxdepth 0 -type d | grep -v $verfull | while read f; do git rm -r $f;done
137 fi