]>
Commit | Line | Data |
---|---|---|
0d34a427 LO |
1 | #!/bin/bash |
2 | ||
2c21160b TG |
3 | export LC_ALL=C.UTF-8 |
4 | ||
0d34a427 LO |
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 |