Merge branch 'acpidump' into acpica
[linux-drm-fsl-dcu.git] / scripts / package / builddeb
1 #!/bin/sh
2 #
3 # builddeb 1.3
4 # Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
5 #
6 # Simple script to generate a deb package for a Linux kernel. All the
7 # complexity of what to do with a kernel after it is installed or removed
8 # is left to other scripts and packages: they can install scripts in the
9 # /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
10 # specified in KDEB_HOOKDIR) that will be called on package install and
11 # removal.
12
13 set -e
14
15 create_package() {
16         local pname="$1" pdir="$2"
17
18         cp debian/copyright "$pdir/usr/share/doc/$pname/"
19         cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
20         gzip -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
21         sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
22                 | xargs -r0 md5sum > DEBIAN/md5sums"
23
24         # Fix ownership and permissions
25         chown -R root:root "$pdir"
26         chmod -R go-w "$pdir"
27
28         # Attempt to find the correct Debian architecture
29         local forcearch="" debarch=""
30         case "$UTS_MACHINE" in
31         i386|ia64|alpha)
32                 debarch="$UTS_MACHINE" ;;
33         x86_64)
34                 debarch=amd64 ;;
35         sparc*)
36                 debarch=sparc ;;
37         s390*)
38                 debarch=s390 ;;
39         ppc*)
40                 debarch=powerpc ;;
41         parisc*)
42                 debarch=hppa ;;
43         mips*)
44                 debarch=mips$(grep -q CPU_LITTLE_ENDIAN=y .config && echo el) ;;
45         arm*)
46                 debarch=arm$(grep -q CONFIG_AEABI=y .config && echo el) ;;
47         *)
48                 echo "" >&2
49                 echo "** ** **  WARNING  ** ** **" >&2
50                 echo "" >&2
51                 echo "Your architecture doesn't have it's equivalent" >&2
52                 echo "Debian userspace architecture defined!" >&2
53                 echo "Falling back to using your current userspace instead!" >&2
54                 echo "Please add support for $UTS_MACHINE to ${0} ..." >&2
55                 echo "" >&2
56         esac
57         if [ -n "$KBUILD_DEBARCH" ] ; then
58                 debarch="$KBUILD_DEBARCH"
59         fi
60         if [ -n "$debarch" ] ; then
61                 forcearch="-DArchitecture=$debarch"
62         fi
63
64         # Create the package
65         dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir"
66         dpkg --build "$pdir" ..
67 }
68
69 # Some variables and settings used throughout the script
70 version=$KERNELRELEASE
71 revision=$(cat .version)
72 if [ -n "$KDEB_PKGVERSION" ]; then
73         packageversion=$KDEB_PKGVERSION
74 else
75         packageversion=$version-$revision
76 fi
77 tmpdir="$objtree/debian/tmp"
78 fwdir="$objtree/debian/fwtmp"
79 kernel_headers_dir="$objtree/debian/hdrtmp"
80 libc_headers_dir="$objtree/debian/headertmp"
81 packagename=linux-image-$version
82 fwpackagename=linux-firmware-image
83 kernel_headers_packagename=linux-headers-$version
84 libc_headers_packagename=linux-libc-dev
85
86 if [ "$ARCH" = "um" ] ; then
87         packagename=user-mode-linux-$version
88 fi
89
90 # Setup the directory structure
91 rm -rf "$tmpdir" "$fwdir" "$kernel_headers_dir" "$libc_headers_dir"
92 mkdir -m 755 -p "$tmpdir/DEBIAN"
93 mkdir -p  "$tmpdir/lib" "$tmpdir/boot" "$tmpdir/usr/share/doc/$packagename"
94 mkdir -m 755 -p "$fwdir/DEBIAN"
95 mkdir -p "$fwdir/lib/firmware/$version/" "$fwdir/usr/share/doc/$fwpackagename"
96 mkdir -m 755 -p "$libc_headers_dir/DEBIAN"
97 mkdir -p "$libc_headers_dir/usr/share/doc/$libc_headers_packagename"
98 mkdir -m 755 -p "$kernel_headers_dir/DEBIAN"
99 mkdir -p "$kernel_headers_dir/usr/share/doc/$kernel_headers_packagename"
100 mkdir -p "$kernel_headers_dir/lib/modules/$version/"
101 if [ "$ARCH" = "um" ] ; then
102         mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin"
103 fi
104
105 # Build and install the kernel
106 if [ "$ARCH" = "um" ] ; then
107         $MAKE linux
108         cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
109         cp .config "$tmpdir/usr/share/doc/$packagename/config"
110         gzip "$tmpdir/usr/share/doc/$packagename/config"
111         cp $KBUILD_IMAGE "$tmpdir/usr/bin/linux-$version"
112 else 
113         cp System.map "$tmpdir/boot/System.map-$version"
114         cp .config "$tmpdir/boot/config-$version"
115         # Not all arches include the boot path in KBUILD_IMAGE
116         if [ -e $KBUILD_IMAGE ]; then
117                 cp $KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
118         else
119                 cp arch/$ARCH/boot/$KBUILD_IMAGE "$tmpdir/boot/vmlinuz-$version"
120         fi
121 fi
122
123 if grep -q '^CONFIG_MODULES=y' .config ; then
124         INSTALL_MOD_PATH="$tmpdir" $MAKE KBUILD_SRC= modules_install
125         rm -f "$tmpdir/lib/modules/$version/build"
126         rm -f "$tmpdir/lib/modules/$version/source"
127         if [ "$ARCH" = "um" ] ; then
128                 mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
129                 rmdir "$tmpdir/lib/modules/$version"
130         fi
131 fi
132
133 if [ "$ARCH" != "um" ]; then
134         $MAKE headers_check KBUILD_SRC=
135         $MAKE headers_install KBUILD_SRC= INSTALL_HDR_PATH="$libc_headers_dir/usr"
136 fi
137
138 # Install the maintainer scripts
139 # Note: hook scripts under /etc/kernel are also executed by official Debian
140 # kernel packages, as well as kernel packages built using make-kpkg
141 debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
142 for script in postinst postrm preinst prerm ; do
143         mkdir -p "$tmpdir$debhookdir/$script.d"
144         cat <<EOF > "$tmpdir/DEBIAN/$script"
145 #!/bin/sh
146
147 set -e
148
149 # Pass maintainer script parameters to hook scripts
150 export DEB_MAINT_PARAMS="\$*"
151
152 test -d $debhookdir/$script.d && run-parts --arg="$version" $debhookdir/$script.d
153 exit 0
154 EOF
155         chmod 755 "$tmpdir/DEBIAN/$script"
156 done
157
158 # Try to determine maintainer and email values
159 if [ -n "$DEBEMAIL" ]; then
160        email=$DEBEMAIL
161 elif [ -n "$EMAIL" ]; then
162        email=$EMAIL
163 else
164        email=$(id -nu)@$(hostname -f)
165 fi
166 if [ -n "$DEBFULLNAME" ]; then
167        name=$DEBFULLNAME
168 elif [ -n "$NAME" ]; then
169        name=$NAME
170 else
171        name="Anonymous"
172 fi
173 maintainer="$name <$email>"
174
175 # Generate a simple changelog template
176 cat <<EOF > debian/changelog
177 linux-upstream ($packageversion) unstable; urgency=low
178
179   * Custom built Linux kernel.
180
181  -- $maintainer  $(date -R)
182 EOF
183
184 # Generate copyright file
185 cat <<EOF > debian/copyright
186 This is a packacked upstream version of the Linux kernel.
187
188 The sources may be found at most Linux ftp sites, including:
189 ftp://ftp.kernel.org/pub/linux/kernel
190
191 Copyright: 1991 - 2009 Linus Torvalds and others.
192
193 The git repository for mainline kernel development is at:
194 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
195
196     This program is free software; you can redistribute it and/or modify
197     it under the terms of the GNU General Public License as published by
198     the Free Software Foundation; version 2 dated June, 1991.
199
200 On Debian GNU/Linux systems, the complete text of the GNU General Public
201 License version 2 can be found in \`/usr/share/common-licenses/GPL-2'.
202 EOF
203
204 # Generate a control file
205 cat <<EOF > debian/control
206 Source: linux-upstream
207 Section: kernel
208 Priority: optional
209 Maintainer: $maintainer
210 Standards-Version: 3.8.4
211 Homepage: http://www.kernel.org/
212 EOF
213
214 if [ "$ARCH" = "um" ]; then
215         cat <<EOF >> debian/control
216
217 Package: $packagename
218 Provides: linux-image, linux-image-2.6, linux-modules-$version
219 Architecture: any
220 Description: User Mode Linux kernel, version $version
221  User-mode Linux is a port of the Linux kernel to its own system call
222  interface.  It provides a kind of virtual machine, which runs Linux
223  as a user process under another Linux kernel.  This is useful for
224  kernel development, sandboxes, jails, experimentation, and
225  many other things.
226  .
227  This package contains the Linux kernel, modules and corresponding other
228  files, version: $version.
229 EOF
230
231 else
232         cat <<EOF >> debian/control
233
234 Package: $packagename
235 Provides: linux-image, linux-image-2.6, linux-modules-$version
236 Suggests: $fwpackagename
237 Architecture: any
238 Description: Linux kernel, version $version
239  This package contains the Linux kernel, modules and corresponding other
240  files, version: $version.
241 EOF
242
243 fi
244
245 # Build header package
246 (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles")
247 (cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles")
248 (cd $objtree; find arch/$SRCARCH/include .config Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles")
249 destdir=$kernel_headers_dir/usr/src/linux-headers-$version
250 mkdir -p "$destdir"
251 (cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -)
252 (cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -)
253 ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build"
254 rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles"
255 arch=$(dpkg --print-architecture)
256
257 cat <<EOF >> debian/control
258
259 Package: $kernel_headers_packagename
260 Provides: linux-headers, linux-headers-2.6
261 Architecture: $arch
262 Description: Linux kernel headers for $KERNELRELEASE on $arch
263  This package provides kernel header files for $KERNELRELEASE on $arch
264  .
265  This is useful for people who need to build external modules
266 EOF
267
268 # Do we have firmware? Move it out of the way and build it into a package.
269 if [ -e "$tmpdir/lib/firmware" ]; then
270         mv "$tmpdir/lib/firmware"/* "$fwdir/lib/firmware/$version/"
271         rmdir "$tmpdir/lib/firmware"
272
273         cat <<EOF >> debian/control
274
275 Package: $fwpackagename
276 Architecture: all
277 Description: Linux kernel firmware, version $version
278  This package contains firmware from the Linux kernel, version $version.
279 EOF
280
281         create_package "$fwpackagename" "$fwdir"
282 fi
283
284 cat <<EOF >> debian/control
285
286 Package: $libc_headers_packagename
287 Section: devel
288 Provides: linux-kernel-headers
289 Architecture: any
290 Description: Linux support headers for userspace development
291  This package provides userspaces headers from the Linux kernel.  These headers
292  are used by the installed headers for GNU glibc and other system libraries.
293 EOF
294
295 if [ "$ARCH" != "um" ]; then
296         create_package "$kernel_headers_packagename" "$kernel_headers_dir"
297         create_package "$libc_headers_packagename" "$libc_headers_dir"
298 fi
299
300 create_package "$packagename" "$tmpdir"
301
302 exit 0