From 1c834f1450daaf1d30c070a80eabdc24a230020b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Wed, 10 Dec 2014 21:37:40 +0100 Subject: [PATCH] - split all kernel macros to separate file and install it in place of one provided by rpm - 1.699 --- rpm-build-macros.spec | 8 +- rpm.macros | 300 -------------------------------------- rpm.macros.kernel | 329 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 335 insertions(+), 302 deletions(-) create mode 100644 rpm.macros.kernel diff --git a/rpm-build-macros.spec b/rpm-build-macros.spec index 71d22ca..5003f83 100644 --- a/rpm-build-macros.spec +++ b/rpm-build-macros.spec @@ -1,4 +1,4 @@ -%define rpm_macros_rev 1.698 +%define rpm_macros_rev 1.699 %define find_lang_rev 1.36 Summary: PLD Linux RPM build macros Summary(pl.UTF-8): Makra do budowania pakietów RPM dla Linuksa PLD @@ -71,8 +71,11 @@ fi %install rm -rf $RPM_BUILD_ROOT -install -d $RPM_BUILD_ROOT%{_usrlibrpm} +install -d $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d + cp -a rpm.macros $RPM_BUILD_ROOT%{_usrlibrpm}/macros.build +cp -a rpm.macros.kernel $RPM_BUILD_ROOT%{_usrlibrpm}/macros.d/kernel + install -p service_generator.sh $RPM_BUILD_ROOT%{_usrlibrpm} install -p %{SOURCE3} $RPM_BUILD_ROOT%{_usrlibrpm}/find-lang.sh install -p %{SOURCE4} $RPM_BUILD_ROOT%{_usrlibrpm} @@ -83,6 +86,7 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(644,root,root,755) %{_usrlibrpm}/macros.build +%{_usrlibrpm}/macros.d/kernel %attr(755,root,root) %{_usrlibrpm}/service_generator.sh %attr(755,root,root) %{_usrlibrpm}/find-lang.sh %attr(755,root,root) %{_usrlibrpm}/dokuwiki-find-lang.sh diff --git a/rpm.macros b/rpm.macros index b957110..52c191a 100644 --- a/rpm.macros +++ b/rpm.macros @@ -450,48 +450,6 @@ LINKFLAGS="%{rpmldflags}" \ # and release 0.zzz.bootstrap if built with bootstrap %bootstrap_release() %{!?with_bootstrap:%{1}%{?2:.%{2}}}%{?with_bootstrap:%{!?2:%(expr %{1} - 1)}%{?2:%{1}.%(expr %{2} - 1)}.zzz.bootstrap} -# Alternative kernel type/version -%_alt_kernel %{nil}%{?alt_kernel:-%{?alt_kernel}} - -# The directory holding Linux kernel sources -%_kernelsrcdir /usr/src/linux%{_alt_kernel} - -# rpm -qf on kernel version.h file -%__kernel_qf() %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%*' -f include/linux/version.h 2>/dev/null | grep -v 'is not'); echo ${R:-ERROR}) - -# kernel %{name} and kernel %{epoch}:%{version}-%{release} macro respecing alt_kernel -%kernel_name %(N=%{__kernel_qf %{N}}; echo ${N%%-headers}) -%kernel_version %{__kernel_qf %|E?{%{E}:}|%{V}-%{R}} - -# -n drm to generate kernel%{_alt_kernel}-drm dependency -%releq_kernel(n:) %{kernel_name}%{?-n:-%{-n*}} = %{kernel_version} -%releq_kernel_up(n:) %{kernel_name}-up%{?-n:-%{-n*}} = %{kernel_version} -%releq_kernel_smp(n:) %{kernel_name}-smp%{?-n:-%{-n*}} = %{kernel_version} - -# -s post to generate Requires(post) dependency -%requires_releq_kernel(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel -%requires_releq_kernel_up(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_up -%requires_releq_kernel_smp(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_smp - -# kernel version-release handling -%__kernel_ver %( \\ - Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\ - Z=${Z:-$(awk -F' = ' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END {printf("%d.%d.%d%s", v, p, s, e)}' %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\ - echo ${Z:-ERROR}; \\ -) - -%_kernel_version_code %( \\ - Z=$(awk '/LINUX_VERSION_CODE/{print $3}' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null); \\ - echo ${Z:-ERROR}; \\ -) - -%_kernel_version_magic() %(echo $((%{1} * 65536 + %{2} * 256 + %{3}))) - -# `uname -r` used for building/installing kernel modules -%_kernel_ver %{__kernel_ver}%{!?_without_dist_kernel:%(echo %{__kernel_ver} | grep -q -e - || echo -%{__kernel_qf %{R}})} -# package version OR `uname -r` for non-dist kernel to be used in @release field -%_kernel_ver_str %(echo %{!?_without_dist_kernel:%{__kernel_qf %{V}-%{R}}}%{?_without_dist_kernel:%{__kernel_ver}} | tr '-' '_') - # Requires name = version-release %requires_releq() %{!?1:ERROR}%{?2:ERROR}%{?1:%{!?2:%{expand:%%requires_eq_to -r %1 %1}}} # Requires: name = version @@ -766,27 +724,6 @@ __spec_install_post_check_tmpfiles() { \ %{!?no_install_post_check_tmpfiles:return $fail;} \ }; __spec_install_post_check_tmpfiles }} -#----------------------------------------------------------------- -# Find and gzip all kernel modules -# -# Requires: find -# -#%no_install_post_compress_modules 1 -%__spec_install_post_compress_modules { \ -%{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \ -%{!?debug:set +x;} \ - if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \ - q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \ - if [ "$q" ]; then \ - printf "Compress %d kernel modules..." $(echo "$q" | wc -l); \ - echo "$q" | xargs -r %{__gzip} -9nf; \ - echo "DONE"; \ - find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \ - while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \ - fi; \ - fi; \ -}; __spec_install_post_compress_modules } } - # Remove common Perl files we don't package %__spec_install_post_perl_clean {\ %{!?no_install_post_perl_clean: \ @@ -1718,243 +1655,6 @@ done \ %env_update [ ! -x /sbin/env-update ] || /sbin/env-update -u || : - -# Build modules for kernels 2.6 -# Author: Przemyslaw Iskra -# -# Usage: -# %build_kernel_modules -m -C -# -# remember that proper Makefile is still required -# Options: -# -m (required) -- comma-separated list of modules to save, -# without .ko extension, may be placed in subdirectory -# -C -- change to before doing anything -# -p , -P -- arguments passeed to make scripts -# -c -- do not execute make clean -# -- all additional arguments will be passed to -# make modules -# -# Additional patching supported via here document. Try: -# %build_kernel_modules -m module <<'EOF' -# your patch script here -# EOF -# Don't use it unless patching depends on config options. - -# Developer note: don't touch it unless you know how to handle '\'. -# - \ in script expands to nothing -# - \\\ in script expands to \ -# - \\\ inside definition expands to nothing -# - \\\\\\\ inside definition expands to \ -# - in last line \ has to touch arguments so arguments passing -# in new lines (using \) will be supported - -%build_kernel_modules(p:P:m:C:c) \ -%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ - \ -%define Opts \\\\\\\ -%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\ - %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ - CC="%{__cc}" ARCH=%{_target_base_arch} \\\ - %else \\\ - ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ - %endif \\\ -%else \\\ - CC="%{__cc}" \\\ -%endif \ -%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ - O=$PWD/o %{?with_verbose:V=1} %{Opts} \ - \ -%{?-C:cd %{-C*}} \ -compile() { \ - local L="<" PATCH_SH; \ - [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ - set -e -x \ - \ - [ -r "%{_kernelsrcdir}/.config" ] || exit 1 \ - rm -rf o \ - install -d o/include/linux o/include/generated o/arch/x86/include o/arch/powerpc/lib \ - ln -sf %{_kernelsrcdir}/.config o/.config \ - ln -sf %{_kernelsrcdir}/Module.symvers o/Module.symvers \ - if [ -f %{_kernelsrcdir}/include/generated/autoconf.h ]; then \ - ln -sf %{_kernelsrcdir}/include/generated/autoconf.h o/include/generated/autoconf.h \ - ln -s ../generated/autoconf.h o/include/linux/autoconf.h \ - else \ - ln -sf %{_kernelsrcdir}/include/linux/autoconf.h o/include/linux/autoconf.h \ - fi \ - if [ -d %{_kernelsrcdir}/arch/x86/include/generated ]; then \ - ln -s %{_kernelsrcdir}/arch/x86/include/generated o/arch/x86/include \ - fi \ - \ - set +x \ - [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ - set -x \ - \ - install -d o/include/config \ - touch o/include/config/MARKER \ - ln -sf %{_kernelsrcdir}/include/config/auto.conf o/include/config/auto.conf \ - ln -sf %{_kernelsrcdir}/scripts o/scripts \ - \ - %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ - RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\ - ${1+"$@"} \\\ - M=$PWD %{MakeOpts}} \ - \ - %{__make} -C %{_kernelsrcdir} modules \\\ - ${1+"$@"} \\\ - M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \ -%{?-C:cd -} \ -} \ -compile %{*} \ -%{nil} - -%build_kernel_modules_compat(p:P:m:C:c) \ -%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ - \ -%define Opts \\\\\\\ -%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\ - %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ - CC="%{__cc}" ARCH=%{_target_base_arch} \\\ - %else \\\ - ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ - %endif \\\ -%else \\\ - CC="%{__cc}" \\\ -%endif \ -%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ - O=$PWD/o %{?with_verbose:V=1} %{Opts} \ - \ -%{?-C:cd %{-C*}} \ -compile() { \ - local L="<" PATCH_SH; \ - [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ - set -e -x \ - local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ - \ -for cfg in ${cfgs:-dist}; do \ - [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \ - \ - rm -rf o \ - install -d o/include/linux o/include/generated o/arch/powerpc/lib \ - ln -sf %{_kernelsrcdir}/config-$cfg o/.config \ - ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \ - if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then \ - ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \ - ln -s ../generated/autoconf.h o/include/linux/autoconf.h \ - else \ - ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \ - fi \ - \ - set +x \ - [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ - set -x \ - \ - %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?) \ - %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\ - %{-p*} %{-P*} \\\ - %{MakeOpts} \ - %else \ - install -d o/include/config \ - touch o/include/config/MARKER \ - ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf \ - ln -sf %{_kernelsrcdir}/scripts o/scripts \ - %endif \ - \ - %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ - RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\ - ${1+"$@"} \\\ - M=$PWD %{MakeOpts}} \ - \ - %{__make} -C %{_kernelsrcdir} modules \\\ - ${1+"$@"} \\\ - M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \ - \ - for MODULE in {%{-m*},}; do \ - [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \ - done \ -done \ -%{?-C:cd -} \ -} \ -compile %{*} \ -%{nil} - - -# Install kernel modules built by %build_kernel_modules -# Author: Przemyslaw Iskra -# -# Usage: -# %install_kernel_modules -m -d -# -# Options: -# -m (required) -- comma-separated list of modules to install, -# without .ko extension, may be placed in subdirectory -# -d (required) -- in what subdirectory modules should be -# installed (eg. misc, kernel/drivers/net) -# -s -- suffix to use when installing modules, useful when module -# with same name exists in kernel already -# -n -- name of modprobe config file to use (without .conf extension) -# for defining aliases, only useful with -s -# -D -- DESTDIR, base directory for installed files, -# defaults to RPM_BUILD_ROOT - -%install_kernel_modules(m:d:s:n:D:) \ -%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ -%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ -%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ - \ -INSTALLROOT=%{-D*} \ -[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \ - \ -%define KernelD $INSTALLROOT/lib/modules/%{_kernel_ver} \ -%define ModprobeD $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ - \ -__install_kernel_modules() { \ -%{!?debug:set +x;} \ - \ -for MODULE in {%{-m*},}; do \ - [ -n "${MODULE}" ] || continue \ - MNAME=${MODULE##*/} \ - install -m 644 -D ${MODULE}.ko %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ - %{?-s:install -d %{ModprobeD} \ - echo "alias ${MNAME} ${MNAME}-%{-s*}" >> %{ModprobeD}/%{-n*}.conf} \ -done \ -} \ -__install_kernel_modules \ -unset INSTALLROOT \ -%{nil} - -%install_kernel_modules_compat(m:d:s:n:D:) \ -%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ -%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ -%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ - \ -INSTALLROOT=%{-D*} \ -[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \ - \ -%define KernelD $INSTALLROOT/lib/modules/%{_kernel_ver} \ -%define ModprobeD $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ - \ -__install_kernel_modules() { \ -%{!?debug:set +x;} \ -local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ - \ -for MODULE in {%{-m*},}; do \ - [ -n "${MODULE}" ] || continue \ - for cfg in ${cfgs:-dist}; do \ - [ "$cfg" = smp ] && suf=smp || suf= \ - MNAME=${MODULE##*/} \ - install -m 644 -D ${MODULE}-$cfg.ko \\\ - %{KernelD}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ - %{?-s:install -d %{ModprobeD}$suf \ - echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\ - >> %{ModprobeD}$suf/%{-n*}.conf} \ - done \ -done \ -} \ -__install_kernel_modules \ -unset INSTALLROOT \ -%{nil} - # patchset macros # generate SourceX urls from range START STOP # Format can be SINGLE format char of %e, %f, %g, see seq(1) diff --git a/rpm.macros.kernel b/rpm.macros.kernel new file mode 100644 index 0000000..ece9e69 --- /dev/null +++ b/rpm.macros.kernel @@ -0,0 +1,329 @@ +# vim:ts=4 sw=4 noet ft=spec +# Kernel specific macro definitions. +# To make use of these macros insert the following line into your spec file: +# %{load:%{_usrlibrpm}/macros.d/kernel} + +%__modinfo /sbin/modinfo + +# Path to scripts to autogenerate gstreamer package dependencies, +# +# Note: Used iff _use_internal_dependency_generator is non-zero. The +# helpers are also used by %{_rpmhome}/rpmdeps {--provides|--requires}. +%__kernel_provides %{_rpmhome}/kmod-deps.sh --provides --modinfo %__modinfo +#__kernel_requires %{_rpmhome}/kmod-deps.sh --requires --modinfo %__modinfo + +# Alternative kernel type/version +%_alt_kernel %{nil}%{?alt_kernel:-%{?alt_kernel}} +%_build_kernels %{nil}%{?build_kernels:%{?build_kernels}}%{!?build_kernels:%{?alt_kernel}} + +%buildrequires_kernel %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ +if [ -z "$n" -o "$n" = "head" ]; then \ +echo "BuildRequires: kernel-module-build >= 3:2.6.20.2" \ +else \ +echo "BuildRequires: kernel-$n-module-build >= 3:2.6.20.2" \ +fi; done) + +%create_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ +echo %%undefine alt_kernel \ +[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ +echo %%kernel_pkg \ +done) + +%build_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ +echo %%undefine alt_kernel \ +[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ +echo %%build_kernel_pkg \ +done) + +%install_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ +echo %%undefine alt_kernel \ +[ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ +echo %%install_kernel_pkg \ +done) + +# The directory holding Linux kernel sources +%_kernelsrcdir /usr/src/linux%{_alt_kernel} + +# rpm -qf on kernel version.h file +%__kernel_qf() %(R=$(cd %{_kernelsrcdir} 2>/dev/null && LC_ALL=C rpm -q --qf '%*' -f include/linux/version.h 2>/dev/null | grep -v 'is not'); echo ${R:-ERROR}) + +# kernel %{name} and kernel %{epoch}:%{version}-%{release} macro respecing alt_kernel +%kernel_name %(N=%{__kernel_qf %{N}}; echo ${N%%-headers}) +%kernel_version %{__kernel_qf %|E?{%{E}:}|%{V}-%{R}} + +# -n drm to generate kernel%{_alt_kernel}-drm dependency +%releq_kernel(n:) %{kernel_name}%{?-n:-%{-n*}} = %{kernel_version} +%releq_kernel_up(n:) %{kernel_name}-up%{?-n:-%{-n*}} = %{kernel_version} +%releq_kernel_smp(n:) %{kernel_name}-smp%{?-n:-%{-n*}} = %{kernel_version} + +# -s post to generate Requires(post) dependency +%requires_releq_kernel(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel +%requires_releq_kernel_up(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_up +%requires_releq_kernel_smp(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_smp + +# kernel version-release handling +%__kernel_ver %( \\ + Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && \\ + awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || \\ + awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\ + Z=${Z:-$(awk -F' = ' '/^VERSION/{v=$2} /^PATCHLEVEL/{p=$2} /^SUBLEVEL/{s=$2} /^EXTRAVERSION/{e=$2} END {printf("%d.%d.%d%s", v, p, s, e)}' \\ + %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\ + echo ${Z:-ERROR}; \\ +) + +%_kernel_version_code %( \\ + Z=$(awk '/LINUX_VERSION_CODE/{print $3}' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null); \\ + echo ${Z:-ERROR}; \\ +) + +%_kernel_version_magic() %(echo $((%{1} * 65536 + %{2} * 256 + %{3}))) + +# `uname -r` used for building/installing kernel modules +%_kernel_ver %{!?_without_dist_kernel:%{__kernel_qf %{V}-%{R}}}%{?_without_dist_kernel:%{__kernel_ver}} +# package version OR `uname -r` for non-dist kernel to be used in @release field +%_kernel_ver_str %(echo %{!?_without_dist_kernel:%{__kernel_qf %{V}-%{R}}}%{?_without_dist_kernel:%{__kernel_ver}} | tr '-' '_') + +#----------------------------------------------------------------- +# Find and gzip all kernel modules +# +# Requires: find +# +#%no_install_post_compress_modules 1 +%__spec_install_post_compress_modules { \ +%{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \ +%{!?debug:set +x;} \ + if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \ + q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \ + if [ "$q" ]; then \ + printf "Compress %d kernel modules..." $(echo "$q" | wc -l); \ + echo "$q" | xargs -r %{__gzip} -9nf; \ + echo "DONE"; \ + find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \ + while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \ + fi; \ + fi; \ +}; __spec_install_post_compress_modules } } + +# Build modules for kernels 2.6 +# Author: Przemyslaw Iskra +# +# Usage: +# %build_kernel_modules -m -C +# +# remember that proper Makefile is still required +# Options: +# -m (required) -- comma-separated list of modules to save, +# without .ko extension, may be placed in subdirectory +# -C -- change to before doing anything +# -p , -P -- arguments passeed to make scripts +# -c -- do not execute make clean +# -- all additional arguments will be passed to +# make modules +# +# Additional patching supported via here document. Try: +# %build_kernel_modules -m module <<'EOF' +# your patch script here +# EOF +# Don't use it unless patching depends on config options. + +# Developer note: don't touch it unless you know how to handle '\'. +# - \ in script expands to nothing +# - \\\ in script expands to \ +# - \\\ inside definition expands to nothing +# - \\\\\\\ inside definition expands to \ +# - in last line \ has to touch arguments so arguments passing +# in new lines (using \) will be supported + +%build_kernel_modules(p:P:m:C:c) \ +%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ + \ +%define Opts \\\\\\\ +%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\ + %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ + CC="%{__cc}" ARCH=%{_target_base_arch} \\\ + %else \\\ + ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ + %endif \\\ +%else \\\ + CC="%{__cc}" \\\ +%endif \ +%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ + O=$PWD/o %{?with_verbose:V=1} %{Opts} \ + \ +%{?-C:cd %{-C*}} \ +compile() { \ + local L="<" PATCH_SH; \ + [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ + set -e -x \ + \ + [ -r "%{_kernelsrcdir}/.config" ] || exit 1 \ + rm -rf o \ + install -d o/include/linux o/include/generated o/arch/x86/include o/arch/powerpc/lib \ + ln -sf %{_kernelsrcdir}/.config o/.config \ + ln -sf %{_kernelsrcdir}/Module.symvers o/Module.symvers \ + if [ -f %{_kernelsrcdir}/include/generated/autoconf.h ]; then \ + ln -sf %{_kernelsrcdir}/include/generated/autoconf.h o/include/generated/autoconf.h \ + ln -s ../generated/autoconf.h o/include/linux/autoconf.h \ + else \ + ln -sf %{_kernelsrcdir}/include/linux/autoconf.h o/include/linux/autoconf.h \ + fi \ + if [ -d %{_kernelsrcdir}/arch/x86/include/generated ]; then \ + ln -s %{_kernelsrcdir}/arch/x86/include/generated o/arch/x86/include \ + fi \ + \ + set +x \ + [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ + set -x \ + \ + install -d o/include/config \ + touch o/include/config/MARKER \ + ln -sf %{_kernelsrcdir}/include/config/auto.conf o/include/config/auto.conf \ + ln -sf %{_kernelsrcdir}/scripts o/scripts \ + \ + %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ + RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\ + ${1+"$@"} \\\ + M=$PWD %{MakeOpts}} \ + \ + %{__make} -C %{_kernelsrcdir} modules \\\ + ${1+"$@"} \\\ + M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \ +%{?-C:cd -} \ +} \ +compile %{*} \ +%{nil} + +%build_kernel_modules_compat(p:P:m:C:c) \ +%{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ + \ +%define Opts \\\\\\\ +%if "%{_target_base_arch}" != "%{_host_base_arch}" \\\ + %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ + CC="%{__cc}" ARCH=%{_target_base_arch} \\\ + %else \\\ + ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ + %endif \\\ +%else \\\ + CC="%{__cc}" \\\ +%endif \ +%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ + O=$PWD/o %{?with_verbose:V=1} %{Opts} \ + \ +%{?-C:cd %{-C*}} \ +compile() { \ + local L="<" PATCH_SH; \ + [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ + set -e -x \ + local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ + \ +for cfg in ${cfgs:-dist}; do \ + [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \ + \ + rm -rf o \ + install -d o/include/linux o/include/generated o/arch/powerpc/lib \ + ln -sf %{_kernelsrcdir}/config-$cfg o/.config \ + ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \ + if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then \ + ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \ + ln -s ../generated/autoconf.h o/include/linux/autoconf.h \ + else \ + ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \ + fi \ + \ + set +x \ + [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ + set -x \ + \ + %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?) \ + %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\ + %{-p*} %{-P*} \\\ + %{MakeOpts} \ + %else \ + install -d o/include/config \ + touch o/include/config/MARKER \ + ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf \ + ln -sf %{_kernelsrcdir}/scripts o/scripts \ + %endif \ + \ + %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ + RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\ + ${1+"$@"} \\\ + M=$PWD %{MakeOpts}} \ + \ + %{__make} -C %{_kernelsrcdir} modules \\\ + ${1+"$@"} \\\ + M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \ + \ + for MODULE in {%{-m*},}; do \ + [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \ + done \ +done \ +%{?-C:cd -} \ +} \ +compile %{*} \ +%{nil} + + +# Install kernel modules built by %build_kernel_modules +# Author: Przemyslaw Iskra +# +# Usage: +# %install_kernel_modules -m -d +# +# Options: +# -m (required) -- comma-separated list of modules to install, +# without .ko extension, may be placed in subdirectory +# -d (required) -- in what subdirectory modules should be +# installed (eg. misc, kernel/drivers/net) +# -s -- suffix to use when installing modules, useful when module +# with same name exists in kernel already +# -n -- name of modprobe config file to use (without .conf extension) +# for defining aliases, only useful with -s +# -D -- DESTDIR, base directory for installed files, +# defaults to RPM_BUILD_ROOT + +%install_kernel_modules(m:d:s:n:D:) \ +%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ +%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ +%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ + \ +INSTALLROOT=%{-D*} \ +[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \ + \ +%{!?debug:set +x;} \ + \ +for MODULE in {%{-m*},}; do \ + [ -n "${MODULE}" ] || continue \ + MNAME=${MODULE##*/} \ + install -m 644 -D ${MODULE}.ko $INSTALLROOT/lib/modules/%{_kernel_ver}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ + %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ + echo "alias ${MNAME} ${MNAME}-%{-s*}" >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}/%{-n*}.conf} \ +done \ +unset INSTALLROOT \ +%{nil} + +%install_kernel_modules_compat(m:d:s:n:D:) \ +%{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ +%{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ +%{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ + \ +INSTALLROOT=%{-D*} \ +[ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \ + \ +%{!?debug:set +x;} \ +local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ + \ +for MODULE in {%{-m*},}; do \ + [ -n "${MODULE}" ] || continue \ + for cfg in ${cfgs:-dist}; do \ + [ "$cfg" = smp ] && suf=smp || suf= \ + MNAME=${MODULE##*/} \ + install -m 644 -D ${MODULE}-$cfg.ko \\\ + $INSTALLROOT/lib/modules/%{_kernel_ver}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ + %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}$suf \ + echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\ + >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} $suf/%{-n*}.conf} \ + done \ +done \ +unset INSTALLROOT \ +%{nil} -- 2.44.0