]> git.proxmox.com Git - mirror_spl-debian.git/blob - spl-modules.spec.in
d1315a27b165162f85675e266c446bfa8a4b9693
[mirror_spl-debian.git] / spl-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 kernel-dkms ...', defaults to disabled.
48 %if %{defined _with_kernel_dkms}
49 %define with_kernel_dkms 1
50 %else
51 %if %{defined _without_kernel_dkms}
52 %define with_kernel_dkms 0
53 %else
54 %define with_kernel_dkms 0
55 %endif
56 %endif
57
58 # Set using 'rpmbuild ... --with debug ...', defaults to disabled.
59 %if %{defined _with_debug}
60 %define kdebug --enable-debug
61 %else
62 %if %{defined _without_debug}
63 %define kdebug --disable-debug
64 %else
65 %define kdebug --disable-debug
66 %endif
67 %endif
68
69 # Set using 'rpmbuild ... --with debug-log ...', defaults to enabled.
70 %if %{defined _with_debug_log}
71 %define kdebug_log --enable-debug-log
72 %else
73 %if %{defined _without_debug_log}
74 %define kdebug_log --disable-debug-log
75 %else
76 %define kdebug_log --enable-debug-log
77 %endif
78 %endif
79
80 # Set using 'rpmbuild ... --with debug-kmem ...', defaults to enabled.
81 %if %{defined _with_debug_kmem}
82 %define kdebug_kmem --enable-debug-kmem
83 %else
84 %if %{defined _without_debug_kmem}
85 %define kdebug_kmem --disable-debug-kmem
86 %else
87 %define kdebug_kmem --enable-debug-kmem
88 %endif
89 %endif
90
91 # Set using 'rpmbuild ... --with debug-tracking ...', defaults to disabled.
92 %if %{defined _with_debug_kmem_tracking}
93 %define kdebug_kmem_tracking --enable-debug-kmem-tracking
94 %else
95 %if %{defined _without_debug_kmem_tracking}
96 %define kdebug_kmem_tracking --disable-debug-kmem-tracking
97 %else
98 %define kdebug_kmem_tracking --disable-debug-kmem-tracking
99 %endif
100 %endif
101
102 # SLES:
103 %if %{defined suse_version}
104 %if %{undefined kver}
105 %ifarch ppc64
106 %define kverextra ppc64
107 %else
108 %define kverextra default
109 %endif
110
111 %if %{suse_version} >= 1100
112 %define klnk %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
113 %define krelease %{klnk}/include/config/kernel.release
114 %else
115 %define klnk %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
116 %define krelease %{klnk}/.kernelrelease
117 %endif
118
119 %define kver_kern %((echo X; %{__cat} %{krelease} 2>/dev/null)|tail -1)
120 %define kver_dbug %{nil}
121 %else
122 %define kver_kern %{kver}
123 %define kver_dbug %{nil}
124 %endif
125
126 %if %{undefined kverextra}
127 %define kverextra %(echo %{kver_kern} | cut -f3 -d'-')
128 %endif
129
130 %define kpkg_kern kernel-%{kverextra}
131 %define kpkg_dbug %{nil}
132 %define kpkg_dkms dkms
133
134 %define kdevpkg_kern kernel-source
135 %define kdevpkg_dbug %{nil}
136 %define kdevpkg_dkms dkms
137
138 %define kverpkg_kern %(echo %{kver_kern} | %{__sed} -e 's/-%{kverextra}//g')
139 %define kverpkg_dbug %{nil}
140 %define kverpkg_dkms 2.2.0.2
141
142 # The kernel and rpm versions do not strictly match under SLES11
143 # e.g. kernel version 2.6.27.19-5 != rpm version 2.6.27.19-5.1
144 %if %{suse_version} >= 1100
145 %define koppkg >=
146 %else
147 %define koppkg =
148 %endif
149
150 %if %{undefined kdir}
151 %define kdir_kern %{_usrsrc}/linux-%{kverpkg_kern}
152 %define kdir_dbug %{nil}
153 %else
154 %define kdir_kern %{kdir}
155 %define kdir_dbug %{nil}
156 %endif
157
158 %if %{undefined kobj}
159 %define kobj_kern %{kdir_kern}-obj/%{_target_cpu}/%{kverextra}
160 %define kobj_dbug %{nil}
161 %else
162 %define kobj_kern %{kobj}
163 %define kobj_dbug %{nil}
164 %endif
165 %else
166
167 # RHEL 5.x/6.x, CHAOS 5.x:
168 %if %{defined el5} || %{defined el6} || %{defined ch5}
169 %if %{undefined kver}
170 %define klnk %{_usrsrc}/kernels/*/include/config
171 %define kver_kern %((echo X; ((%{__cat} %{klnk}/kernel.release
172 2>/dev/null) | %{__grep} -v debug)) | tail -1)
173 %define kver_dbug %((echo X; ((%{__cat} %{klnk}/kernel.release
174 2>/dev/null) | %{__grep} debug)) | tail -1)
175 %else
176 %define kver_kern %{kver}
177 %define kver_dbug %{kver}.debug
178 %endif
179
180 %define kpkg_kern kernel
181 %define kpkg_dbug kernel-debug
182 %define kpkg_dkms dkms
183
184 %define kdevpkg_kern kernel-devel
185 %define kdevpkg_dbug kernel-debug-devel
186 %define kdevpkg_dkms dkms
187
188 %define kverpkg_dkms 2.2.0.2
189 %if %{defined el6} || %{defined ch5}
190 %define kverpkg_kern %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
191 %define kverpkg_dbug %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
192 %else
193 %define kverpkg_kern %{kver_kern}
194 %define kverpkg_dbug %{kver_dbug}
195 %endif
196
197 %define koppkg =
198
199 %if %{undefined kdir}
200 %if %{defined el6} || %{defined ch5}
201 %define kdir_kern %{_usrsrc}/kernels/%{kver_kern}
202 %define kdir_dbug %{_usrsrc}/kernels/%{kver_dbug}
203 %else
204 %define kdir_kern %{_usrsrc}/kernels/%{kver_kern}-%{_target_cpu}
205 %define kdir_dbug %{_usrsrc}/kernels/%{kver_dbug}-%{_target_cpu}
206 %endif
207 %else
208 %define kdir_kern %{kdir}
209 %define kdir_dbug %{kdir}.debug
210 %endif
211
212 %if %{undefined kobj}
213 %define kobj_kern %{kdir_kern}
214 %define kobj_dbug %{kdir_dbug}
215 %else
216 %define kobj_kern %{kobj}
217 %define kobj_dbug %{kobj}.debug
218 %endif
219 %else
220
221 # Fedora:
222 %if %{defined fedora}
223 %if %{undefined kver}
224 %define klnk %{_usrsrc}/kernels/*/include/config
225 %define kver_kern %((echo X; ((%{__cat} %{klnk}/kernel.release
226 2>/dev/null) | %{__grep} -v debug)) | tail -1)
227 %define kver_dbug %((echo X; ((%{__cat} %{klnk}/kernel.release
228 2>/dev/null) | %{__grep} debug)) | tail -1)
229 %else
230 %define kver_kern %{kver}
231 %define kver_dbug %{kver}.debug
232 %endif
233
234 %define kpkg_kern kernel
235 %define kpkg_dbug kernel-debug
236 %define kpkg_dkms dkms
237
238 %define kdevpkg_kern kernel-devel
239 %define kdevpkg_dbug kernel-debug-devel
240 %define kdevpkg_dkms dkms
241
242 %define kverpkg_dkms 2.2.0.2
243 %define kverpkg_kern %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
244 %define kverpkg_dbug %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
245
246 %define koppkg =
247
248 %if %{undefined kdir}
249 %define kdir_kern %{_usrsrc}/kernels/%{kver_kern}
250 %define kdir_dbug %{_usrsrc}/kernels/%{kver_dbug}
251 %else
252 %define kdir_kern %{kdir}
253 %define kdir_dbug %{kdir}.debug
254 %endif
255
256 %if %{undefined kobj}
257 %define kobj_kern %{kdir_kern}
258 %define kobj_dbug %{kdir_dbug}
259 %else
260 %define kobj_kern %{kobj}
261 %define kobj_dbug %{kobj}.debug
262 %endif
263 %else
264
265 # Unsupported distro:
266 %if %{undefined kver}
267 %define kver_kern %(uname -r)
268 %define kver_dbug %{nil}
269 %else
270 %define kver_kern %{kver}
271 %define kver_dbug %{nil}
272 %endif
273
274 %define kverpkg_kern %{kver_kern}
275 %define kverpkg_dbug %{nil}
276 %define kverpkg_dkms %{nil}
277
278 %if %{undefined kdir}
279 %define kdir_kern /lib/modules/%{kver_kern}/build
280 %define kdir_dbug %{nil}
281 %else
282 %define kdir_kern %{kdir}
283 %define kdir_dbug %{nil}
284 %endif
285
286 %if %{undefined kobj}
287 %define kobj_kern %{kdir_kern}
288 %define kobj_dbug %{nil}
289 %else
290 %define kobj_kern %{kobj}
291 %define kobj_dbug %{nil}
292 %endif
293
294 %endif
295 %endif
296 %endif
297
298 # Distro agnostic:
299 %define name @PACKAGE@-modules
300 %define version @VERSION@
301
302 # The kernel version should only be appended to a binary RPM. When
303 # building a source RPM it must be kernel version agnostic. This means
304 # the source RPM must never specify a required kernel version, but the
305 # final RPM should be keyed to the kernel version it was built against.
306 %if %{defined build_src_rpm}
307 %define rel_kern @SPL_META_RELEASE@
308 %define rel_dbug @SPL_META_RELEASE@
309 %define rel_dkms @SPL_META_RELEASE@
310 %if %{defined kpkg_kern}
311 %define req_kern %{kpkg_kern}
312 %endif
313 %if %{defined kpkg_dbug}
314 %define req_dbug %{kpkg_dbug}
315 %endif
316 %if %{defined kpkg_dkms}
317 %define req_dkms %{kpkg_dkms}
318 %endif
319 %if %{defined kdevpkg_kern}
320 %define devreq_kern %{kdevpkg_kern}
321 %endif
322 %if %{defined kdevpkg_dbug}
323 %define devreq_dbug %{kdevpkg_dbug}
324 %endif
325 %else
326 %define relext_kern %(echo %{kverpkg_kern} | %{__sed} -e 's/-/_/g')
327 %define relext_dbug %(echo %{kverpkg_dbug} | %{__sed} -e 's/-/_/g')
328 %define rel_kern @SPL_META_RELEASE@_%{relext_kern}
329 %define rel_dbug @SPL_META_RELEASE@_%{relext_dbug}
330 %define rel_dkms @SPL_META_RELEASE@
331 %if %{defined kpkg_kern}
332 %define req_kern %{kpkg_kern} %{koppkg} %{kverpkg_kern}
333 %endif
334 %if %{defined kpkg_dbug}
335 %define req_dbug %{kpkg_dbug} %{koppkg} %{kverpkg_dbug}
336 %endif
337 %if %{defined kpkg_dkms}
338 %define req_dkms %{kpkg_dkms} >= %{kverpkg_dkms}
339 %endif
340 %if %{defined kdevpkg_kern}
341 %define devreq_kern %{kdevpkg_kern} %{koppkg} %{kverpkg_kern}
342 %endif
343 %if %{defined kdevpkg_dbug}
344 %define devreq_dbug %{kdevpkg_dbug} %{koppkg} %{kverpkg_dbug}
345 %endif
346 %endif
347
348
349 Summary: Solaris Porting Layer Modules
350 Group: Utilities/System
351 Name: %{name}
352 Version: %{version}
353 Release: %{rel_kern}
354 License: @LICENSE@
355 URL: git://github.com/zfsonlinux/spl.git
356 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
357 Source: @PACKAGE@-%{version}.tar.gz
358
359 %if %{?with_kernel}
360
361 %if %{defined req_kern}
362 Requires: %{req_kern}
363 %endif
364 %if %{defined kdevpkg_kern}
365 BuildRequires: %{kdevpkg_kern}
366 %endif
367
368 %endif
369
370 %description
371 The %{name} package contains kernel modules for emulating Solaris style
372 primatives in the linux kernel. These include, but are not limited to:
373 atomic, condvar, debug, error, memory, kobject, kstat, mutex, rwlock,
374 taskq, thread, time, and vnode APIs.
375
376 %if %{?with_kernel}
377
378 %package devel
379 Summary: Solaris Porting Layer Headers and Symbols
380 Group: Development/Libraries
381 Release: %{rel_kern}
382 %if %{defined devreq_kern}
383 Requires: %{devreq_kern}
384 %endif
385 %if %{defined kdevpkg_kern}
386 BuildRequires: %{kdevpkg_kern}
387 %endif
388
389 %description devel
390 The %{name}-devel package contains the header files and Module{s}.symvers
391 symbols needed for building additional modules which use %{name}.
392
393 %endif
394 %if %{?with_kernel_debug}
395
396 %package debug
397 Summary: Solaris Porting Layer Debug Modules
398 Group: Utilities/System
399 Release: %{rel_dbug}
400 %if %{defined req_dbug}
401 Requires: %{req_dbug}
402 %endif
403 %if %{defined kdevpkg_dbug}
404 BuildRequires: %{kdevpkg_dbug}
405 %endif
406
407 %description debug
408 The %{name}-debug package contains kernel modules for emulating Solaris
409 style primatives in the linux kernel. These include, but are not limited
410 to: atomic, condvar, debug, error, memory, kobject, kstat, mutex,
411 rwlock, taskq, thread, time, and vnode APIs.
412
413 %package debug-devel
414 Summary: Solaris Porting Layer Debug Headers and Symbols
415 Group: Development/Libraries
416 Release: %{rel_dbug}
417 %if %{defined devreq_dbug}
418 Requires: %{devreq_dbug}
419 %endif
420 %if %{defined kdevpkg_dbug}
421 BuildRequires: %{kdevpkg_dbug}
422 %endif
423
424 %description debug-devel
425 The %{name}-debug-devel package contains the header files and
426 Module{s}.symvers symbols needed for building additional modules which
427 use %{name}-debug.
428
429 %endif
430 %if %{?with_kernel_dkms}
431
432 %package dkms
433 Summary: Solaris Porting Layer Modules (DKMS)
434 Group: Utilities/System
435 Release: %{rel_dkms}
436 Provides: %{name}
437 BuildArch: noarch
438 %if %{defined req_dkms}
439 Requires: %{req_dkms}
440 %endif
441 %if %{defined kdevpkg_dkms}
442 BuildRequires: %{kdevpkg_dkms}
443 %endif
444
445 %description dkms
446 The %{name}-dkms package contains all the necessary pieces to build and
447 install Solaris Porting Layer (SPL) kernel modules with Dynamic Kernel
448 Modules Support (DKMS). The SPL modules emulate Solaris style primatives
449 in the the linux kernel. They include, but are not limited to: atomic,
450 condvar, debug, error, memory, kobject, kstat, mutex, rwlock, taskq,
451 thread, time, and vnode APIs.
452
453 %endif
454
455 %prep
456 %setup -n @PACKAGE@-%{version}
457 %build
458 rm -rf $RPM_BUILD_ROOT
459
460 %if %{?with_kernel}
461
462 %configure --with-config=kernel \
463 --with-linux=%{kdir_kern} --with-linux-obj=%{kobj_kern} \
464 %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
465 make
466 make DESTDIR=$RPM_BUILD_ROOT install
467
468 %endif
469 %if %{?with_kernel_debug}
470
471 %configure --with-config=kernel \
472 --with-linux=%{kdir_dbug} --with-linux-obj=%{kobj_dbug} \
473 %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
474 make
475 make DESTDIR=$RPM_BUILD_ROOT install
476
477 %endif
478 %if %{?with_kernel_dkms}
479
480 %configure --with-config=kernel \
481 %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
482 make dist
483 mkdir -p $RPM_BUILD_ROOT/%{_prefix}/src
484 tar -xf @PACKAGE@-%{version}.tar.gz -C $RPM_BUILD_ROOT/%{_prefix}/src
485 cp -af dkms.conf $RPM_BUILD_ROOT/%{_prefix}/src/@PACKAGE@-%{version}
486
487 %endif
488
489 %clean
490 rm -rf $RPM_BUILD_ROOT
491
492 %if %{?with_kernel}
493
494 %files
495 %defattr(-, root, root)
496 /lib/modules/%{kver_kern}/*
497
498 %files devel
499 %defattr(-,root,root)
500 %{_prefix}/src/*/%{kver_kern}
501
502 %post
503 if [ -f /boot/System.map-%{kver_kern} ]; then
504 /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
505 else
506 /sbin/depmod -a || exit 0
507 fi
508
509 %postun
510 if [ -f /boot/System.map-%{kver_kern} ]; then
511 /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
512 else
513 /sbin/depmod -a || exit 0
514 fi
515
516 %postun devel
517 rmdir %{_prefix}/src/@PACKAGE@-%{version}-@SPL_META_RELEASE@ 2>/dev/null
518 exit 0
519
520 %endif
521 %if %{?with_kernel_debug}
522
523 %files debug
524 %defattr(-, root, root)
525 /lib/modules/%{kver_dbug}/*
526
527 %files debug-devel
528 %defattr(-,root,root)
529 %{_prefix}/src/*/%{kver_dbug}
530
531 %post debug
532 if [ -f /boot/System.map-%{kver_dbug} ]; then
533 /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
534 else
535 /sbin/depmod -a || exit 0
536 fi
537
538 %postun debug
539 if [ -f /boot/System.map-%{kver_dbug} ]; then
540 /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
541 else
542 /sbin/depmod -a || exit 0
543 fi
544
545 %postun debug-devel
546 rmdir %{_prefix}/src/@PACKAGE@-%{version}-@SPL_META_RELEASE@ 2>/dev/null
547 exit 0
548
549 %endif
550 %if %{?with_kernel_dkms}
551
552 %files dkms
553 %defattr(-,root,root)
554 %{_prefix}/src/@PACKAGE@-%{version}
555
556 %post dkms
557 for POSTINST in %{_prefix}/lib/dkms/common.postinst; do
558 if [ -f $POSTINST ]; then
559 $POSTINST @PACKAGE@ %{version}
560 exit $?
561 fi
562 echo "WARNING: $POSTINST does not exist."
563 done
564 echo -e "ERROR: DKMS version is too old and @PACKAGE@ was not"
565 echo -e "built with legacy DKMS support."
566 echo -e "You must either rebuild @PACKAGE@ with legacy postinst"
567 echo -e "support or upgrade DKMS to a more current version."
568 exit 1
569
570 %preun dkms
571 echo -e
572 echo -e "Uninstall of @PACKAGE@ module (version %{version}) beginning:"
573 dkms remove -m @PACKAGE@ -v %{version} --all --rpm_safe_upgrade
574 exit 0
575
576 %endif