b9ae6661bd403e54c2cb6feae1582512e459b3c2
[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     *.el[6-9].elrepo*)
44                    verrel="`echo ${verrel} | sed -e 's/^\(.*.el[6-9].elrepo[^\.]*\)\.[^\.]\+.\?$/\1/'`" ;;
45     *.el[6-9]*)    verrel="`echo ${verrel} | sed -e 's/^\(.*.el[6-9][^\.]*\)\.[^\.]\+.\?$/\1/'`" ;;
46     *.fc[1-9][0-9]*)
47                    verrel="`echo ${verrel} | sed -e 's/^\(.*.fc[1-9][0-9][^\.]*\)\.[^\.]\+.\?$/\1/'`" ;;
48     *.fc9*)        verrel="`echo ${verrel} | sed -e 's/^\(.*.fc9[^\.]*\)\.[^\.]\+.\?$/\1/'`" ;;
49   esac
50 }
51
52 print_verrel ()
53 {
54   get_verrel $@
55   echo "${verrel}"
56 }
57
58 get_variant ()
59 {
60   get_verrel $@
61   variant=${1:-$(uname -r)}
62   variant=${variant##$verrel}
63   variant=${variant:-'""'}
64 }
65
66 print_variant ()
67 {
68   get_variant $@
69   echo "${variant}"
70 }
71
72
73 get_rpmtemplate ()
74 {
75     local variant="${1}"
76     local dashvariant="${variant:+-${variant}}"
77     case "$verrel" in
78         *.el[6-9]*)
79                kdep="kernel-%{_target_cpu} = ${verrel}${variant}"     ;;
80         *.EL*) kdep="kernel${dashvariant}-%{_target_cpu} = ${verrel}" ;;
81         *)     kdep="kernel-%{_target_cpu} = ${verrel}${variant}"     ;;
82     esac
83     case "$verrel" in
84         *.el[6-9]*)
85                   kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
86         *.fc[2-9][0-9]*)
87                   kname="${verrel}.%{_target_cpu}${variant:++${variant}}" ;;
88         *.fc1[0-9]*)
89                   kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
90         *.fc9*)   kname="${verrel}.%{_target_cpu}${variant:+.${variant}}" ;;
91         *)        kname="${verrel}${variant}"                             ;;
92     esac
93
94     cat <<EOF
95 %package       -n kmod-${kmod_name}${dashvariant}
96 Summary:          ${kmod_name} kernel module(s)
97 Group:            System Environment/Kernel
98 Provides:         kernel-modules = ${kname}
99 Provides:         ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
100 Provides:         openafs-kernel = %{PACKAGE_VERSION}
101 Requires:         ${kdep}
102 Requires:         ${kmod_name}-kmod-common >= %{?epoch:%{epoch}:}%{version}
103 Requires(post):   /sbin/depmod
104 Requires(postun): /sbin/depmod
105 Release:          %{pkgrel}.%(echo ${verrel} | tr - _)
106 BuildRequires:    kernel${dashvariant}-devel-%{_target_cpu} = ${verrel}
107 %description   -n kmod-${kmod_name}${dashvariant}
108 This package provides the ${kmod_name} kernel modules built for the Linux
109 kernel ${kname} for the %{_target_cpu} family of processors.
110 %post          -n kmod-${kmod_name}${dashvariant}
111 /sbin/depmod -aeF /boot/System.map-${kname} ${kname} > /dev/null || :
112 %postun        -n kmod-${kmod_name}${dashvariant}
113 /sbin/depmod -aF /boot/System.map-${kname} ${kname} &> /dev/null || :
114 %files         -n kmod-${kmod_name}${dashvariant}
115 %defattr(644,root,root,755)
116 /lib/modules/${kname}/extra/${kmod_name}/
117
118 EOF
119 }
120
121 print_rpmtemplate ()
122 {
123   kmod_name="${1}"
124   shift
125   kver="${1}"
126   get_verrel "${1}"
127   shift
128   if [ -z "${kmod_name}" ] ; then
129     echo "Please provide the kmodule-name as first parameter." >&2
130     exit 2
131   elif [ -z "${kver}" ] ; then
132     echo "Please provide the kver as second parameter." >&2
133     exit 2
134   elif [ -z "${verrel}" ] ; then
135     echo "Couldn't find out the verrel." >&2
136     exit 2
137   fi
138
139   for variant in "$@" ; do
140     get_rpmtemplate "${variant}"
141   done
142 }
143
144 usage ()
145 {
146   cat <<EOF
147 You called: ${invocation}
148
149 Usage: ${myprog} <command> <option>+
150  Commands:
151   verrel <uname>                               
152     - Get "base" version-release.
153   variant <uname>                               
154     - Get variant from uname.
155   rpmtemplate <mainpgkname> <uname> <variants> 
156     - Return a template for
157   version  
158     - Output version number and exit.
159 EOF
160 }
161
162 invocation="$(basename ${0}) $@"
163 while [ "${1}" ] ; do
164   case "${1}" in
165     verrel)
166       shift
167       print_verrel $@
168       exit $?
169       ;;
170     variant)
171       shift
172       print_variant $@
173       exit $?
174       ;;
175     rpmtemplate)
176       shift
177       print_rpmtemplate "$@"
178       exit $?
179       ;;
180     version)
181       echo "${myprog} ${myver}"
182       exit 0
183       ;;
184     *)
185       echo "Error: Unknown option '${1}'." >&2
186       usage >&2
187       exit 2
188       ;;
189   esac
190 done
191
192 # Local variables:
193 # mode: sh
194 # sh-indentation: 2
195 # indent-tabs-mode: nil
196 # End:
197 # ex: ts=2 sw=2 et