[packages/rpm-build-macros] - split all kernel macros to separate file and install it in place of one provided by rpm - 1.699

baggins baggins at pld-linux.org
Wed Dec 10 21:43:15 CET 2014


commit 1c834f1450daaf1d30c070a80eabdc24a230020b
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Wed Dec 10 21:37:40 2014 +0100

    - 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(-)
---
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 <sparky at pld-linux.org>
-#
-# Usage:
-#	%build_kernel_modules -m <modules> -C <directory>
-#
-#  remember that proper Makefile is still required
-# Options:
-#  -m <modules> (required) -- comma-separated list of modules to save,
-#		without .ko extension, may be placed in subdirectory
-#  -C <directory> -- change to <directory> before doing anything
-#  -p <arg>, -P <arg> -- arguments passeed to make scripts
-#  -c -- do not execute make clean
-#  <additional arguments> -- 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 <sparky at pld-linux.org>
-#
-# Usage:
-#	%install_kernel_modules -m <modules> -d <directory>
-#
-# Options:
-#  -m <modules> (required) -- comma-separated list of modules to install,
-#		without .ko extension, may be placed in subdirectory
-#  -d <directory> (required) -- in what subdirectory modules should be
-#		installed (eg. misc, kernel/drivers/net)
-#  -s <suffix> -- suffix to use when installing modules, useful when module
-#		with same name exists in kernel already
-#  -n <file> -- name of modprobe config file to use (without .conf extension)
-#		for defining aliases, only useful with -s
-#  -D <directory> -- 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 <sparky at pld-linux.org>
+#
+# Usage:
+#	%build_kernel_modules -m <modules> -C <directory>
+#
+#  remember that proper Makefile is still required
+# Options:
+#  -m <modules> (required) -- comma-separated list of modules to save,
+#		without .ko extension, may be placed in subdirectory
+#  -C <directory> -- change to <directory> before doing anything
+#  -p <arg>, -P <arg> -- arguments passeed to make scripts
+#  -c -- do not execute make clean
+#  <additional arguments> -- 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 <sparky at pld-linux.org>
+#
+# Usage:
+#	%install_kernel_modules -m <modules> -d <directory>
+#
+# Options:
+#  -m <modules> (required) -- comma-separated list of modules to install,
+#		without .ko extension, may be placed in subdirectory
+#  -d <directory> (required) -- in what subdirectory modules should be
+#		installed (eg. misc, kernel/drivers/net)
+#  -s <suffix> -- suffix to use when installing modules, useful when module
+#		with same name exists in kernel already
+#  -n <file> -- name of modprobe config file to use (without .conf extension)
+#		for defining aliases, only useful with -s
+#  -D <directory> -- 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}
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/rpm-build-macros.git/commitdiff/1c834f1450daaf1d30c070a80eabdc24a230020b



More information about the pld-cvs-commit mailing list