Fix distribution detection
[zfs.git] / zfs-modules.spec.in
1 # The following block is used to allow the source RPM to be rebuilt 
2 # against specific kernels.  It is preferable that rpmbuild define the
3 # require_kver, require_kdir, require_obj constants for us, but if it does not
4 # not we attempt to determine the correct values based on your distro.
5
6 # kdir:    Full path to the kernel source headers
7 # kobj:    Full path to the kernel build objects
8 # kver:    Kernel version
9 # kpkg:    Kernel package name
10 # kdevpkg: Kernel devel package name
11 # kverpkg: Kernel package version
12
13 %if %{defined require_kver}
14 %define kver %{require_kver}
15 %endif
16
17 %if %{defined require_kdir}
18 %define kdir %{require_kdir}
19 %endif
20
21 %if %{defined require_kobj}
22 %define kobj %{require_kobj}
23 %endif
24
25 # Set using 'rpmbuild ... --with debug ...', defaults to disabled.
26 %if %{defined _with_debug}
27  %define kdebug --enable-debug
28 %else
29  %if %{defined _without_debug}
30   %define kdebug --disable-debug
31  %else
32   %define kdebug --disable-debug
33  %endif
34 %endif
35
36 # SLES:
37 %if %{defined suse_version}
38  %if %{undefined kver}
39   %ifarch ppc64
40    %define kverextra     ppc64
41   %else
42    %define kverextra     default
43   %endif
44
45   %if %{suse_version} >= 1100
46    %define klnk          %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
47    %define krelease      %{klnk}/include/config/kernel.release
48   %else
49    %define klnk          %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
50    %define krelease      %{klnk}/.kernelrelease
51   %endif
52
53   %define kver           %((echo X; %{__cat} %{krelease} 2>/dev/null)|tail -1)
54  %endif
55
56  %if %{undefined kverextra}
57   %define kverextra      %(echo %{kver} | cut -f3 -d'-')
58  %endif
59
60  %define kpkg            kernel-%{kverextra}
61  %define kdevpkg         kernel-source
62  %define kverpkg         %(echo %{kver} | %{__sed} -e 's/-%{kverextra}//g')
63
64  # The kernel and rpm versions do not strictly match under SLES11
65  # e.g. kernel version 2.6.27.19-5 != rpm version 2.6.27.19-5.1
66  %if %{suse_version} >= 1100
67   %define koppkg         >=
68  %else
69   %define koppkg         =
70  %endif
71
72  %if %{undefined kdir}
73   %define kdir           %{_usrsrc}/linux-%{kverpkg}
74  %endif
75  %if %{undefined kobj}
76   %define kobj           %{kdir}-obj/%{_target_cpu}/%{kverextra}
77  %endif
78 %else
79
80 # CHAOS 4.x:
81 %if %{defined ch4}
82  %if %{undefined kver}
83   %define klnk           %{_usrsrc}/kernels/*/include/config
84   %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
85                             2>/dev/null) | tail -1)
86  %endif
87  %define kpkg            chaos-kernel
88  %define kdevpkg         chaos-kernel-devel
89  %define kverpkg         %{kver}
90  %define koppkg          =
91  %if %{undefined kdir}
92   %define kdir %{_usrsrc}/kernels/%{kver}
93  %endif
94  %if %{undefined kobj}
95   %define kobj           %{kdir}
96  %endif
97 %else
98
99 # RHEL 5.x/6.x, CHAOS 5.x:
100 %if %{defined el5} || %{defined el6} || %{defined ch5}
101  %if %{undefined kver}
102   %define klnk           %{_usrsrc}/kernels/*/include/config
103   %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
104                             2>/dev/null) | tail -1)
105  %endif
106  %define kpkg            kernel
107  %define kdevpkg         kernel-devel
108  %if %{defined el6} || %{defined ch5}
109   %define kverpkg        %(echo %{kver} | %{__sed} -e 's/.%{_target_cpu}//g')
110  %else
111   %define kverpkg        %{kver}
112  %endif
113  %define koppkg          =
114  %if %{undefined kdir}
115   %if %{defined el6} || %{defined ch5}
116    %define kdir           %{_usrsrc}/kernels/%{kver}
117   %else
118    %define kdir           %{_usrsrc}/kernels/%{kver}-%{_target_cpu}
119   %endif
120  %endif
121  %if %{undefined kobj}
122   %define kobj           %{kdir}
123  %endif
124 %else
125
126 # Fedora:
127 %if %{defined fedora}
128  %if %{undefined kver}
129   %define klnk           %{_usrsrc}/kernels/*/include/config
130   %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
131                             2>/dev/null) | tail -1)
132  %endif
133  %define kpkg            kernel
134  %define kdevpkg         kernel-devel
135  %define kverpkg         %(echo %{kver} | %{__sed} -e 's/.%{_target_cpu}//g')
136  %define koppkg          =
137  %if %{undefined kdir}
138   %define kdir           %{_usrsrc}/kernels/%{kver}
139  %endif
140  %if %{undefined kobj}
141   %define kobj           %{kdir}
142  %endif
143 %else
144
145 # Unsupported distro:
146  %if %{undefined kver}
147   %define kver           %(uname -r)
148  %endif
149  %define kverpkg         %{kver}
150  %if %{undefined kdir}
151   %define kdir           /lib/modules/%{kver}/build
152  %endif
153  %if %{undefined kobj}
154   %define kobj           %{kdir}
155  %endif
156
157 %endif
158 %endif
159 %endif
160 %endif
161
162 # spldir:    Full path to the spl source headers
163 # splobj:    Full path to the spl build objects
164 # splver:    Spl version
165 # splpkg:    Spl package name
166 # spldevpkg: Spl devel package name
167 # splverpkg: Spl package version
168
169 %if %{defined require_splver}
170 %define splver %{require_splver}
171 %endif
172
173 %if %{defined require_spldir}
174 %define spldir %{require_spldir}
175 %endif
176
177 %if %{defined require_splobj}
178 %define splobj %{require_splobj}
179 %endif
180
181 %if %{undefined splver}
182  %define spllnk          %{_usrsrc}/spl-*/%{kver}
183  %define splver          %((echo X; %{__cat} %{spllnk}/spl.release
184                             2>/dev/null) | tail -1)
185 %endif
186 %define splpkg           spl-modules
187 %define spldevpkg        spl-modules-devel
188 %define splverpkg        %{splver}
189 %if %{undefined spldir}
190  %define spldir %{_usrsrc}/spl-%{splver}/%{kver}
191 %endif
192 %if %{undefined splobj}
193  %define splobj          %{spldir}
194 %endif
195
196
197 # Distro agnostic:
198 %define name             @PACKAGE@-modules
199 %define version          @VERSION@
200 %define debug_package    %{nil}
201
202 # The kernel version should only be appended to a binary RPM.  When
203 # building a source RPM it must be kernel version agnostic.  This means
204 # the source RPM must never specify a required kernel version, but the
205 # final RPM should be keyed to the kernel version it was built against.
206 %if %{defined build_src_rpm}
207 %define release          @ZFS_META_RELEASE@
208 %if %{defined kpkg}
209 %define krequires        %{kpkg}
210 %endif
211 %define splrequires      %{splpkg}
212 %define spldevrequires   %{spldevpkg}
213 %else
214 %define relext           %(echo %{kverpkg} | %{__sed} -e 's/-/_/g')
215 %define release          @ZFS_META_RELEASE@_%{relext}
216 %if %{defined kpkg}
217 %define krequires        %{kpkg} %{koppkg} %{kverpkg}
218 %endif
219 %define splrequires      %{splpkg} = %{splverpkg}_%{relext}
220 %define spldevrequires   %{spldevpkg} = %{splverpkg}_%{relext}
221 %endif
222
223 Summary:         ZFS File System
224 Group:           Utilities/System
225 Name:            %{name}
226 Version:         %{version}
227 Release:         %{release}
228 License:         @ZFS_META_LICENSE@
229 URL:             git://github.com/zfsonlinux/zfs.git
230 BuildRoot:       %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
231 Source:          @PACKAGE@-%{version}.tar.gz
232 %if %{defined krequires}
233 Requires:        %{krequires}
234 %endif
235 %if %{defined kdevpkg}
236 BuildRequires:   %{kdevpkg}
237 %endif
238 Requires:        %{splrequires}
239 BuildRequires:   %{spldevpkg}
240 Provides:        lustre-backend-fs
241
242 %description
243 The %{name} package contains kernel modules and support utilities for
244 the %{name} file system.
245
246 %package devel
247 Summary:         ZFS File System Headers and Symbols
248 Group:           Development/Libraries
249 %if %{defined krequires}
250 Requires:        %{krequires}
251 %endif
252 %if %{defined kdevpkg}
253 Requires:        %{kdevpkg}
254 %endif
255 Requires:        %{spldevrequires}
256
257 %description devel
258 The %{name}-devel package contains the kernel header files and 
259 Module.symvers symbols needed for building additional modules
260 which use %{name}.
261
262 %prep
263 %setup -n @PACKAGE@-%{version}
264 %build
265 %configure --with-linux=%{kdir} --with-linux-obj=%{kobj} \
266            --with-spl=%{spldir} --with-spl-obj=%{splobj} \
267            --with-config=kernel %{kdebug}
268 make
269
270 %install
271 rm -rf $RPM_BUILD_ROOT
272 make DESTDIR=$RPM_BUILD_ROOT install
273
274 %clean
275 rm -rf $RPM_BUILD_ROOT
276
277 %files
278 %defattr(-, root, root)
279 /lib/modules/*
280
281 %files devel
282 %defattr(-,root,root)
283 %{_prefix}/src/*
284
285 %post
286 if [ -f /boot/System.map-%{kver} ]; then
287         /sbin/depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0
288 else
289         /sbin/depmod -a || exit 0
290 fi
291
292 %postun
293 if [ -f /boot/System.map-%{kver} ]; then
294         /sbin/depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0
295 else
296         /sbin/depmod -a || exit 0
297 fi