-install -d kernel-{up,smp}
-
-# UP
-%{__make} clean
-%{__make} -C driver \
- CC=%{kgcc} \
- KERNELSRC="%{_kernelsrcdir}"
-install driver/adiusbadsl.o kernel-up
-
-# SMP
-CONFIG_SMP=y; export CONFIG_SMP
-%{__make} -C driver clean
-%{__make} -e -C driver \
- CC=%{kgcc} \
- KERNELSRC="%{_kernelsrcdir}"
-install driver/adiusbadsl.o kernel-smp/
-
-# Rest
-%{__make} \
- KERNELSRC="%{_kernelsrcdir}"
+%if %{with kernel}
+cd driver
+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
+ %{__make} -C %{_kernelsrcdir} O=$PWD/o prepare scripts
+
+%{__make} -C %{_kernelsrcdir} clean \
+ RCS_FIND_IGNORE="-name '*.ko' -o" \
+ M=$PWD O=$PWD/o \
+ %{?with_verbose:V=1}
+%{__make} -C %{_kernelsrcdir} modules \
+ RCS_FIND_IGNORE="-name '*.ko' -o" \
+ M=$PWD O=$PWD/o \
+ %{?with_verbose:V=1} \
+ USE_CMVS=%{?with_cmvs:1}%{!?with_cmvs:0}
+ mv eagle-usb{,-$cfg}.ko
+done
+cd -
+%endif
+
+%if %{with userspace}
+%{__aclocal} -I .
+%{__autoconf}
+%configure \
+ %{!?with_cmvs:--disable-cmvs} \
+ --with-dsp-dir=%{_datadir}/misc
+
+%{__make} -C driver/firmware \
+ CC="%{__cc}" \
+ OPT="%{rpmcflags}"
+%{__make} -C driver/user \
+ CC="%{__cc}" \
+ OPT="%{rpmcflags}"
+%{__make} -C pppoa \
+ CC="%{__cc}" \
+ OPT="%{rpmcflags}"
+%endif