diff --git a/rpm/fedora/zfs-kmod.spec.in b/rpm/fedora/zfs-kmod.spec.in deleted file mode 100644 index 88ab3b24b1..0000000000 --- a/rpm/fedora/zfs-kmod.spec.in +++ /dev/null @@ -1,140 +0,0 @@ -%define module @PACKAGE@ -%define repo rpmfusion - -%define buildforkernels newest -#define buildforkernels current -#define buildforkernels akmod - -%bcond_with debug -%bcond_with debug_dmu_tx - - -Name: %{module}-kmod - -Version: @VERSION@ -Release: @RELEASE@%{?dist} -Summary: Kernel module(s) - -Group: System Environment/Kernel -License: @ZFS_META_LICENSE@ -URL: http://zfsonlinux.org/ -Source0: %{module}-%{version}.tar.gz -Source10: kmodtool -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -ExclusiveArch: i586 i686 x86_64 - -# Likely compiles but is not supported. -ExcludeArch: ppc ppc64 - -# The developments headers will conflict with the dkms packages. -Conflicts: %{module}-dkms - -BuildRequires: %{_bindir}/kmodtool -BuildRequires: spl-devel-kmod = %{version}-%{release} - -%global KmodsBuildRequires spl-devel-kmod -%global KmodsRequires kmod-spl - -%{!?kernels:BuildRequires: buildsys-build-rpmfusion-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu} } - -%if 0%{?fedora} >= 17 -%define prefix /usr -%endif - -# Kmodtool does its magic here. A patched version of kmodtool is shipped -# with the source rpm until kmod development packages are supported upstream. -# https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714 -%{expand:%(sh %{SOURCE10} --target %{_target_cpu} --repo %{repo} --kmodname %{name} --devel %{?prefix:--prefix "%{?prefix}"} %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } - - -%description -This package contains the ZFS kernel modules. - -%prep -# Error out if there was something wrong with kmodtool. -%{?kmodtool_check} - -# Print kmodtool output for debugging purposes: -sh %{SOURCE10} --target %{_target_cpu} --repo %{repo} --kmodname %{name} --devel %{?buildforkernels:--%{buildforkernels}} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null - -%if %{with debug} - %define debug --enable-debug -%else - %define debug --disable-debug -%endif - -%if %{with debug_dmu_tx} - %define debug_dmu_tx --enable-debug-dmu-tx -%else - %define debug_dmu_tx --disable-debug-dmu-tx -%endif - -# -# Allow the overriding of spl locations -# -%if %{defined require_splver} -%define splver %{require_splver} -%else -%define splver %{version} -%endif - -%if %{defined require_spldir} -%define spldir %{require_spldir} -%else -%define spldir %{_usrsrc}/spl-%{splver} -%endif - -%if %{defined require_splobj} -%define splobj %{require_splobj} -%else -%define splobj %{spldir}/${kernel_version%%___*} -%endif - - -# Leverage VPATH from configure to avoid making multiple copies. -%define _configure ../%{module}-%{version}/configure - -%setup -q -c -T -a 0 - -for kernel_version in %{?kernel_versions}; do - %{__mkdir} _kmod_build_${kernel_version%%___*} -done - -%build -for kernel_version in %{?kernel_versions}; do - pushd _kmod_build_${kernel_version%%___*} - %configure \ - --with-config=kernel \ - --with-linux="${kernel_version##*___}" \ - --with-linux-obj="${kernel_version##*___}" \ - --with-spl="%{spldir}" \ - --with-spl-obj="%{splobj}" \ - %{debug} \ - %{debug_dmu_tx} - make %{?_smp_mflags} - popd -done - - -%install -rm -rf ${RPM_BUILD_ROOT} - -# Relies on the kernel 'modules_install' make target. -for kernel_version in %{?kernel_versions}; do - pushd _kmod_build_${kernel_version%%___*} - make install \ - DESTDIR=${RPM_BUILD_ROOT} \ - %{?prefix:INSTALL_MOD_PATH=%{?prefix}} \ - INSTALL_MOD_DIR=%{kmodinstdir_postfix} - popd -done -chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/*/* -%{?akmod_install} - - -%clean -rm -rf $RPM_BUILD_ROOT - -%changelog -* Fri Mar 22 2013 Brian Behlendorf - 0.6.1-1 -- First official stable release. diff --git a/rpm/fedora/zfs-kmod.spec.in b/rpm/fedora/zfs-kmod.spec.in new file mode 120000 index 0000000000..af19ecde00 --- /dev/null +++ b/rpm/fedora/zfs-kmod.spec.in @@ -0,0 +1 @@ +../generic/zfs-kmod.spec.in \ No newline at end of file diff --git a/rpm/generic/zfs-kmod.spec.in b/rpm/generic/zfs-kmod.spec.in index cec3f3f71d..2ea4bcb0ba 100644 --- a/rpm/generic/zfs-kmod.spec.in +++ b/rpm/generic/zfs-kmod.spec.in @@ -1,4 +1,11 @@ %define module @PACKAGE@ +#define repo rpmfusion +#define repo chaos + +# (un)define the next line to either build for the newest or all current kernels +%define buildforkernels newest +#define buildforkernels current +#define buildforkernels akmod %bcond_with debug %bcond_with debug_dmu_tx @@ -20,18 +27,20 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n) # The developments headers will conflict with the dkms packages. Conflicts: %{module}-dkms -# Source packages minimally require a kernel-devel dependency. +%if %{defined repo} + +# Building for a repository use the proper build-sysbuild package +# to determine which kernel-devel packages should be installed. +BuildRequires: %{_bindir}/kmodtool +%{!?kernels:BuildRequires: buildsys-build-%{repo}-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu}} + +%else + +# Building local packages attempt to to use the installed kernel. %{?rhel:BuildRequires: kernel-devel} %{?fedora:BuildRequires: kernel-devel} %{?suse_version:BuildRequires: kernel-source} -%if 0%{?rhel}%{?fedora}%{?suse_version} -BuildRequires: spl-devel-kmod = %{version} -%global KmodsBuildRequires spl-devel-kmod -%global KmodsRequires kmod-spl -%endif - -# Binary packages build against all installed kernels by default. %if !%{defined kernels} && !%{defined build_src_rpm} %if 0%{?rhel}%{?fedora}%{?suse_version} %define kernels %(ls -1 /usr/src/kernels) @@ -39,6 +48,14 @@ BuildRequires: spl-devel-kmod = %{version} %define kernels %(ls -1 /lib/modules) %endif %endif +%endif + +%if 0%{?rhel}%{?fedora}%{?suse_version} +BuildRequires: kmod-spl-devel = %{version} +%global KmodsRequires kmod-spl +%global KmodsDevelRequires kmod-spl-devel +%global KmodsMetaRequires spl-kmod +%endif %if 0%{?fedora} >= 17 %define prefix /usr @@ -47,7 +64,7 @@ BuildRequires: spl-devel-kmod = %{version} # Kmodtool does its magic here. A patched version of kmodtool is shipped # with the source rpm until kmod development packages are supported upstream. # https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714 -%{expand:%(bash %{SOURCE10} --target %{_target_cpu} --kmodname %{name} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } +%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } %description @@ -58,7 +75,7 @@ This package contains the ZFS kernel modules. %{?kmodtool_check} # Print kmodtool output for debugging purposes: -bash %{SOURCE10} --target %{_target_cpu} --repo %{repo} --kmodname %{name} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null +bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null %if %{with debug} %define debug --enable-debug diff --git a/scripts/kmodtool b/scripts/kmodtool index 6b73780980..852ade021d 100755 --- a/scripts/kmodtool +++ b/scripts/kmodtool @@ -155,9 +155,6 @@ Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} Requires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version} Requires(post): ${prefix}/sbin/depmod Requires(postun): ${prefix}/sbin/depmod -%{?KmodsRequires:Requires: %{KmodsRequires}-uname-r = ${kernel_uname_r}} -%{?KmodsBuildRequires:BuildRequires: %{KmodsBuildRequires}-uname-r = ${kernel_uname_r}} -%{?KmodsBuildRequires:BuildRequires: %{KmodsBuildRequires}} EOF if [[ ${obsolete_name} ]]; then @@ -170,6 +167,8 @@ EOF cat < /dev/null || : %postun -n kmod-${kmodname}-${kernel_uname_r} @@ -202,15 +201,38 @@ EOF print_rpmtemplate_kmoddevelpkg () { + if [[ "${1}" == "--custom" ]]; then + shift + local customkernel=true + elif [[ "${1}" == "--redhat" ]]; then + shift + local redhatkernel=true + fi + + local kernel_uname_r=${1} + cat <= %{?epoch:%{epoch}:}%{version}-%{release}" + fi + + if [[ ${obsolete_name} ]]; then + echo "Provides: kmod-${obsolete_name}-devel = ${obsolete_version}" + echo "Obsoletes: kmod-${obsolete_name}-devel < ${obsolete_version}" + fi + + cat < objects for the newest kernel. + %files -n kmod-${kmodname}-devel %defattr(644,root,root,755) %{_usrsrc}/${kmodname}-%{version} @@ -239,23 +261,32 @@ print_rpmtemplate_per_kmoddevelpkg () local kernel_uname_r=${1} local kernel_variant="${2:+-${2}}" + # first part cat <= %{?epoch:%{epoch}:}%{version}-%{release} +%{?KmodsMetaRequires:Requires: %{?KmodsMetaRequires}} EOF - + if [[ ${obsolete_name} ]]; then echo "Provides: kmod-${obsolete_name}${kernel_variant} = ${obsolete_version}" echo "Obsoletes: kmod-${obsolete_name}${kernel_variant} < ${obsolete_version}" @@ -316,6 +348,10 @@ print_customrpmtemplate () # create development package if [[ "${devel}" ]]; then + # create devel package including common headers + print_rpmtemplate_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}} + + # create devel package print_rpmtemplate_per_kmoddevelpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}} fi elif [[ -e ${prefix}/lib/modules/"${kernel}"/build/Makefile ]] ; then @@ -327,6 +363,10 @@ print_customrpmtemplate () # create development package if [[ "${devel}" ]]; then + # create devel package including common headers + print_rpmtemplate_kmoddevelpkg --custom "${kernel}" + + # create devel package print_rpmtemplate_per_kmoddevelpkg --custom "${kernel}" fi else @@ -334,11 +374,6 @@ print_customrpmtemplate () fi done - # create common development package - if [[ "${devel}" ]]; then - print_rpmtemplate_kmoddevelpkg "${1}" - fi - # well, it's no header anymore, but who cares ;-) print_rpmtemplate_header } @@ -366,16 +401,14 @@ print_rpmtemplate () # create package print_rpmtemplate_per_kmodpkg ${kernel} ${kernel##${kernel_verrelarch}} - # create development package if [[ "${devel}" ]]; then + # create devel package including common headers + print_rpmtemplate_kmoddevelpkg ${kernel} ${kernel##${kernel_verrelarch}} + + # create devel package print_rpmtemplate_per_kmoddevelpkg ${kernel} ${kernel##${kernel_verrelarch}} fi done - - # create common development package - if [[ "${devel}" ]]; then - print_rpmtemplate_kmoddevelpkg "${1}" - fi } myprog_help ()