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.
6 # kdir: Full path to the kernel source headers
7 # kobj: Full path to the kernel build objects
9 # kpkg: Kernel package name
10 # kdevpkg: Kernel devel package name
11 # kverpkg: Kernel package version
13 %if %{defined require_kver}
14 %define kver %{require_kver}
17 %if %{defined require_kdir}
18 %define kdir %{require_kdir}
21 %if %{defined require_kobj}
22 %define kobj %{require_kobj}
25 # Set using 'rpmbuild ... --with kernel ...', defaults to enabled.
26 %if %{defined _with_kernel}
29 %if %{defined _without_kernel}
36 # Set using 'rpmbuild ... --with kernel-debug ...', defaults to disabled.
37 %if %{defined _with_kernel_debug}
38 %define with_kernel_debug 1
40 %if %{defined _without_kernel_debug}
41 %define with_kernel_debug 0
43 %define with_kernel_debug 0
47 # Set using 'rpmbuild ... --with kernel-dkms ...', defaults to disabled.
48 %if %{defined _with_kernel_dkms}
49 %define with_kernel_dkms 1
51 %if %{defined _without_kernel_dkms}
52 %define with_kernel_dkms 0
54 %define with_kernel_dkms 0
58 # Set using 'rpmbuild ... --with debug ...', defaults to disabled.
59 %if %{defined _with_debug}
60 %define kdebug --enable-debug
62 %if %{defined _without_debug}
63 %define kdebug --disable-debug
65 %define kdebug --disable-debug
69 # Set using 'rpmbuild ... --with debug-log ...', defaults to enabled.
70 %if %{defined _with_debug_log}
71 %define kdebug_log --enable-debug-log
73 %if %{defined _without_debug_log}
74 %define kdebug_log --disable-debug-log
76 %define kdebug_log --enable-debug-log
80 # Set using 'rpmbuild ... --with debug-kmem ...', defaults to enabled.
81 %if %{defined _with_debug_kmem}
82 %define kdebug_kmem --enable-debug-kmem
84 %if %{defined _without_debug_kmem}
85 %define kdebug_kmem --disable-debug-kmem
87 %define kdebug_kmem --enable-debug-kmem
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
95 %if %{defined _without_debug_kmem_tracking}
96 %define kdebug_kmem_tracking --disable-debug-kmem-tracking
98 %define kdebug_kmem_tracking --disable-debug-kmem-tracking
103 %if %{defined suse_version}
104 %if %{undefined kver}
106 %define kverextra ppc64
108 %define kverextra default
111 %if %{suse_version} >= 1100
112 %define klnk %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
113 %define krelease %{klnk}/include/config/kernel.release
115 %define klnk %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
116 %define krelease %{klnk}/.kernelrelease
119 %define kver_kern %((echo X; %{__cat} %{krelease} 2>/dev/null)|tail -1)
120 %define kver_dbug %{nil}
122 %define kver_kern %{kver}
123 %define kver_dbug %{nil}
126 %if %{undefined kverextra}
127 %define kverextra %(echo %{kver_kern} | cut -f3 -d'-')
130 %define kpkg_kern kernel-%{kverextra}
131 %define kpkg_dbug %{nil}
132 %define kpkg_dkms dkms
134 %define kdevpkg_kern kernel-source
135 %define kdevpkg_dbug %{nil}
136 %define kdevpkg_dkms dkms
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
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
150 %if %{undefined kdir}
151 %define kdir_kern %{_usrsrc}/linux-%{kverpkg_kern}
152 %define kdir_dbug %{nil}
154 %define kdir_kern %{kdir}
155 %define kdir_dbug %{nil}
158 %if %{undefined kobj}
159 %define kobj_kern %{kdir_kern}-obj/%{_target_cpu}/%{kverextra}
160 %define kobj_dbug %{nil}
162 %define kobj_kern %{kobj}
163 %define kobj_dbug %{nil}
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)
176 %define kver_kern %{kver}
177 %define kver_dbug %{kver}.debug
180 %define kpkg_kern kernel
181 %define kpkg_dbug kernel-debug
182 %define kpkg_dkms dkms
184 %define kdevpkg_kern kernel-devel
185 %define kdevpkg_dbug kernel-debug-devel
186 %define kdevpkg_dkms dkms
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')
193 %define kverpkg_kern %{kver_kern}
194 %define kverpkg_dbug %{kver_dbug}
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}
204 %define kdir_kern %{_usrsrc}/kernels/%{kver_kern}-%{_target_cpu}
205 %define kdir_dbug %{_usrsrc}/kernels/%{kver_dbug}-%{_target_cpu}
208 %define kdir_kern %{kdir}
209 %define kdir_dbug %{kdir}.debug
212 %if %{undefined kobj}
213 %define kobj_kern %{kdir_kern}
214 %define kobj_dbug %{kdir_dbug}
216 %define kobj_kern %{kobj}
217 %define kobj_dbug %{kobj}.debug
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)
230 %define kver_kern %{kver}
231 %define kver_dbug %{kver}.debug
234 %define kpkg_kern kernel
235 %define kpkg_dbug kernel-debug
236 %define kpkg_dkms dkms
238 %define kdevpkg_kern kernel-devel
239 %define kdevpkg_dbug kernel-debug-devel
240 %define kdevpkg_dkms dkms
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')
248 %if %{undefined kdir}
249 %define kdir_kern %{_usrsrc}/kernels/%{kver_kern}
250 %define kdir_dbug %{_usrsrc}/kernels/%{kver_dbug}
252 %define kdir_kern %{kdir}
253 %define kdir_dbug %{kdir}.debug
256 %if %{undefined kobj}
257 %define kobj_kern %{kdir_kern}
258 %define kobj_dbug %{kdir_dbug}
260 %define kobj_kern %{kobj}
261 %define kobj_dbug %{kobj}.debug
265 # Unsupported distro:
266 %if %{undefined kver}
267 %define kver_kern %(uname -r)
268 %define kver_dbug %{nil}
270 %define kver_kern %{kver}
271 %define kver_dbug %{nil}
274 %define kverpkg_kern %{kver_kern}
275 %define kverpkg_dbug %{nil}
276 %define kverpkg_dkms %{nil}
278 %if %{undefined kdir}
279 %define kdir_kern /lib/modules/%{kver_kern}/build
280 %define kdir_dbug %{nil}
282 %define kdir_kern %{kdir}
283 %define kdir_dbug %{nil}
286 %if %{undefined kobj}
287 %define kobj_kern %{kdir_kern}
288 %define kobj_dbug %{nil}
290 %define kobj_kern %{kobj}
291 %define kobj_dbug %{nil}
299 %define name @PACKAGE@-modules
300 %define version @VERSION@
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}
313 %if %{defined kpkg_dbug}
314 %define req_dbug %{kpkg_dbug}
316 %if %{defined kpkg_dkms}
317 %define req_dkms %{kpkg_dkms}
319 %if %{defined kdevpkg_kern}
320 %define devreq_kern %{kdevpkg_kern}
322 %if %{defined kdevpkg_dbug}
323 %define devreq_dbug %{kdevpkg_dbug}
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}
334 %if %{defined kpkg_dbug}
335 %define req_dbug %{kpkg_dbug} %{koppkg} %{kverpkg_dbug}
337 %if %{defined kpkg_dkms}
338 %define req_dkms %{kpkg_dkms} >= %{kverpkg_dkms}
340 %if %{defined kdevpkg_kern}
341 %define devreq_kern %{kdevpkg_kern} %{koppkg} %{kverpkg_kern}
343 %if %{defined kdevpkg_dbug}
344 %define devreq_dbug %{kdevpkg_dbug} %{koppkg} %{kverpkg_dbug}
349 Summary: Solaris Porting Layer Modules
350 Group: Utilities/System
355 URL: git://github.com/zfsonlinux/spl.git
356 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
357 Source: @PACKAGE@-%{version}.tar.gz
361 %if %{defined req_kern}
362 Requires: %{req_kern}
364 %if %{defined kdevpkg_kern}
365 BuildRequires: %{kdevpkg_kern}
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.
379 Summary: Solaris Porting Layer Headers and Symbols
380 Group: Development/Libraries
382 %if %{defined devreq_kern}
383 Requires: %{devreq_kern}
385 %if %{defined kdevpkg_kern}
386 BuildRequires: %{kdevpkg_kern}
390 The %{name}-devel package contains the header files and Module{s}.symvers
391 symbols needed for building additional modules which use %{name}.
394 %if %{?with_kernel_debug}
397 Summary: Solaris Porting Layer Debug Modules
398 Group: Utilities/System
400 %if %{defined req_dbug}
401 Requires: %{req_dbug}
403 %if %{defined kdevpkg_dbug}
404 BuildRequires: %{kdevpkg_dbug}
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.
414 Summary: Solaris Porting Layer Debug Headers and Symbols
415 Group: Development/Libraries
417 %if %{defined devreq_dbug}
418 Requires: %{devreq_dbug}
420 %if %{defined kdevpkg_dbug}
421 BuildRequires: %{kdevpkg_dbug}
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
430 %if %{?with_kernel_dkms}
433 Summary: Solaris Porting Layer Modules (DKMS)
434 Group: Utilities/System
438 %if %{defined req_dkms}
439 Requires: %{req_dkms}
441 %if %{defined kdevpkg_dkms}
442 BuildRequires: %{kdevpkg_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.
456 %setup -n @PACKAGE@-%{version}
458 rm -rf $RPM_BUILD_ROOT
462 %configure --with-config=kernel \
463 --with-linux=%{kdir_kern} --with-linux-obj=%{kobj_kern} \
464 %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
466 make DESTDIR=$RPM_BUILD_ROOT install
469 %if %{?with_kernel_debug}
471 %configure --with-config=kernel \
472 --with-linux=%{kdir_dbug} --with-linux-obj=%{kobj_dbug} \
473 %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
475 make DESTDIR=$RPM_BUILD_ROOT install
478 %if %{?with_kernel_dkms}
480 %configure --with-config=kernel \
481 %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
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}
490 rm -rf $RPM_BUILD_ROOT
495 %defattr(-, root, root)
496 /lib/modules/%{kver_kern}/*
499 %defattr(-,root,root)
500 %{_prefix}/src/*/%{kver_kern}
503 if [ -f /boot/System.map-%{kver_kern} ]; then
504 /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
506 /sbin/depmod -a || exit 0
510 if [ -f /boot/System.map-%{kver_kern} ]; then
511 /sbin/depmod -ae -F /boot/System.map-%{kver_kern} %{kver_kern} || exit 0
513 /sbin/depmod -a || exit 0
517 rmdir %{_prefix}/src/@PACKAGE@-%{version}-@SPL_META_RELEASE@ 2>/dev/null
521 %if %{?with_kernel_debug}
524 %defattr(-, root, root)
525 /lib/modules/%{kver_dbug}/*
528 %defattr(-,root,root)
529 %{_prefix}/src/*/%{kver_dbug}
532 if [ -f /boot/System.map-%{kver_dbug} ]; then
533 /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
535 /sbin/depmod -a || exit 0
539 if [ -f /boot/System.map-%{kver_dbug} ]; then
540 /sbin/depmod -ae -F /boot/System.map-%{kver_dbug} %{kver_dbug} || exit 0
542 /sbin/depmod -a || exit 0
546 rmdir %{_prefix}/src/@PACKAGE@-%{version}-@SPL_META_RELEASE@ 2>/dev/null
550 %if %{?with_kernel_dkms}
553 %defattr(-,root,root)
554 %{_prefix}/src/@PACKAGE@-%{version}
557 for POSTINST in %{_prefix}/lib/dkms/common.postinst; do
558 if [ -f $POSTINST ]; then
559 $POSTINST @PACKAGE@ %{version}
562 echo "WARNING: $POSTINST does not exist."
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."
572 echo -e "Uninstall of @PACKAGE@ module (version %{version}) beginning:"
573 dkms remove -m @PACKAGE@ -v %{version} --all --rpm_safe_upgrade