Linux 3.5 compat, eops->encode_fh() takes inodes
[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 kernel ...', defaults to enabled.
26 %if %{defined _with_kernel}
27  %define with_kernel 1
28 %else
29  %if %{defined _without_kernel}
30   %define with_kernel 0
31  %else
32   %define with_kernel 1
33  %endif
34 %endif
35
36 # Set using 'rpmbuild ... --with kernel-debug ...', defaults to disabled.
37 %if %{defined _with_kernel_debug}
38  %define with_kernel_debug 1
39 %else
40  %if %{defined _without_kernel_debug}
41   %define with_kernel_debug 0
42  %else
43   %define with_kernel_debug 0
44  %endif
45 %endif
46
47 # Set using 'rpmbuild ... --with debug ...', defaults to disabled.
48 %if %{defined _with_debug}
49  %define kdebug --enable-debug
50 %else
51  %if %{defined _without_debug}
52   %define kdebug --disable-debug
53  %else
54   %define kdebug --disable-debug
55  %endif
56 %endif
57
58 # Set using 'rpmbuild ... --with debug-dmu-tx ...', defaults to disabled.
59 %if %{defined _with_debug_dmu_tx}
60  %define kdebug_dmu_tx --enable-debug-dmu-tx
61 %else
62  %if %{defined _without_debug_dmu_tx}
63   %define kdebug_dmu_tx --disable-debug-dmu-tx
64  %else
65   %define kdebug_dmu_tx --disable-debug-dmu-tx
66  %endif
67 %endif
68
69 # SLES:
70 %if %{defined suse_version}
71  %if %{undefined kver}
72   %ifarch ppc64
73    %define kverextra     ppc64
74   %else
75    %define kverextra     default
76   %endif
77
78   %if %{suse_version} >= 1100
79    %define klnk          %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
80    %define krelease      %{klnk}/include/config/kernel.release
81   %else
82    %define klnk          %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
83    %define krelease      %{klnk}/.kernelrelease
84   %endif
85
86   %define kver_kern      %((echo X; %{__cat} %{krelease} 2>/dev/null)|tail -1)
87   %define kver_dbug      %{nil}
88  %else
89   %define kver_kern      %{kver}
90   %define kver_dbug      %{nil}
91  %endif
92
93  %if %{undefined kverextra}
94   %define kverextra      %(echo %{kver_kern} | cut -f3 -d'-')
95  %endif
96
97  %define kpkg_kern       kernel-%{kverextra}
98  %define kpkg_dbug       %{nil}
99
100  %define kdevpkg_kern    kernel-source
101  %define kdevpkg_dbug    %{nil}
102
103  %define kverpkg_kern    %(echo %{kver_kern} | %{__sed} -e 's/-%{kverextra}//g')
104  %define kverpkg_dbug    %{nil}
105
106  # The kernel and rpm versions do not strictly match under SLES11
107  # e.g. kernel version 2.6.27.19-5 != rpm version 2.6.27.19-5.1
108  %if %{suse_version} >= 1100
109   %define koppkg         >=
110  %else
111   %define koppkg         =
112  %endif
113
114  %if %{undefined kdir}
115   %define kdir_kern      %{_usrsrc}/linux-%{kverpkg_kern}
116   %define kdir_dbug      %{nil}
117  %else
118   %define kdir_kern      %{kdir}
119   %define kdir_dbug      %{nil}
120  %endif
121
122  %if %{undefined kobj}
123   %define kobj_kern      %{kdir_kern}-obj/%{_target_cpu}/%{kverextra}
124   %define kobj_dbug      %{nil}
125  %else
126   %define kobj_kern      %{kobj}
127   %define kobj_dbug      %{nil}
128  %endif
129 %else
130
131 # RHEL 5.x/6.x, CHAOS 5.x:
132 %if %{defined el5} || %{defined el6} || %{defined ch5}
133  %if %{undefined kver}
134   %define klnk           %{_usrsrc}/kernels/*/include/config
135   %define kver_kern      %((echo X; ((%{__cat} %{klnk}/kernel.release
136                             2>/dev/null) | %{__grep} -v debug)) | tail -1)
137   %define kver_dbug      %((echo X; ((%{__cat} %{klnk}/kernel.release
138                             2>/dev/null) | %{__grep} debug)) | tail -1)
139  %else
140   %define kver_kern      %{kver}
141   %define kver_dbug      %{kver}.debug
142  %endif
143
144  %define kpkg_kern       kernel
145  %define kpkg_dbug       kernel-debug
146
147  %define kdevpkg_kern    kernel-devel
148  %define kdevpkg_dbug    kernel-debug-devel
149
150  %if %{defined el6} || %{defined ch5}
151   %define kverpkg_kern   %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
152   %define kverpkg_dbug   %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
153  %else
154   %define kverpkg_kern   %{kver_kern}
155   %define kverpkg_dbug   %{kver_dbug}
156  %endif
157
158  %define koppkg          =
159
160  %if %{undefined kdir}
161   %if %{defined el6} || %{defined ch5}
162    %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}
163    %define kdir_dbug      %{_usrsrc}/kernels/%{kver_dbug}
164   %else
165    %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}-%{_target_cpu}
166    %define kdir_dbug      %{_usrsrc}/kernels/%{kver_dbug}-%{_target_cpu}
167   %endif
168  %else
169   %define kdir_kern       %{kdir}
170   %define kdir_dbug       %{kdir}.debug
171  %endif
172
173  %if %{undefined kobj}
174   %define kobj_kern      %{kdir_kern}
175   %define kobj_dbug      %{kdir_dbug}
176  %else
177   %define kobj_kern      %{kobj}
178   %define kobj_dbug      %{kobj}.debug
179  %endif
180 %else
181
182 # Fedora:
183 %if %{defined fedora}
184  %if %{undefined kver}
185   %define klnk           %{_usrsrc}/kernels/*/include/config
186   %define kver_kern      %((echo X; ((%{__cat} %{klnk}/kernel.release
187                             2>/dev/null) | %{__grep} -v debug)) | tail -1)
188   %define kver_dbug      %((echo X; ((%{__cat} %{klnk}/kernel.release
189                             2>/dev/null) | %{__grep} debug)) | tail -1)
190  %else
191   %define kver_kern      %{kver}
192   %define kver_dbug      %{kver}.debug
193  %endif
194
195  %define kpkg_kern       kernel
196  %define kpkg_dbug       kernel-debug
197
198  %define kdevpkg_kern    kernel-devel
199  %define kdevpkg_dbug    kernel-debug-devel
200
201  %define kverpkg_kern    %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
202  %define kverpkg_dbug    %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
203
204  %define koppkg          =
205
206  %if %{undefined kdir}
207   %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}
208   %define kdir_dbug      %{_usrsrc}/kernels/%{kver_dbug}
209  %else
210   %define kdir_kern      %{kdir}
211   %define kdir_dbug      %{kdir}.debug
212  %endif
213
214  %if %{undefined kobj}
215   %define kobj_kern      %{kdir_kern}
216   %define kobj_dbug      %{kdir_dbug}
217  %else
218   %define kobj_kern      %{kobj}
219   %define kobj_dbug      %{kobj}.debug
220  %endif
221 %else
222
223 # Unsupported distro:
224  %if %{undefined kver}
225   %define kver_kern      %(uname -r)
226   %define kver_dbug      %{nil}
227  %else
228   %define kver_kern      %{kver}
229   %define kver_dbug      %{nil}
230  %endif
231
232  %define kverpkg_kern    %{kver_kern}
233  %define kverpkg_dbug    %{nil}
234
235  %if %{undefined kdir}
236   %define kdir_kern      /lib/modules/%{kver_kern}/build
237   %define kdir_dbug      %{nil}
238  %else
239   %define kdir_kern      %{kdir}
240   %define kdir_dbug      %{nil}
241  %endif
242
243  %if %{undefined kobj}
244   %define kobj_kern      %{kdir_kern}
245   %define kobj_dbug      %{nil}
246  %else
247   %define kobj_kern      %{kobj}
248   %define kobj_dbug      %{nil}
249  %endif
250
251 %endif
252 %endif
253 %endif
254
255 # spldir:    Full path to the spl source headers
256 # splobj:    Full path to the spl build objects
257 # splver:    Spl version
258 # splpkg:    Spl package name
259 # spldevpkg: Spl devel package name
260 # splverpkg: Spl package version
261
262 %if %{defined require_splver}
263 %define splver %{require_splver}
264 %endif
265
266 %if %{defined require_spldir}
267 %define spldir %{require_spldir}
268 %endif
269
270 %if %{defined require_splobj}
271 %define splobj %{require_splobj}
272 %endif
273
274 %if %{undefined splver}
275  %define spllnk_kern     %{_usrsrc}/spl-*/%{kver_kern}
276  %define spllnk_dbug     %{_usrsrc}/spl-*/%{kver_dbug}
277
278  %define splver_kern     %((echo X; %{__cat} %{spllnk_kern}/spl.release
279                             2>/dev/null) | tail -1)
280  %define splver_dbug     %((echo X; %{__cat} %{spllnk_dbug}/spl.release
281                             2>/dev/null) | tail -1)
282 %else
283  %define splver_kern     %{splver}
284  %define splver_dbug     %{splver}
285 %endif
286
287 %define splpkg_kern      spl-modules
288 %define splpkg_dbug      spl-modules-debug
289
290 %define spldevpkg_kern   spl-modules-devel
291 %define spldevpkg_dbug   spl-modules-debug-devel
292
293 %define splverpkg_kern   %{splver_kern}
294 %define splverpkg_dbug   %{splver_dbug}
295
296 %if %{undefined spldir}
297  %define spldir_kern     %{_usrsrc}/spl-%{splver_kern}/%{kver_kern}
298  %define spldir_dbug     %{_usrsrc}/spl-%{splver_dbug}/%{kver_dbug}
299 %else
300  %define spldir_kern     %{spldir}
301  %define spldir_dbug     %{spldir}.debug
302 %endif
303
304 %if %{undefined splobj}
305  %define splobj_kern     %{spldir_kern}
306  %define splobj_dbug     %{spldir_dbug}
307 %else
308  %define splobj_kern     %{splobj}
309  %define splobj_dbug     %{splobj}.debug
310 %endif
311
312
313 # Distro agnostic:
314 %define name             @PACKAGE@-modules
315 %define version          @VERSION@
316
317 # The kernel version should only be appended to a binary RPM.  When
318 # building a source RPM it must be kernel version agnostic.  This means
319 # the source RPM must never specify a required kernel version, but the
320 # final RPM should be keyed to the kernel version it was built against.
321 %if %{defined build_src_rpm}
322
323 %define rel_kern         @ZFS_META_RELEASE@
324 %define rel_dbug         @ZFS_META_RELEASE@
325
326 %if %{defined kpkg_kern}
327 %define req_kern         %{kpkg_kern}
328 %endif
329 %if %{defined kpkg_dbug}
330 %define req_dbug         %{kpkg_dbug}
331 %endif
332
333 %define splreq_kern      %{splpkg_kern}
334 %define splreq_dbug      %{splpkg_dbug}
335
336 %define spldevreq_kern   %{spldevpkg_kern}
337 %define spldevreq_dbug   %{spldevpkg_dbug}
338
339 %else
340
341 %define relext_kern      %(echo %{kverpkg_kern} | %{__sed} -e 's/-/_/g')
342 %define relext_dbug      %(echo %{kverpkg_dbug} | %{__sed} -e 's/-/_/g')
343 %define rel_kern         @ZFS_META_RELEASE@_%{relext_kern}
344 %define rel_dbug         @ZFS_META_RELEASE@_%{relext_dbug}
345
346 %if %{defined kpkg_kern}
347 %define req_kern         %{kpkg_kern} %{koppkg} %{kverpkg_kern}
348 %endif
349 %if %{defined kpkg_dbug}
350 %define req_dbug         %{kpkg_dbug} %{koppkg} %{kverpkg_dbug}
351 %endif
352
353 %define splreq_kern      %{splpkg_kern} = %{splverpkg_kern}_%{relext_kern}
354 %define splreq_dbug      %{splpkg_dbug} = %{splverpkg_dbug}_%{relext_dbug}
355
356 %define spldevreq_kern   %{spldevpkg_kern} = %{splverpkg_kern}_%{relext_kern}
357 %define spldevreq_dbug   %{spldevpkg_dbug} = %{splverpkg_dbug}_%{relext_dbug}
358
359 %endif
360
361 Summary:         ZFS File System
362 Group:           Utilities/System
363 Name:            %{name}
364 Version:         %{version}
365 Release:         %{rel_kern}
366 License:         @ZFS_META_LICENSE@
367 URL:             git://github.com/zfsonlinux/zfs.git
368 BuildRoot:       %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
369 Source:          @PACKAGE@-%{version}.tar.gz
370
371 %if %{?with_kernel}
372
373 %if %{defined req_kern}
374 Requires:        %{req_kern}
375 %endif
376 %if %{defined kdevpkg_kern}
377 BuildRequires:   %{kdevpkg_kern}
378 %endif
379 %if %{defined splreq_kern}
380 Requires:        %{splreq_kern}
381 %endif
382 %if %{defined spldevpkg_kern}
383 BuildRequires:   %{spldevpkg_kern}
384 %endif
385 Provides:        lustre-backend-fs
386
387 %endif
388
389 %description
390 The %{name} package contains kernel modules and support utilities for
391 the %{name} file system.
392
393 %if %{?with_kernel}
394
395 %package devel
396 Summary:         ZFS File System Headers and Symbols
397 Group:           Development/Libraries
398 Release:         %{rel_kern}
399 %if %{defined devreq_kern}
400 Requires:        %{devreq_kern}
401 %endif
402 %if %{defined kdevpkg_kern}
403 BuildRequires:   %{kdevpkg_kern}
404 %endif
405 %if %{defined spldevreq_kern}
406 Requires:        %{spldevreq_kern}
407 %endif
408 %if %{defined spldevpkg_kern}
409 BuildRequires:   %{spldevpkg_kern}
410 %endif
411
412 %description devel
413 The %{name}-devel package contains the kernel header files and
414 Module.symvers symbols needed for building additional modules
415 which use %{name}.
416
417 %endif
418 %if %{?with_kernel_debug}
419
420 %package debug
421 Summary:         ZFS File System (Debug)
422 Group:           Utilities/System
423 Release:         %{rel_dbug}
424 %if %{defined req_dbug}
425 Requires:        %{req_dbug}
426 %endif
427 %if %{defined kdevpkg_dbug}
428 BuildRequires:   %{kdevpkg_dbug}
429 %endif
430 %if %{defined splreq_dbug}
431 Requires:        %{splreq_dbug}
432 %endif
433 %if %{defined spldevpkg_dbug}
434 BuildRequires:   %{spldevpkg_dbug}
435 %endif
436 Provides:        lustre-backend-fs
437
438 %description debug
439 The %{name}-debug package contains debug kernel modules and support
440 utilities for the %{name} file system.
441
442 %package debug-devel
443 Summary:         ZFS File System Headers and Symbols (Debug)
444 Group:           Development/Libraries
445 Release:         %{rel_dbug}
446 %if %{defined devreq_dbug}
447 Requires:        %{devreq_dbug}
448 %endif
449 %if %{defined kdevpkg_dbug}
450 BuildRequires:   %{kdevpkg_dbug}
451 %endif
452 %if %{defined spldevreq_dbug}
453 Requires:        %{spldevreq_dbug}
454 %endif
455 %if %{defined spldevpkg_dbug}
456 BuildRequires:   %{spldevpkg_dbug}
457 %endif
458
459 %description debug-devel
460 The %{name}-debug-devel package contains the debug kernel header files
461 and Module.symvers symbols needed for building additional modules
462 which use %{name}.
463
464 %endif
465
466 %prep
467 %setup -n @PACKAGE@-%{version}
468 %build
469 rm -rf $RPM_BUILD_ROOT
470
471 %if %{with_kernel}
472
473 %configure --with-linux=%{kdir_kern} --with-linux-obj=%{kobj_kern} \
474            --with-spl=%{spldir_kern} --with-spl-obj=%{splobj_kern} \
475            --with-config=kernel %{kdebug} %{kdebug_dmu_tx}
476 make
477 make DESTDIR=$RPM_BUILD_ROOT install
478
479 %endif
480 %if %{?with_kernel_debug}
481
482 %configure --with-linux=%{kdir_dbug} --with-linux-obj=%{kobj_dbug} \
483            --with-spl=%{spldir_dbug} --with-spl-obj=%{splobj_dbug} \
484            --with-config=kernel %{kdebug} %{kdebug_dmu_tx}
485 make
486 make DESTDIR=$RPM_BUILD_ROOT install
487
488 %endif
489
490 %clean
491 rm -rf $RPM_BUILD_ROOT
492
493 %if %{?with_kernel}
494
495 %files
496 %defattr(-, root, root)
497 /lib/modules/%{kver_kern}/*
498
499 %files devel
500 %defattr(-,root,root)
501 %{_prefix}/src/*/%{kver_kern}/*
502
503 %post
504 if [ -f /boot/System.map-%{kver_kern} ]; then
505         /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
506 else
507         /sbin/depmod -a || exit 0
508 fi
509
510 %postun
511 if [ -f /boot/System.map-%{kver_kern} ]; then
512         /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
513 else
514         /sbin/depmod -a || exit 0
515 fi
516
517 %endif
518 %if %{?with_kernel_debug}
519
520 %files debug
521 %defattr(-, root, root)
522 /lib/modules/%{kver_dbug}/*
523
524 %files debug-devel
525 %defattr(-,root,root)
526 %{_prefix}/src/*/%{kver_dbug}/*
527
528 %post debug
529 if [ -f /boot/System.map-%{kver_dbug} ]; then
530         /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
531 else
532         /sbin/depmod -a || exit 0
533 fi
534
535 %postun debug
536 if [ -f /boot/System.map-%{kver_dbug} ]; then
537         /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
538 else
539         /sbin/depmod -a || exit 0
540 fi
541
542 %endif