]>
Commit | Line | Data |
---|---|---|
1c834f14 JR |
1 | # vim:ts=4 sw=4 noet ft=spec |
2 | # Kernel specific macro definitions. | |
3 | # To make use of these macros insert the following line into your spec file: | |
4 | # %{load:%{_usrlibrpm}/macros.d/kernel} | |
5 | ||
6 | %__modinfo /sbin/modinfo | |
7 | ||
8 | # Path to scripts to autogenerate gstreamer package dependencies, | |
9 | # | |
10 | # Note: Used iff _use_internal_dependency_generator is non-zero. The | |
11 | # helpers are also used by %{_rpmhome}/rpmdeps {--provides|--requires}. | |
12 | %__kernel_provides %{_rpmhome}/kmod-deps.sh --provides --modinfo %__modinfo | |
13 | #__kernel_requires %{_rpmhome}/kmod-deps.sh --requires --modinfo %__modinfo | |
14 | ||
15 | # Alternative kernel type/version | |
16 | %_alt_kernel %{nil}%{?alt_kernel:-%{?alt_kernel}} | |
17 | %_build_kernels %{nil}%{?build_kernels:%{?build_kernels}}%{!?build_kernels:%{?alt_kernel}} | |
18 | ||
f1f5d044 JR |
19 | # Macros for building kernel packages for multiple kernels from same spec |
20 | # Usage: | |
21 | # | |
22 | # %{expand:%buildrequires_kernel kernel%%{_alt_kernel}-module-build >= 3:2.6.20.2}} | |
23 | # %{expand:%create_kernel_packages} | |
24 | # %{expand:%build_kernel_packages} | |
25 | # %{expand:%install_kernel_packages} | |
26 | # | |
27 | %buildrequires_kernel() %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ | |
ccab679d | 28 | echo %%undefine alt_kernel \ |
f1f5d044 | 29 | [ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ |
3a27fcef | 30 | echo "BuildRequires: %{*}" \ |
f1f5d044 | 31 | done) |
1c834f14 JR |
32 | |
33 | %create_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ | |
34 | echo %%undefine alt_kernel \ | |
35 | [ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ | |
36 | echo %%kernel_pkg \ | |
37 | done) | |
38 | ||
39 | %build_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ | |
40 | echo %%undefine alt_kernel \ | |
41 | [ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ | |
42 | echo %%build_kernel_pkg \ | |
43 | done) | |
44 | ||
45 | %install_kernel_packages %(echo %{_build_kernels} | tr , '\\n' | while read n ; do \ | |
46 | echo %%undefine alt_kernel \ | |
47 | [ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \ | |
48 | echo %%install_kernel_pkg \ | |
49 | done) | |
50 | ||
51 | # The directory holding Linux kernel sources | |
52 | %_kernelsrcdir /usr/src/linux%{_alt_kernel} | |
53 | ||
54 | # rpm -qf on kernel version.h file | |
55 | %__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}) | |
56 | ||
57 | # kernel %{name} and kernel %{epoch}:%{version}-%{release} macro respecing alt_kernel | |
58 | %kernel_name %(N=%{__kernel_qf %{N}}; echo ${N%%-headers}) | |
59 | %kernel_version %{__kernel_qf %|E?{%{E}:}|%{V}-%{R}} | |
60 | ||
61 | # -n drm to generate kernel%{_alt_kernel}-drm dependency | |
62 | %releq_kernel(n:) %{kernel_name}%{?-n:-%{-n*}} = %{kernel_version} | |
63 | %releq_kernel_up(n:) %{kernel_name}-up%{?-n:-%{-n*}} = %{kernel_version} | |
64 | %releq_kernel_smp(n:) %{kernel_name}-smp%{?-n:-%{-n*}} = %{kernel_version} | |
65 | ||
66 | # -s post to generate Requires(post) dependency | |
67 | %requires_releq_kernel(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel | |
68 | %requires_releq_kernel_up(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_up | |
69 | %requires_releq_kernel_smp(s:n:) Requires%{-s:(%{-s*})}: %releq_kernel_smp | |
70 | ||
71 | # kernel version-release handling | |
72 | %__kernel_ver %( \\ | |
73 | Z=$([ -f '%{_kernelsrcdir}/include/generated/utsrelease.h' ] && \\ | |
74 | awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/{linux/version,generated/utsrelease}.h 2>/dev/null || \\ | |
75 | awk -F'"' '/UTS_RELEASE/{print $2}' %{_kernelsrcdir}/include/linux/{version,utsrelease}.h 2>/dev/null); \\ | |
76 | 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)}' \\ | |
77 | %{_kernelsrcdir}/Makefile 2>/dev/null)}; \\ | |
78 | echo ${Z:-ERROR}; \\ | |
79 | ) | |
80 | ||
81 | %_kernel_version_code %( \\ | |
82 | Z=$(awk '/LINUX_VERSION_CODE/{print $3}' %{_kernelsrcdir}/include/linux/version.h 2>/dev/null); \\ | |
83 | echo ${Z:-ERROR}; \\ | |
84 | ) | |
85 | ||
86 | %_kernel_version_magic() %(echo $((%{1} * 65536 + %{2} * 256 + %{3}))) | |
87 | ||
88 | # `uname -r` used for building/installing kernel modules | |
8aed5810 JR |
89 | %_kernel_ver %{__kernel_qf %{V}-%{R}} |
90 | # package version to be used in @release field | |
91 | %_kernel_ver_str %(echo %{__kernel_qf %{V}-%{R}} | tr '-' '_') | |
1c834f14 JR |
92 | |
93 | #----------------------------------------------------------------- | |
94 | # Find and gzip all kernel modules | |
95 | # | |
96 | # Requires: find | |
97 | # | |
98 | #%no_install_post_compress_modules 1 | |
99 | %__spec_install_post_compress_modules { \ | |
100 | %{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \ | |
101 | %{!?debug:set +x;} \ | |
102 | if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \ | |
103 | q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \ | |
104 | if [ "$q" ]; then \ | |
105 | printf "Compress %d kernel modules..." $(echo "$q" | wc -l); \ | |
106 | echo "$q" | xargs -r %{__gzip} -9nf; \ | |
107 | echo "DONE"; \ | |
108 | find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \ | |
109 | while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \ | |
110 | fi; \ | |
111 | fi; \ | |
112 | }; __spec_install_post_compress_modules } } | |
113 | ||
114 | # Build modules for kernels 2.6 | |
115 | # Author: Przemyslaw Iskra <sparky@pld-linux.org> | |
116 | # | |
117 | # Usage: | |
118 | # %build_kernel_modules -m <modules> -C <directory> | |
119 | # | |
120 | # remember that proper Makefile is still required | |
121 | # Options: | |
122 | # -m <modules> (required) -- comma-separated list of modules to save, | |
123 | # without .ko extension, may be placed in subdirectory | |
124 | # -C <directory> -- change to <directory> before doing anything | |
125 | # -p <arg>, -P <arg> -- arguments passeed to make scripts | |
126 | # -c -- do not execute make clean | |
127 | # <additional arguments> -- all additional arguments will be passed to | |
128 | # make modules | |
129 | # | |
130 | # Additional patching supported via here document. Try: | |
131 | # %build_kernel_modules -m module <<'EOF' | |
132 | # your patch script here | |
133 | # EOF | |
134 | # Don't use it unless patching depends on config options. | |
135 | ||
136 | # Developer note: don't touch it unless you know how to handle '\'. | |
137 | # - \ in script expands to nothing | |
138 | # - \\\ in script expands to \ | |
139 | # - \\\ inside definition expands to nothing | |
140 | # - \\\\\\\ inside definition expands to \ | |
141 | # - in last line \ has to touch arguments so arguments passing | |
142 | # in new lines (using \) will be supported | |
143 | ||
144 | %build_kernel_modules(p:P:m:C:c) \ | |
145 | %{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ | |
146 | \ | |
147 | %define Opts \\\\\\\ | |
148 | %if "%{_target_base_arch}" != "%{_host_base_arch}" \\\ | |
149 | %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ | |
150 | CC="%{__cc}" ARCH=%{_target_base_arch} \\\ | |
151 | %else \\\ | |
152 | ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ | |
153 | %endif \\\ | |
154 | %else \\\ | |
155 | CC="%{__cc}" \\\ | |
156 | %endif \ | |
157 | %define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ | |
158 | O=$PWD/o %{?with_verbose:V=1} %{Opts} \ | |
159 | \ | |
160 | %{?-C:cd %{-C*}} \ | |
161 | compile() { \ | |
162 | local L="<" PATCH_SH; \ | |
163 | [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ | |
164 | set -e -x \ | |
165 | \ | |
166 | [ -r "%{_kernelsrcdir}/.config" ] || exit 1 \ | |
167 | rm -rf o \ | |
168 | install -d o/include/linux o/include/generated o/arch/x86/include o/arch/powerpc/lib \ | |
169 | ln -sf %{_kernelsrcdir}/.config o/.config \ | |
170 | ln -sf %{_kernelsrcdir}/Module.symvers o/Module.symvers \ | |
171 | if [ -f %{_kernelsrcdir}/include/generated/autoconf.h ]; then \ | |
172 | ln -sf %{_kernelsrcdir}/include/generated/autoconf.h o/include/generated/autoconf.h \ | |
173 | ln -s ../generated/autoconf.h o/include/linux/autoconf.h \ | |
174 | else \ | |
175 | ln -sf %{_kernelsrcdir}/include/linux/autoconf.h o/include/linux/autoconf.h \ | |
176 | fi \ | |
177 | if [ -d %{_kernelsrcdir}/arch/x86/include/generated ]; then \ | |
178 | ln -s %{_kernelsrcdir}/arch/x86/include/generated o/arch/x86/include \ | |
179 | fi \ | |
180 | \ | |
181 | set +x \ | |
182 | [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ | |
183 | set -x \ | |
184 | \ | |
185 | install -d o/include/config \ | |
186 | touch o/include/config/MARKER \ | |
187 | ln -sf %{_kernelsrcdir}/include/config/auto.conf o/include/config/auto.conf \ | |
188 | ln -sf %{_kernelsrcdir}/scripts o/scripts \ | |
189 | \ | |
190 | %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ | |
191 | RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\ | |
192 | ${1+"$@"} \\\ | |
193 | M=$PWD %{MakeOpts}} \ | |
194 | \ | |
195 | %{__make} -C %{_kernelsrcdir} modules \\\ | |
196 | ${1+"$@"} \\\ | |
197 | M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \ | |
198 | %{?-C:cd -} \ | |
199 | } \ | |
200 | compile %{*} \ | |
201 | %{nil} | |
202 | ||
203 | %build_kernel_modules_compat(p:P:m:C:c) \ | |
204 | %{!?-m:%{error:%{0}: Required module name/list missing} exit 1} \ | |
205 | \ | |
206 | %define Opts \\\\\\\ | |
207 | %if "%{_target_base_arch}" != "%{_host_base_arch}" \\\ | |
208 | %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\ | |
209 | CC="%{__cc}" ARCH=%{_target_base_arch} \\\ | |
210 | %else \\\ | |
211 | ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\ | |
212 | %endif \\\ | |
213 | %else \\\ | |
214 | CC="%{__cc}" \\\ | |
215 | %endif \ | |
216 | %define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\ | |
217 | O=$PWD/o %{?with_verbose:V=1} %{Opts} \ | |
218 | \ | |
219 | %{?-C:cd %{-C*}} \ | |
220 | compile() { \ | |
221 | local L="<" PATCH_SH; \ | |
222 | [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)" \ | |
223 | set -e -x \ | |
224 | local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ | |
225 | \ | |
226 | for cfg in ${cfgs:-dist}; do \ | |
227 | [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1 \ | |
228 | \ | |
229 | rm -rf o \ | |
230 | install -d o/include/linux o/include/generated o/arch/powerpc/lib \ | |
231 | ln -sf %{_kernelsrcdir}/config-$cfg o/.config \ | |
232 | ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers \ | |
233 | if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then \ | |
234 | ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \ | |
235 | ln -s ../generated/autoconf.h o/include/linux/autoconf.h \ | |
236 | else \ | |
237 | ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \ | |
238 | fi \ | |
239 | \ | |
240 | set +x \ | |
241 | [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell \ | |
242 | set -x \ | |
243 | \ | |
244 | %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?) \ | |
245 | %{__make} -j1 -C %{_kernelsrcdir} prepare scripts \\\ | |
246 | %{-p*} %{-P*} \\\ | |
247 | %{MakeOpts} \ | |
248 | %else \ | |
249 | install -d o/include/config \ | |
250 | touch o/include/config/MARKER \ | |
251 | ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf \ | |
252 | ln -sf %{_kernelsrcdir}/scripts o/scripts \ | |
253 | %endif \ | |
254 | \ | |
255 | %{!?-c:%{__make} -C %{_kernelsrcdir} clean \\\ | |
256 | RCS_FIND_IGNORE="-name '*.[ks]o' -o" \\\ | |
257 | ${1+"$@"} \\\ | |
258 | M=$PWD %{MakeOpts}} \ | |
259 | \ | |
260 | %{__make} -C %{_kernelsrcdir} modules \\\ | |
261 | ${1+"$@"} \\\ | |
262 | M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts} \ | |
263 | \ | |
264 | for MODULE in {%{-m*},}; do \ | |
265 | [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \ | |
266 | done \ | |
267 | done \ | |
268 | %{?-C:cd -} \ | |
269 | } \ | |
270 | compile %{*} \ | |
271 | %{nil} | |
272 | ||
273 | ||
274 | # Install kernel modules built by %build_kernel_modules | |
275 | # Author: Przemyslaw Iskra <sparky@pld-linux.org> | |
276 | # | |
277 | # Usage: | |
278 | # %install_kernel_modules -m <modules> -d <directory> | |
279 | # | |
280 | # Options: | |
281 | # -m <modules> (required) -- comma-separated list of modules to install, | |
282 | # without .ko extension, may be placed in subdirectory | |
283 | # -d <directory> (required) -- in what subdirectory modules should be | |
284 | # installed (eg. misc, kernel/drivers/net) | |
285 | # -s <suffix> -- suffix to use when installing modules, useful when module | |
286 | # with same name exists in kernel already | |
287 | # -n <file> -- name of modprobe config file to use (without .conf extension) | |
288 | # for defining aliases, only useful with -s | |
289 | # -D <directory> -- DESTDIR, base directory for installed files, | |
290 | # defaults to RPM_BUILD_ROOT | |
291 | ||
292 | %install_kernel_modules(m:d:s:n:D:) \ | |
293 | %{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ | |
294 | %{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ | |
295 | %{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ | |
296 | \ | |
297 | INSTALLROOT=%{-D*} \ | |
298 | [ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \ | |
299 | \ | |
300 | %{!?debug:set +x;} \ | |
301 | \ | |
302 | for MODULE in {%{-m*},}; do \ | |
303 | [ -n "${MODULE}" ] || continue \ | |
304 | MNAME=${MODULE##*/} \ | |
305 | install -m 644 -D ${MODULE}.ko $INSTALLROOT/lib/modules/%{_kernel_ver}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ | |
306 | %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} \ | |
307 | echo "alias ${MNAME} ${MNAME}-%{-s*}" >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}/%{-n*}.conf} \ | |
308 | done \ | |
309 | unset INSTALLROOT \ | |
310 | %{nil} | |
311 | ||
312 | %install_kernel_modules_compat(m:d:s:n:D:) \ | |
313 | %{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1} \ | |
314 | %{!?-d:%{error:%{0}: Required module directory missing}exit 1} \ | |
315 | %{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \ | |
316 | \ | |
317 | INSTALLROOT=%{-D*} \ | |
318 | [ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT \ | |
319 | \ | |
320 | %{!?debug:set +x;} \ | |
321 | local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \ | |
322 | \ | |
323 | for MODULE in {%{-m*},}; do \ | |
324 | [ -n "${MODULE}" ] || continue \ | |
325 | for cfg in ${cfgs:-dist}; do \ | |
326 | [ "$cfg" = smp ] && suf=smp || suf= \ | |
327 | MNAME=${MODULE##*/} \ | |
328 | install -m 644 -D ${MODULE}-$cfg.ko \\\ | |
329 | $INSTALLROOT/lib/modules/%{_kernel_ver}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko \ | |
330 | %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}$suf \ | |
331 | echo "alias ${MNAME} ${MNAME}-%{-s*}" \\\ | |
332 | >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} $suf/%{-n*}.conf} \ | |
333 | done \ | |
334 | done \ | |
335 | unset INSTALLROOT \ | |
336 | %{nil} |