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