+
+# Build modules for kernels 2.6
+# Author: Przemyslaw Iskra <sparky@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}" != "%{_arch}" \\\
+ %if "%{_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
+ CC="%{__cc}" CPP="%{__cpp}" ARCH=%{_target_base_arch} \\\
+ %else \\\
+ ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
+ %endif \\\
+%else \\\
+ CC="%{__cc}" CPP="%{__cpp}" \\\
+%endif \
+%define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
+ O=$PWD/o %{?with_verbose:V=1} %{Opts} \
+ \
+%{?-C:cd %{-C*}} \
+compile() { \
+ L="<"; [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \
+ set -e -x \
+ \
+for cfg in %{?with_dist_kernel:dist}%{!?with_dist_kernel:nondist}; do \
+ [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \
+ \
+ rm -rf o \
+ install -d o/include/linux \
+ ln -sf %{_kernelsrcdir}/config-$cfg o/.config \
+ ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \
+ ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \
+%ifarch ppc ppc64 \
+ install -d o/include/asm \
+ [ ! -d %{_kernelsrcdir}/include/asm-%{_target_base_arch} ] || ln -sf %{_kernelsrcdir}/include/asm-%{_target_base_arch}/* o/include/asm \
+ [ ! -d %{_kernelsrcdir}/include/asm-powerpc ] || ln -snf %{_kernelsrcdir}/include/asm-powerpc/* o/include/asm \
+%else \
+ ln -sf %{_kernelsrcdir}/include/asm-%{_target_base_arch} o/include/asm \
+%endif \
+ \
+ set +x \
+ [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \
+ set -x \
+ \
+ %if %{with dist_kernel} \
+ %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\
+ %{-p*} %{-P*} \\\
+ %{MakeOpts} \
+ %else \
+ install -d o/include/config \
+ touch o/include/config/MARKER \
+ ln -sf %{_kernelsrcdir}/scripts o/scripts \
+ %endif \
+ \
+ %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\
+ RCS_FIND_IGNORE="-name '*.ko' -o" \\\
+ M=$PWD %{MakeOpts}} \
+ %{__make} -C %{_kernelsrcdir} modules \\\
+ ${1+"$@"} \\\
+ M=$PWD %{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@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 definig aliases, only useful with -s
+
+%install_kernel_modules(m:d:s:n:) \
+%{!?-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}} \
+ \
+%define KernelD $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver} \
+%define ModprobeD $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \
+ \
+install -d %{KernelD}/%{-d*} \
+%{?-s:install -d %{ModprobeD}} \
+ \
+for MODULE in {%{-m*},}; do \
+ [ -n "${MODULE}" ] || continue \
+ MNAME=${MODULE##*/} \
+ %if %{without dist_kernel} \
+ install ${MODULE}-nondist.ko \\\
+ %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> %{ModprobeD}/%{-n*}.conf} \
+ %else \
+ install ${MODULE}-dist.ko \\\
+ %{KernelD}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \
+ %{?-s:echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\
+ >> %{ModprobeD}/%{-n*}.conf} \
+ %endif \
+done \
+%{nil}
+
+# patchset macros
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %patchset_source -f <seq(1) format> <start> [<end>]
+# %patchset_patch <start> [<end>]
+#
+# If <end> is omited, it is assumed to be <start>.
+#
+# For example in preamble:
+# %patchset_source -f ftp://ftp.vim.org/pub/editors/vim/patches/7.0/7.0.%03g 33 44
+# and in %prep:
+# %patchset_patch 33 44
+
+# generate SourceX urls from range START STOP
+# Format can be SINGLE format char of %e, %f, %g, see seq(1)
+# The sources start from 10000
+%patchset_source(f:b:) %(
+ base=%{-b*}%{!-b*:10000};
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ # we need to call seq twice as it doesn't allow two formats
+ seq -f 'Patch%g:' $start $end > %{tmpdir}/__ps1;
+ seq -f '%{-f*}' %1 %{?2}%{!?2:%{1}} > %{tmpdir}/__ps2;
+ paste %{tmpdir}/__ps{1,2};
+ rm -f %{tmpdir}/__ps{1,2};
+) \
+%{nil}
+
+# apply sources from %patchset_source
+# -p specify -pX for %patch line
+# -b base offset: defaults to 10000
+%patchset_patch(f:p:b:) %(
+ base=%{-b*}%{!-b*:10000};
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ echo ": patchset_patch %1%{?2: to %2}";
+ seq -f 'patch%g %{-p*:-p%{-p*}}' $start $end | sed -e s,^,%%,;
+) \
+%{nil}
+
+# browser plugins v2
+# Author: Elan Ruusamäe <glen@pld-linux.org>
+#
+# Usage:
+# %browser_plugins_add_browser <name> -p <plugindir>
+#
+# <name> (required) -- name of the browser. usually %{name}.
+# -p <plugindir> (required) -- in what directory browser searches for its plugins.
+# -b -- default blacklists
+# -a <arch> override arch
+#
+# Example:
+# %browser_plugins_add_browser %{name} -p %{_firefoxdir}/plugins
+
+%_browserpluginsconfdir /etc/browser-plugins
+%_browserpluginsdir %{_libdir}/browser-plugins
+%update_browser_plugins /usr/sbin/update-browser-plugins || :
+
+%browser_plugins_add_browser(p:b:a:) \
+ browser=%1.%{!-a:%{_target_base_arch}}%{-a*} \
+ install -d $RPM_BUILD_ROOT%{_browserpluginsconfdir}/{blacklist,browsers}.d \
+ ln -s %{-p*} $RPM_BUILD_ROOT%{_browserpluginsconfdir}/browsers.d/$browser \
+ blacklist_file=$RPM_BUILD_ROOT%{_browserpluginsconfdir}/blacklist.d/$browser.blacklist \
+ echo '# This file format is shell globs at base dir of plugindir' > $blacklist_file \
+ %{-b:cat >> $blacklist_file %{-b*}} \
+%{nil}
+
+# vim:ts=4 sw=4 noet syn=spec