RFC: Macro for building modules
sparky at pld-linux.org
sparky at pld-linux.org
Tue Nov 7 20:46:16 CET 2006
On Tue, Nov 07, 2006 at 08:40:12PM +0200, Elan Ruusamäe wrote:
> On Tuesday 07 November 2006 19:22, sparky at pld-linux.org wrote:
> > Right now we are copying code for building kernel 2.6 modules to each
> > spec which provides them. It is a little hard to maintain and to add
> > some functionality. I have created macro for building modules based on
> > that code, a little expanded (with cross-compilation support). Now in
> > spec file thete will only have to be some thing like:
> >
> > %if %{with kernel}
> > cd module/place
> > %build_kernel_modules module_name1 module_name2
> > cd ../..
> > %endif
> could you post the sample specfile and initial macros?
spec for ieee80211, and initial macros, you mean SOURCES/rpm.macros ?
for now I'm testing it in my ~/.rpmmacros
> > If some additional options for make modules are required they may be
> > passed like: -1 option1 -2 option2 -3 option3; up to 9 options are
> > supported.
> i belive this "limitation" can be avoided by using %* macro for parameters and
> say -m modulename1,modulename2 for passing module name(s)
good point, changed
> > Exemple when some additional option in make modules is required:
> >
> > %build_kernel_modules -1 T=$TMPDIR mola
now it becomes:
%build_kernel_modules T=$TMPDIR -m mol
> > There may be 2 options passed to make prepare scripts: -p o1 -P o2.
> > Module patching is supported via shell script called pld-module.patch.
> >
> > Exemple with additional patching:
> >
> > %if %{with kernel}
> > cp -f pwc-if.c pwc-if.c.orig
> >
> > cat > pld-module.patch <<'EOF'
> perhaps name it with .sh extension?
I knew pld-module.patch won't be the best name just after it came to my
mind, changed.
What I don't understand is why %{error: blabla} does not stop building,
it's just displayed at the beginning.
--
____ Sparky{PI] -- Przemyslaw _ ___ _ _ ........... LANG...Pl..Ca..Es..En
/____) ___ ___ _ _ || Iskra | | _ \| | | : WWW........ppcrcd.pld-linux.org
\____\| -_)'___| ||^'||//\\// < | _/| | | : JID......sparky<at>jabberes.org
(____/|| (_-_|_|| ||\\ || |_ |_| |_| _| : Mail....sparky<at>pld-linux.org
-------------- next part --------------
#
%build_kernel_modules(p:P:m:) \
%{!?-m:%{error:%{0}: Required module name/list missing}} \
\
%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} \
\
for cfg in %{?with_dist_kernel:%{?with_smp:smp} up}%{!?with_dist_kernel:nondist}; do \
if [ ! -r "%{_kernelsrcdir}/config-$cfg" ]; then \
exit 1 \
fi \
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 \
\
[ ! -e pld-module.sh ] || %__spec_build_shell pld-module.sh \
\
%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 \
\
%{__make} -C %{_kernelsrcdir} clean \\\
RCS_FIND_IGNORE="-name '*.ko' -o" \\\
M=$PWD %{MakeOpts} \
%{__make} -C %{_kernelsrcdir} modules \\\
%{*} \\\
M=$PWD %{MakeOpts} \
\
for MODULE in {%{-m*},}; do \
[ -z "${MODULE}" ] || mv ${MODULE}{,-$cfg}.ko \
done \
done \
%{nil}
-------------- next part --------------
# $Revision: 1.28 $, $Date: 2006/09/06 13:48:33 $
#
# Conditional build:
%bcond_without dist_kernel # allow non-distribution kernel
%bcond_without smp # don't build SMP module
%bcond_with verbose # verbose build (V=1)
#
%ifarch sparc
%undefine with_smp
%endif
#
%define modname ieee80211
%define _rel 1
Summary: Linux kernel module for the ieee80211 networking stack
Summary(de): Linux Kernel Treiber für den ieee80211 Netz Stapel
Summary(pl): Modu? j?dra Linuksa do stosu sieciowego ieee80211
Name: kernel%{_alt_kernel}-net-%{modname}
Version: 1.2.15
Release: %{_rel}@%{_kernel_ver_str}
License: GPL v2
Group: Base/Kernel
Source0: http://dl.sourceforge.net/ieee80211/%{modname}-%{version}.tgz
# Source0-md5: 499d5272fd1326ae65ebef80d9726e4d
URL: http://ieee80211.sourceforge.net/
%{?with_dist_kernel:BuildRequires: kernel%{_alt_kernel}-module-build >= 3:2.6.14}
BuildRequires: rpmbuild(macros) >= 1.308
BuildRequires: sed >= 4.0
%{?with_dist_kernel:%requires_releq_kernel_up}
Requires(post,postun): /sbin/depmod
Requires: module-init-tools >= 3.2.2-2
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%description
Linux kernel module for the ieee80211 networking stack.
%description -l de
Linux Kernel Modul für den ieee80211 Netz Stapel.
%description -l pl
Modu? j?dra Linuksa do stosu sieciowego ieee80211.
%package -n kernel%{_alt_kernel}-smp-net-%{modname}
Summary: Linux SMP kernel module for the ieee80211 networking stack
Summary(de): Linux SMP Kernel Modul für den ieee80211 Netz Stapel
Summary(pl): Modu? j?dra Linuksa SMP do stosu sieciowego ieee80211
Release: %{_rel}@%{_kernel_ver_str}
Group: Base/Kernel
%{?with_dist_kernel:%requires_releq_kernel_smp}
Requires(post,postun): /sbin/depmod
Requires: module-init-tools >= 3.2.2-2
%description -n kernel%{_alt_kernel}-smp-net-%{modname}
Linux SMP kernel module for the ieee80211 networking stack.
%description -n kernel%{_alt_kernel}-smp-net-%{modname} -l de
Linux SMP Kernel Modul für den ieee80211 Netz Stapel.
%description -n kernel%{_alt_kernel}-smp-net-%{modname} -l pl
Modu? j?dra Linuksa SMP do stosu sieciowego ieee80211.
%package -n %{modname}-devel
Summary: Development header files for the ieee80211 networking stack
Summary(de): Development Header Dateien für den ieee80211 Netz Stapel
Summary(pl): Pliki nag?ówkowe do stosu sieciowego ieee80211
Release: %{_rel}@%{_kernel_ver_str}
%{?with_dist_kernel:%requires_releq kernel-module-build}
Group: Development/Libraries
%description -n %{modname}-devel
Development header files for the ieee80211 networking stack.
%description -n %{modname}-devel -l de
Development Header Dateien für den ieee80211 Netz Stapel.
%description -n %{modname}-devel -l pl
Pliki nag?ówkowe do stosu sieciowego ieee80211.
%prep
%setup -q -n %{modname}-%{version}
%{__sed} -i 's:<net/ieee80211.h>:"net/ieee80211.h":g' *.c
%build
%build_kernel_modules -m ieee80211,ieee80211_crypt{,_wep,_ccmp,_tkip}
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}{,smp}/misc \
$RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}{,smp} \
$RPM_BUILD_ROOT%{_kernelsrcdir}/include/net
for MOD in ieee80211 ieee80211_crypt ieee80211_crypt_wep \
ieee80211_crypt_ccmp ieee80211_crypt_tkip; do
install $MOD-%{?with_dist_kernel:up}%{!?with_dist_kernel:nondist}.ko \
$RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc/${MOD}_current.ko
echo "alias $MOD ${MOD}_current" \
>> $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}/ieee80211.conf
done
%if %{with smp} && %{with dist_kernel}
for MOD in ieee80211 ieee80211_crypt ieee80211_crypt_wep \
ieee80211_crypt_ccmp ieee80211_crypt_tkip; do
install $MOD-smp.ko \
$RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}smp/misc/${MOD}_current.ko
echo "alias $MOD ${MOD}_current" \
>> $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/%{_kernel_ver}smp/ieee80211.conf
done
%endif
install net/* \
$RPM_BUILD_ROOT%{_kernelsrcdir}/include/net
%clean
rm -rf $RPM_BUILD_ROOT
%post -n kernel%{_alt_kernel}-net-%{modname}
%depmod %{_kernel_ver}
%postun -n kernel%{_alt_kernel}-net-%{modname}
%depmod %{_kernel_ver}
%post -n kernel%{_alt_kernel}-smp-net-%{modname}
%depmod %{_kernel_ver}smp
%postun -n kernel%{_alt_kernel}-smp-net-%{modname}
%depmod %{_kernel_ver}smp
%files -n kernel%{_alt_kernel}-net-%{modname}
%defattr(644,root,root,755)
/lib/modules/%{_kernel_ver}/misc/ieee80211*.ko*
%{_sysconfdir}/modprobe.d/%{_kernel_ver}/ieee80211.conf
%if %{with smp} && %{with dist_kernel}
%files -n kernel%{_alt_kernel}-smp-net-%{modname}
%defattr(644,root,root,755)
/lib/modules/%{_kernel_ver}smp/misc/ieee80211*.ko*
%{_sysconfdir}/modprobe.d/%{_kernel_ver}smp/ieee80211.conf
%endif
%files -n %{modname}-devel
%defattr(644,root,root,755)
# should go to a versioned directory
%{_kernelsrcdir}/include/net/*
%define date %(echo `LC_ALL="C" date +"%a %b %d %Y"`)
%changelog
* %{date} PLD Team <feedback at pld-linux.org>
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log: kernel-net-ieee80211.spec,v $
Revision 1.28 2006/09/06 13:48:33 sparky
- mass atack: -j1 for make scripts
Revision 1.27 2006/08/31 21:53:38 glen
- remove excess escaping
Revision 1.26 2006/08/31 14:02:41 glen
- make -j1 for scripts
Revision 1.25 2006/08/21 10:02:25 shadzik
- 1.2.15
Revision 1.24 2006/06/27 21:55:06 lmasko
- alternative kernel support
Revision 1.23 2006/06/12 20:13:53 shadzik
- up to 1.1.14
Revision 1.22 2006/05/09 10:14:08 qboosh
- typo
Revision 1.21 2006/05/01 00:15:22 shadzik
- added german description
- some cleanups
- STBR
Revision 1.20 2006/04/16 21:49:21 lmasko
- up to 1.1.13
Revision 1.19 2006/04/12 12:15:40 glen
- add kernel epoch, adapterized
Revision 1.18 2006/03/12 14:21:10 glen
- module-init-tools with /etc/modprobe.d dir
Revision 1.17 2006/03/12 12:31:50 qboosh
- more updates
Revision 1.16 2006/03/12 11:02:56 blues
- adapt to new building system
by ?ukasz Ma?ko masko at ipipan dot waw dot pl
Revision 1.15 2006/03/11 12:44:32 blues
- do the aliases theRightWat(TM)
Revision 1.14 2006/03/11 12:11:48 blues
- modules are not in conflict with modules from kernel. release 2.
Revision 1.13 2006/03/06 23:17:20 djurban
- update to 1.1.12
Revision 1.12 2006/02/08 23:02:58 zawadaa
- up to 1.1.11
Revision 1.11 2006/01/22 20:19:13 blues
- 1.0.9 - builds, seems to be working (no chance to test it :(
Revision 1.10 2006/01/15 23:34:35 blues
- don't overwrite kernel module - put it into misc (rel.2)
Revision 1.9 2006/01/12 20:26:23 arekm
- sparc/ppc fixes
Revision 1.8 2006/01/09 23:52:38 zawadaa
- up to 1.1.8
Revision 1.7 2006/01/07 19:36:31 zawadaa
- up to 1.1.7
Revision 1.6 2005/10/25 15:43:46 zawadaa
- up to 1.1.6, test...
Revision 1.5 2005/09/16 13:06:35 jpc
- make -devel depend on kernel-module-build version
Revision 1.4 2005/09/15 18:25:05 sparky
- prepared for kernel >= 2.6.13: link Module.symvers
Revision 1.3 2005/08/29 23:34:26 jpc
- sort R:
- move the ieee80211 includes to %%{_kernelsrcdir}
Revision 1.2 2005/07/21 18:51:33 qboosh
- pl, typos
Revision 1.1 2005/07/20 15:23:16 jpc
- new spec based on ipw2200.spec
More information about the pld-devel-en
mailing list