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