Support debug and debug-devel sub packages
[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 # CHAOS 4.x:
132 %if %{defined ch4}
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) | tail -1)
137   %define kver_dbug      %{nil}
138  %else
139   %define kver_kern      %{kver}
140   %define kver_dbug      %{nil}
141  %endif
142
143  %define kpkg_kern       chaos-kernel
144  %define kpkg_dbug       %{nil}
145
146  %define kdevpkg_kern    chaos-kernel-devel
147  %define kdevpkg_dbug    %{nil}
148
149  %define kverpkg_kern    %{kver_kern}
150  %define kverpkg_dbug    %{nil}
151
152  %define koppkg          =
153
154  %if %{undefined kdir}
155   %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}
156   %define kdir_dbug      %{nil}
157  %else
158   %define kdir_kern      %{kdir}
159   %define kdir_dbug      %{nil}
160  %endif
161
162  %if %{undefined kobj}
163   %define kobj_kern      %{kdir_kern}
164   %define kobj_dbug      %{nil}
165  %else
166   %define kobj_kern      %{kobj}
167   %define kobj_dbug      %{nil}
168  %endif
169 %else
170
171 # RHEL 5.x/6.x, CHAOS 5.x:
172 %if %{defined el5} || %{defined el6} || %{defined ch5}
173  %if %{undefined kver}
174   %define klnk           %{_usrsrc}/kernels/*/include/config
175   %define kver_kern      %((echo X; ((%{__cat} %{klnk}/kernel.release
176                             2>/dev/null) | %{__grep} -v debug)) | tail -1)
177   %define kver_dbug      %((echo X; ((%{__cat} %{klnk}/kernel.release
178                             2>/dev/null) | %{__grep} debug)) | tail -1)
179  %else
180   %define kver_kern      %{kver}
181   %define kver_dbug      %{kver}.debug
182  %endif
183
184  %define kpkg_kern       kernel
185  %define kpkg_dbug       kernel-debug
186
187  %define kdevpkg_kern    kernel-devel
188  %define kdevpkg_dbug    kernel-debug-devel
189
190  %if %{defined el6} || %{defined ch5}
191   %define kverpkg_kern   %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
192   %define kverpkg_dbug   %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
193  %else
194   %define kverpkg_kern   %{kver_kern}
195   %define kverpkg_dbug   %{kver_dbug}
196  %endif
197
198  %define koppkg          =
199
200  %if %{undefined kdir}
201   %if %{defined el6} || %{defined ch5}
202    %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}
203    %define kdir_dbug      %{_usrsrc}/kernels/%{kver_dbug}
204   %else
205    %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}-%{_target_cpu}
206    %define kdir_dbug      %{_usrsrc}/kernels/%{kver_dbug}-%{_target_cpu}
207   %endif
208  %else
209   %define kdir_kern       %{kdir}
210   %define kdir_dbug       %{kdir}.debug
211  %endif
212
213  %if %{undefined kobj}
214   %define kobj_kern      %{kdir_kern}
215   %define kobj_dbug      %{kdir_dbug}
216  %else
217   %define kobj_kern      %{kobj}
218   %define kobj_dbug      %{kobj}.debug
219  %endif
220 %else
221
222 # Fedora:
223 %if %{defined fedora}
224  %if %{undefined kver}
225   %define klnk           %{_usrsrc}/kernels/*/include/config
226   %define kver_kern      %((echo X; ((%{__cat} %{klnk}/kernel.release
227                             2>/dev/null) | %{__grep} -v debug)) | tail -1)
228   %define kver_dbug      %((echo X; ((%{__cat} %{klnk}/kernel.release
229                             2>/dev/null) | %{__grep} debug)) | tail -1)
230  %else
231   %define kver_kern      %{kver}
232   %define kver_dbug      %{kver}.debug
233  %endif
234
235  %define kpkg_kern       kernel
236  %define kpkg_dbug       kernel-debug
237
238  %define kdevpkg_kern    kernel-devel
239  %define kdevpkg_dbug    kernel-debug-devel
240
241  %define kverpkg_kern    %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
242  %define kverpkg_dbug    %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
243
244  %define koppkg          =
245
246  %if %{undefined kdir}
247   %define kdir_kern      %{_usrsrc}/kernels/%{kver_kern}
248   %define kdir_dbug      %{_usrsrc}/kernels/%{kver_dbug}
249  %else
250   %define kdir_kern      %{kdir}
251   %define kdir_dbug      %{kdir}.debug
252  %endif
253
254  %if %{undefined kobj}
255   %define kobj_kern      %{kdir_kern}
256   %define kobj_dbug      %{kdir_dbug}
257  %else
258   %define kobj_kern      %{kobj}
259   %define kobj_dbug      %{kobj}.debug
260  %endif
261 %else
262
263 # Unsupported distro:
264  %if %{undefined kver}
265   %define kver_kern      %(uname -r)
266   %define kver_dbug      %{nil}
267  %else
268   %define kver_kern      %{kver}
269   %define kver_dbug      %{nil}
270  %endif
271
272  %define kverpkg_kern    %{kver_kern}
273  %define kverpkg_dbug    %{nil}
274
275  %if %{undefined kdir}
276   %define kdir_kern      /lib/modules/%{kver_kern}/build
277   %define kdir_dbug      %{nil}
278  %else
279   %define kdir_kern      %{kdir}
280   %define kdir_dbug      %{nil}
281  %endif
282
283  %if %{undefined kobj}
284   %define kobj_kern      %{kdir_kern}
285   %define kobj_dbug      %{nil}
286  %else
287   %define kobj_kern      %{kobj}
288   %define kobj_dbug      %{nil}
289  %endif
290
291 %endif
292 %endif
293 %endif
294 %endif
295
296 # spldir:    Full path to the spl source headers
297 # splobj:    Full path to the spl build objects
298 # splver:    Spl version
299 # splpkg:    Spl package name
300 # spldevpkg: Spl devel package name
301 # splverpkg: Spl package version
302
303 %if %{defined require_splver}
304 %define splver %{require_splver}
305 %endif
306
307 %if %{defined require_spldir}
308 %define spldir %{require_spldir}
309 %endif
310
311 %if %{defined require_splobj}
312 %define splobj %{require_splobj}
313 %endif
314
315 %if %{undefined splver}
316  %define spllnk_kern     %{_usrsrc}/spl-*/%{kver_kern}
317  %define spllnk_dbug     %{_usrsrc}/spl-*/%{kver_dbug}
318
319  %define splver_kern     %((echo X; %{__cat} %{spllnk_kern}/spl.release
320                             2>/dev/null) | tail -1)
321  %define splver_dbug     %((echo X; %{__cat} %{spllnk_dbug}/spl.release
322                             2>/dev/null) | tail -1)
323 %else
324  %define splver_kern     %{splver}
325  %define splver_dbug     %{splver}
326 %endif
327
328 %define splpkg_kern      spl-modules
329 %define splpkg_dbug      spl-modules-debug
330
331 %define spldevpkg_kern   spl-modules-devel
332 %define spldevpkg_dbug   spl-modules-debug-devel
333
334 %define splverpkg_kern   %{splver_kern}
335 %define splverpkg_dbug   %{splver_dbug}
336
337 %if %{undefined spldir}
338  %define spldir_kern     %{_usrsrc}/spl-%{splver_kern}/%{kver_kern}
339  %define spldir_dbug     %{_usrsrc}/spl-%{splver_dbug}/%{kver_dbug}
340 %else
341  %define spldir_kern     %{spldir}
342  %define spldir_dbug     %{spldir}.debug
343 %endif
344
345 %if %{undefined splobj}
346  %define splobj_kern     %{spldir_kern}
347  %define splobj_dbug     %{spldir_dbug}
348 %else
349  %define splobj_kern     %{splobj}
350  %define splobj_dbug     %{splobj}.debug
351 %endif
352
353
354 # Distro agnostic:
355 %define name             @PACKAGE@-modules
356 %define version          @VERSION@
357
358 # The kernel version should only be appended to a binary RPM.  When
359 # building a source RPM it must be kernel version agnostic.  This means
360 # the source RPM must never specify a required kernel version, but the
361 # final RPM should be keyed to the kernel version it was built against.
362 %if %{defined build_src_rpm}
363
364 %define rel_kern         @ZFS_META_RELEASE@
365 %define rel_dbug         @ZFS_META_RELEASE@
366
367 %if %{defined kpkg_kern}
368 %define req_kern         %{kpkg_kern}
369 %endif
370 %if %{defined kpkg_dbug}
371 %define req_dbug         %{kpkg_dbug}
372 %endif
373
374 %define splreq_kern      %{splpkg_kern}
375 %define splreq_dbug      %{splpkg_dbug}
376
377 %define spldevreq_kern   %{spldevpkg_kern}
378 %define spldevreq_dbug   %{spldevpkg_dbug}
379
380 %else
381
382 %define relext_kern      %(echo %{kverpkg_kern} | %{__sed} -e 's/-/_/g')
383 %define relext_dbug      %(echo %{kverpkg_dbug} | %{__sed} -e 's/-/_/g')
384 %define rel_kern         @ZFS_META_RELEASE@_%{relext_kern}
385 %define rel_dbug         @ZFS_META_RELEASE@_%{relext_dbug}
386
387 %if %{defined kpkg_kern}
388 %define req_kern         %{kpkg_kern} %{koppkg} %{kverpkg_kern}
389 %endif
390 %if %{defined kpkg_dbug}
391 %define req_dbug         %{kpkg_dbug} %{koppkg} %{kverpkg_dbug}
392 %endif
393
394 %define splreq_kern      %{splpkg_kern} = %{splverpkg_kern}_%{relext_kern}
395 %define splreq_dbug      %{splpkg_dbug} = %{splverpkg_dbug}_%{relext_dbug}
396
397 %define spldevreq_kern   %{spldevpkg_kern} = %{splverpkg_kern}_%{relext_kern}
398 %define spldevreq_dbug   %{spldevpkg_dbug} = %{splverpkg_dbug}_%{relext_dbug}
399
400 %endif
401
402 Summary:         ZFS File System
403 Group:           Utilities/System
404 Name:            %{name}
405 Version:         %{version}
406 Release:         %{rel_kern}
407 License:         @ZFS_META_LICENSE@
408 URL:             git://github.com/zfsonlinux/zfs.git
409 BuildRoot:       %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
410 Source:          @PACKAGE@-%{version}.tar.gz
411
412 %if %{?with_kernel}
413
414 %if %{defined req_kern}
415 Requires:        %{req_kern}
416 %endif
417 %if %{defined kdevpkg_kern}
418 BuildRequires:   %{kdevpkg_kern}
419 %endif
420 %if %{defined splreq_kern}
421 Requires:        %{splreq_kern}
422 %endif
423 %if %{defined spldevpkg_kern}
424 BuildRequires:   %{spldevpkg_kern}
425 %endif
426 Provides:        lustre-backend-fs
427
428 %endif
429
430 %description
431 The %{name} package contains kernel modules and support utilities for
432 the %{name} file system.
433
434 %if %{?with_kernel}
435
436 %package devel
437 Summary:         ZFS File System Headers and Symbols
438 Group:           Development/Libraries
439 Release:         %{rel_kern}
440 %if %{defined devreq_kern}
441 Requires:        %{devreq_kern}
442 %endif
443 %if %{defined kdevpkg_kern}
444 BuildRequires:   %{kdevpkg_kern}
445 %endif
446 %if %{defined spldevreq_kern}
447 Requires:        %{spldevreq_kern}
448 %endif
449 %if %{defined spldevpkg_kern}
450 BuildRequires:   %{spldevpkg_kern}
451 %endif
452
453 %description devel
454 The %{name}-devel package contains the kernel header files and
455 Module.symvers symbols needed for building additional modules
456 which use %{name}.
457
458 %endif
459 %if %{?with_kernel_debug}
460
461 %package debug
462 Summary:         ZFS File System (Debug)
463 Group:           Utilities/System
464 Release:         %{rel_dbug}
465 %if %{defined req_dbug}
466 Requires:        %{req_dbug}
467 %endif
468 %if %{defined kdevpkg_dbug}
469 BuildRequires:   %{kdevpkg_dbug}
470 %endif
471 %if %{defined splreq_dbug}
472 Requires:        %{splreq_dbug}
473 %endif
474 %if %{defined spldevpkg_dbug}
475 BuildRequires:   %{spldevpkg_dbug}
476 %endif
477 Provides:        lustre-backend-fs
478
479 %description debug
480 The %{name}-debug package contains debug kernel modules and support
481 utilities for the %{name} file system.
482
483 %package debug-devel
484 Summary:         ZFS File System Headers and Symbols (Debug)
485 Group:           Development/Libraries
486 Release:         %{rel_dbug}
487 %if %{defined devreq_dbug}
488 Requires:        %{devreq_dbug}
489 %endif
490 %if %{defined kdevpkg_dbug}
491 BuildRequires:   %{kdevpkg_dbug}
492 %endif
493 %if %{defined spldevreq_dbug}
494 Requires:        %{spldevreq_dbug}
495 %endif
496 %if %{defined spldevpkg_dbug}
497 BuildRequires:   %{spldevpkg_dbug}
498 %endif
499
500 %description debug-devel
501 The %{name}-debug-devel package contains the debug kernel header files
502 and Module.symvers symbols needed for building additional modules
503 which use %{name}.
504
505 %endif
506
507 %prep
508 %setup -n @PACKAGE@-%{version}
509 %build
510 rm -rf $RPM_BUILD_ROOT
511
512 %if %{with_kernel}
513
514 %configure --with-linux=%{kdir_kern} --with-linux-obj=%{kobj_kern} \
515            --with-spl=%{spldir_kern} --with-spl-obj=%{splobj_kern} \
516            --with-config=kernel %{kdebug} %{kdebug_dmu_tx}
517 make
518 make DESTDIR=$RPM_BUILD_ROOT install
519
520 %endif
521 %if %{?with_kernel_debug}
522
523 %configure --with-linux=%{kdir_dbug} --with-linux-obj=%{kobj_dbug} \
524            --with-spl=%{spldir_dbug} --with-spl-obj=%{splobj_dbug} \
525            --with-config=kernel %{kdebug} %{kdebug_dmu_tx}
526 make
527 make DESTDIR=$RPM_BUILD_ROOT install
528
529 %endif
530
531 %clean
532 rm -rf $RPM_BUILD_ROOT
533
534 %if %{?with_kernel}
535
536 %files
537 %defattr(-, root, root)
538 /lib/modules/%{kver_kern}/*
539
540 %files devel
541 %defattr(-,root,root)
542 %{_prefix}/src/*/%{kver_kern}/*
543
544 %post
545 if [ -f /boot/System.map-%{kver_kern} ]; then
546         /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
547 else
548         /sbin/depmod -a || exit 0
549 fi
550
551 %postun
552 if [ -f /boot/System.map-%{kver_kern} ]; then
553         /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
554 else
555         /sbin/depmod -a || exit 0
556 fi
557
558 %endif
559 %if %{?with_kernel_debug}
560
561 %files debug
562 %defattr(-, root, root)
563 /lib/modules/%{kver_dbug}/*
564
565 %files debug-devel
566 %defattr(-,root,root)
567 %{_prefix}/src/*/%{kver_dbug}/*
568
569 %post debug
570 if [ -f /boot/System.map-%{kver_dbug} ]; then
571         /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
572 else
573         /sbin/depmod -a || exit 0
574 fi
575
576 %postun debug
577 if [ -f /boot/System.map-%{kver_dbug} ]; then
578         /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
579 else
580         /sbin/depmod -a || exit 0
581 fi
582
583 %endif