redhat-packaging-updates-20090203
[openafs.git] / src / packaging / RedHat / openafs-kmodtool
1 #!/bin/bash
2
3 # kmodtool - Helper script for building kernel module RPMs
4 # Copyright (c) 2003-2007 Ville Skyttä <ville.skytta@iki.fi>,
5 #                         Thorsten Leemhuis <fedora@leemhuis.info>
6 #
7 # Modified by Simon Wilkinson for OpenAFS
8
9 # Permission is hereby granted, free of charge, to any person obtaining
10 # a copy of this software and associated documentation files (the
11 # "Software"), to deal in the Software without restriction, including
12 # without limitation the rights to use, copy, modify, merge, publish,
13 # distribute, sublicense, and/or sell copies of the Software, and to
14 # permit persons to whom the Software is furnished to do so, subject to
15 # the following conditions:
16 #
17 # The above copyright notice and this permission notice shall be
18 # included in all copies or substantial portions of the Software.
19 #
20 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
28 shopt -s extglob
29
30 myprog="kmodtool"
31 myver="0.10.13"
32 knownvariants=@(BOOT|PAE?(-debug)|@(big|huge)mem|debug|enterprise|kdump|?(large)smp?(-debug)|uml|xen?([0U])?(-PAE))
33 kmod_name=
34 kver=
35 verrel=
36 variant=
37
38 get_verrel ()
39 {
40   verrel=${1:-$(uname -r)}
41   verrel=${verrel%%$knownvariants}
42   case "$verrel" in
43     *.fc9*)  verrel="`echo ${verrel} | sed -e 's/^\(.*.fc9[^\.]*\)\.[^\.]\+.\?$/\1/'`" ;;
44     *.fc1?*) verrel="`echo ${verrel} | sed -e 's/^\(.*.fc1[0-9][^\.]*\)\.[^\.]\+.\?$/\1/'`" ;;
45   esac
46 }
47
48 print_verrel ()
49 {
50   get_verrel $@
51   echo "${verrel}"
52 }
53
54 get_variant ()
55 {
56   get_verrel $@
57   variant=${1:-$(uname -r)}
58   variant=${variant##$verrel}
59   variant=${variant:-'""'}
60 }
61
62 print_variant ()
63 {
64   get_variant $@
65   echo "${variant}"
66 }
67
68
69 get_rpmtemplate ()
70 {
71     local variant="${1}"
72     local dashvariant="${variant:+-${variant}}"
73     case "$verrel" in
74         *.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;;
75         *)     kdep="kernel-%{_target_cpu} = ${verrel}${variant}"     ;;
76     esac
77     case "$verrel" in
78         *.fc9*) kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
79         *.fc1?*)  kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
80         *)      kname="${verrel}${variant}"                             ;;
81     esac
82
83     cat <<EOF
84 %package       -n kmod-${kmod_name}${dashvariant}
85 Summary:          ${kmod_name} kernel module(s)
86 Group:            System Environment/Kernel
87 Provides:         kernel-modules = ${kname}
88 Provides:         ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
89 Provides:         openafs-kernel = %{PACKAGE_VERSION}
90 Requires:         ${kdep}
91 Requires:         ${kmod_name}-kmod-common >= %{?epoch:%{epoch}:}%{version}
92 Requires(post):   /sbin/depmod
93 Requires(postun): /sbin/depmod
94 Release:          %{pkgrel}.%(echo ${verrel} | tr - _)
95 BuildRequires:    kernel${dashvariant}-devel-%{_target_cpu} = ${verrel}
96 %description   -n kmod-${kmod_name}${dashvariant}
97 This package provides the ${kmod_name} kernel modules built for the Linux
98 kernel ${kname} for the %{_target_cpu} family of processors.
99 %post          -n kmod-${kmod_name}${dashvariant}
100 /sbin/depmod -aeF /boot/System.map-${kname} ${kname} > /dev/null || :
101 %postun        -n kmod-${kmod_name}${dashvariant}
102 /sbin/depmod -aF /boot/System.map-${kname} ${kname} &> /dev/null || :
103 %files         -n kmod-${kmod_name}${dashvariant}
104 %defattr(644,root,root,755)
105 /lib/modules/${kname}/extra/${kmod_name}/
106
107 EOF
108 }
109
110 print_rpmtemplate ()
111 {
112   kmod_name="${1}"
113   shift
114   kver="${1}"
115   get_verrel "${1}"
116   shift
117   if [ -z "${kmod_name}" ] ; then
118     echo "Please provide the kmodule-name as first parameter." >&2
119     exit 2
120   elif [ -z "${kver}" ] ; then
121     echo "Please provide the kver as second parameter." >&2
122     exit 2
123   elif [ -z "${verrel}" ] ; then
124     echo "Couldn't find out the verrel." >&2
125     exit 2
126   fi
127
128   for variant in "$@" ; do
129     get_rpmtemplate "${variant}"
130   done
131 }
132
133 usage ()
134 {
135   cat <<EOF
136 You called: ${invocation}
137
138 Usage: ${myprog} <command> <option>+
139  Commands:
140   verrel <uname>                               
141     - Get "base" version-release.
142   variant <uname>                               
143     - Get variant from uname.
144   rpmtemplate <mainpgkname> <uname> <variants> 
145     - Return a template for
146   version  
147     - Output version number and exit.
148 EOF
149 }
150
151 invocation="$(basename ${0}) $@"
152 while [ "${1}" ] ; do
153   case "${1}" in
154     verrel)
155       shift
156       print_verrel $@
157       exit $?
158       ;;
159     variant)
160       shift
161       print_variant $@
162       exit $?
163       ;;
164     rpmtemplate)
165       shift
166       print_rpmtemplate "$@"
167       exit $?
168       ;;
169     version)
170       echo "${myprog} ${myver}"
171       exit 0
172       ;;
173     *)
174       echo "Error: Unknown option '${1}'." >&2
175       usage >&2
176       exit 2
177       ;;
178   esac
179 done
180
181 # Local variables:
182 # mode: sh
183 # sh-indentation: 2
184 # indent-tabs-mode: nil
185 # End:
186 # ex: ts=2 sw=2 et