]> git.pld-linux.org Git - packages/rpm-build-macros.git/blob - rpm.macros.kernel
v1.706: find-lang: v1.37 update --with-qm to accept from any path
[packages/rpm-build-macros.git] / rpm.macros.kernel
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
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 \
28 echo %%undefine alt_kernel \
29 [ -z "$n" -o "$n" = "head" ] || echo %%define alt_kernel $n \
30 echo "BuildRequires:    %{*}" \
31 done)
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
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 '-' '_')
92
93 %_host_base_arch        %{expand:%%global _host_base_arch %(echo %{_host_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/;s/x32/x86_64/;s/sparcv./sparc/;s/arm.*/arm/')}%_host_base_arch
94 %_target_base_arch      %{expand:%%global _target_base_arch %(echo %{_target_cpu} | sed 's/i.86/i386/;s/athlon/i386/;s/pentium./i386/;s/amd64/x86_64/;s/ia32e/x86_64/;s/x32/x86_64/;s/sparcv./sparc/;s/arm.*/arm/')}%_target_base_arch
95
96 #-----------------------------------------------------------------
97 # Find and gzip all kernel modules
98 #
99 # Requires: find
100 #
101 #%no_install_post_compress_modules      1
102 %__spec_install_post_compress_modules { \
103 %{!?no_install_post_compress_modules: __spec_install_post_compress_modules() { \
104 %{!?debug:set +x;} \
105         if [ -d $RPM_BUILD_ROOT/lib/modules ]; then \
106                 q=$(find $RPM_BUILD_ROOT/lib/modules -name '*o' -type f -print); \
107                 if [ "$q" ]; then \
108                         printf "Compress %d kernel modules..." $(echo "$q" | wc -l); \
109                         echo "$q" | xargs -r %{__gzip} -9nf; \
110                         echo "DONE"; \
111                         find $RPM_BUILD_ROOT/lib/modules -name '*o' -type l -printf "%p %l\n" | \
112                         while read a b; do ln -sf $b.gz $a.gz; rm -f $a; done; \
113                 fi; \
114         fi; \
115 }; __spec_install_post_compress_modules } }
116
117 # Build modules for kernels 2.6
118 # Author: Przemyslaw Iskra <sparky@pld-linux.org>
119 #
120 # Usage:
121 #       %build_kernel_modules -m <modules> -C <directory>
122 #
123 #  remember that proper Makefile is still required
124 # Options:
125 #  -m <modules> (required) -- comma-separated list of modules to save,
126 #               without .ko extension, may be placed in subdirectory
127 #  -C <directory> -- change to <directory> before doing anything
128 #  -p <arg>, -P <arg> -- arguments passeed to make scripts
129 #  -c -- do not execute make clean
130 #  <additional arguments> -- all additional arguments will be passed to
131 #               make modules
132 #
133 # Additional patching supported via here document. Try:
134 #       %build_kernel_modules -m module <<'EOF'
135 #       your patch script here
136 #       EOF
137 # Don't use it unless patching depends on config options.
138
139 # Developer note: don't touch it unless you know how to handle '\'.
140 # - \ in script expands to nothing
141 # - \\\ in script expands to \
142 # - \\\ inside definition expands to nothing
143 # - \\\\\\\ inside definition expands to \
144 # - in last line \ has to touch arguments so arguments passing
145 #   in new lines (using \) will be supported
146
147 %build_kernel_modules(p:P:m:C:c)                                                                        \
148 %{!?-m:%{error:%{0}: Required module name/list missing} exit 1}         \
149                                                                                                                                         \
150 %define Opts                                                                                                            \\\\\\\
151 %if "%{_target_base_arch}" != "%{_host_base_arch}"                                      \\\
152         %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
153         CC="%{__cc}" ARCH=%{_target_base_arch}                                                  \\\
154         %else                                                                                                                   \\\
155         ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
156         %endif                                                                                                                  \\\
157 %else                                                                                                                           \\\
158         CC="%{__cc}"                                                                                                    \\\
159 %endif                                                                                                                          \
160 %define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
161                 O=$PWD/o %{?with_verbose:V=1} %{Opts}                                           \
162                                                                                                                                         \
163 %{?-C:cd %{-C*}}                                                                                                        \
164 compile() {                                                                                                                     \
165         local L="<" PATCH_SH;                                                                                   \
166         [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)"                   \
167         set -e -x                                                                                                               \
168                                                                                                                                         \
169         [ -r "%{_kernelsrcdir}/.config" ] || exit 1                                             \
170         rm -rf o                                                                                                                \
171         install -d o/include/linux o/include/generated o/arch/x86/include o/arch/powerpc/lib    \
172         ln -sf %{_kernelsrcdir}/.config o/.config                                               \
173         ln -sf %{_kernelsrcdir}/Module.symvers o/Module.symvers                 \
174         if [ -f %{_kernelsrcdir}/include/generated/autoconf.h ]; then   \
175                 ln -sf %{_kernelsrcdir}/include/generated/autoconf.h o/include/generated/autoconf.h \
176                 ln -s ../generated/autoconf.h o/include/linux/autoconf.h        \
177         else                                                                                                                    \
178                 ln -sf %{_kernelsrcdir}/include/linux/autoconf.h o/include/linux/autoconf.h \
179         fi                                                                                                                              \
180         if [ -d %{_kernelsrcdir}/arch/x86/include/generated ]; then             \
181                 ln -s %{_kernelsrcdir}/arch/x86/include/generated o/arch/x86/include    \
182         fi                                                                                                                              \
183                                                                                                                                         \
184         set +x                                                                                                                  \
185         [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell    \
186         set -x                                                                                                                  \
187                                                                                                                                         \
188         install -d o/include/config                                                                             \
189         touch o/include/config/MARKER                                                                   \
190         ln -sf %{_kernelsrcdir}/include/config/auto.conf o/include/config/auto.conf     \
191         ln -sf %{_kernelsrcdir}/scripts o/scripts                                               \
192                                                                                                                                         \
193         %{!?-c:%{__make} -C %{_kernelsrcdir} clean                                              \\\
194                 RCS_FIND_IGNORE="-name '*.[ks]o' -o"                                            \\\
195                 ${1+"$@"}                                                                                                       \\\
196                 M=$PWD %{MakeOpts}}                                                                                     \
197                                                                                                                                         \
198         %{__make} -C %{_kernelsrcdir} modules                                                   \\\
199                 ${1+"$@"}                                                                                                       \\\
200                 M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts}                                           \
201 %{?-C:cd -}                                                                                                                     \
202 }                                                                                                                                       \
203 compile %{*}                                                                                                            \
204 %{nil}
205
206 %build_kernel_modules_compat(p:P:m:C:c)                                                         \
207 %{!?-m:%{error:%{0}: Required module name/list missing} exit 1}         \
208                                                                                                                                         \
209 %define Opts                                                                                                            \\\\\\\
210 %if "%{_target_base_arch}" != "%{_host_base_arch}"                                      \\\
211         %if "%{_host_base_arch}" == "x86_64" && "%{_target_base_arch}" == "i386" \\\
212         CC="%{__cc}" ARCH=%{_target_base_arch}                                                  \\\
213         %else                                                                                                                   \\\
214         ARCH=%{_target_base_arch} CROSS_COMPILE=%{_target_cpu}-pld-linux- \\\
215         %endif                                                                                                                  \\\
216 %else                                                                                                                           \\\
217         CC="%{__cc}"                                                                                                    \\\
218 %endif                                                                                                                          \
219 %define MakeOpts HOSTCC="%{__cc}" SYSSRC=%{_kernelsrcdir} SYSOUT=$PWD/o \\\\\\\
220                 O=$PWD/o %{?with_verbose:V=1} %{Opts}                                           \
221                                                                                                                                         \
222 %{?-C:cd %{-C*}}                                                                                                        \
223 compile() {                                                                                                                     \
224         local L="<" PATCH_SH;                                                                                   \
225         [[ '%{*}' != *$L$L* ]] || PATCH_SH="set -x -e;$(cat)"                   \
226         set -e -x                                                                                                               \
227         local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \
228                                                                                                                                         \
229 for cfg in ${cfgs:-dist}; do                                        \
230         [ -r "%{_kernelsrcdir}/config-$cfg" ] || exit 1                                 \
231                                                                                                                                         \
232         rm -rf o                                                                                                                \
233         install -d o/include/linux o/include/generated o/arch/powerpc/lib       \
234         ln -sf %{_kernelsrcdir}/config-$cfg o/.config                                   \
235         ln -sf %{_kernelsrcdir}/Module.symvers-$cfg o/Module.symvers    \
236         if [ -f %{_kernelsrcdir}/include/generated/autoconf-$cfg.h ]; then      \
237                 ln -sf %{_kernelsrcdir}/include/generated/autoconf-$cfg.h o/include/generated/autoconf.h \
238                 ln -s ../generated/autoconf.h o/include/linux/autoconf.h        \
239         else                                                                                                                    \
240                 ln -sf %{_kernelsrcdir}/include/linux/autoconf-$cfg.h o/include/linux/autoconf.h \
241         fi                                                                                                                              \
242                                                                                                                                         \
243         set +x                                                                                                                  \
244         [ -z "$PATCH_SH" ] || echo "$PATCH_SH" | %__spec_build_shell    \
245         set -x                                                                                                                  \
246                                                                                                                                         \
247         %if %{with dist_kernel} || %(test -f %{_kernelsrcdir}/scripts/bin2c ; echo $?)  \
248                 %{__make} -j1 -C %{_kernelsrcdir} prepare scripts                       \\\
249                         %{-p*} %{-P*}                                                                                   \\\
250                         %{MakeOpts}                                                                                             \
251         %else                                                                                                                   \
252                 install -d o/include/config                                                                     \
253                 touch o/include/config/MARKER                                                           \
254                 ln -sf %{_kernelsrcdir}/include/config/auto-$cfg.conf o/include/config/auto.conf        \
255                 ln -sf %{_kernelsrcdir}/scripts o/scripts                                       \
256         %endif                                                                                                                  \
257                                                                                                                                         \
258         %{!?-c:%{__make} -C %{_kernelsrcdir} clean                                              \\\
259                 RCS_FIND_IGNORE="-name '*.[ks]o' -o"                                            \\\
260                 ${1+"$@"}                                                                                                       \\\
261                 M=$PWD %{MakeOpts}}                                                                                     \
262                                                                                                                                         \
263         %{__make} -C %{_kernelsrcdir} modules                                                   \\\
264                 ${1+"$@"}                                                                                                       \\\
265                 M=$PWD CONSTIFY_PLUGIN="" %{MakeOpts}                                           \
266                                                                                                                                         \
267         for MODULE in {%{-m*},}; do                                                                             \
268                 [ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko                           \
269         done                                                                                                                    \
270 done                                                                                                                            \
271 %{?-C:cd -}                                                                                                                     \
272 }                                                                                                                                       \
273 compile %{*}                                                                                                            \
274 %{nil}
275
276
277 # Install kernel modules built by %build_kernel_modules
278 # Author: Przemyslaw Iskra <sparky@pld-linux.org>
279 #
280 # Usage:
281 #       %install_kernel_modules -m <modules> -d <directory>
282 #
283 # Options:
284 #  -m <modules> (required) -- comma-separated list of modules to install,
285 #               without .ko extension, may be placed in subdirectory
286 #  -d <directory> (required) -- in what subdirectory modules should be
287 #               installed (eg. misc, kernel/drivers/net)
288 #  -s <suffix> -- suffix to use when installing modules, useful when module
289 #               with same name exists in kernel already
290 #  -n <file> -- name of modprobe config file to use (without .conf extension)
291 #               for defining aliases, only useful with -s
292 #  -D <directory> -- DESTDIR, base directory for installed files,
293 #               defaults to RPM_BUILD_ROOT
294
295 %install_kernel_modules(m:d:s:n:D:)                                                                     \
296 %{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1}          \
297 %{!?-d:%{error:%{0}: Required module directory missing}exit 1}          \
298 %{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
299                                                                                                                                         \
300 INSTALLROOT=%{-D*}                                                                                                      \
301 [ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT                            \
302                                                                                                                                         \
303 %{!?debug:set +x;}                                                                                                      \
304                                                                                                                                         \
305 for MODULE in {%{-m*},}; do                                                                                     \
306         [ -n "${MODULE}" ] || continue                                                                  \
307         MNAME=${MODULE##*/}                                                                                             \
308         install -m 644 -D ${MODULE}.ko $INSTALLROOT/lib/modules/%{_kernel_ver}/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko  \
309         %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}                                                                   \
310                 echo "alias ${MNAME} ${MNAME}-%{-s*}" >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}/%{-n*}.conf}      \
311 done                                                                                                                            \
312 unset INSTALLROOT                                                                                                       \
313 %{nil}
314
315 %install_kernel_modules_compat(m:d:s:n:D:)                                                      \
316 %{!?-m:%{error:%{0}: Required module name (-m) missing}exit 1}          \
317 %{!?-d:%{error:%{0}: Required module directory missing}exit 1}          \
318 %{?-n:%{!?-s:%{error:%{0}: Modprobe .conf file requires module suffix}exit 1}} \
319                                                                                                                                         \
320 INSTALLROOT=%{-D*}                                                                                                      \
321 [ -n "$INSTALLROOT" ] || INSTALLROOT=$RPM_BUILD_ROOT                            \
322                                                                                                                                         \
323 %{!?debug:set +x;}                                                                                                      \
324 local cfgs='%{?with_dist_kernel:%{?with_smp: smp}%{?with_up: up}}%{!?with_dist_kernel: nondist}' \
325                                                                                                                                         \
326 for MODULE in {%{-m*},}; do                                                                                     \
327         [ -n "${MODULE}" ] || continue                                                                  \
328         for cfg in ${cfgs:-dist}; do                                    \
329                 [ "$cfg" = smp ] && suf=smp || suf=                                                     \
330                 MNAME=${MODULE##*/}                                                                                     \
331                 install -m 644 -D ${MODULE}-$cfg.ko                                                     \\\
332                         $INSTALLROOT/lib/modules/%{_kernel_ver}$suf/%{-d*}/${MNAME}%{-s:-%{-s*}}.ko                     \
333                 %{?-s:install -d $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}$suf                                                       \
334                         echo "alias ${MNAME} ${MNAME}-%{-s*}"                                   \\\
335                         >> $INSTALLROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver} $suf/%{-n*}.conf}                                               \
336         done                                                                                                                    \
337 done                                                                                                                            \
338 unset INSTALLROOT                                                                                                       \
339 %{nil}
This page took 0.661309 seconds and 3 git commands to generate.