Dnia piątek, 21 kwietnia 2006 12:59, Arkadiusz Miskiewicz napisał(a):
> On Friday 21 April 2006 12:46, Bartosz Świątek wrote:
> > Witam,
> >
> > Pisałem o tym już kiedyś, ale nie zaszkodzi jeszcze raz.
> > Oprę się na przykładzie btsco.spec bo akurat jego przed chwilą
> > przerabiałem. Problem polega na tym gdy buduje się speca z opcją
> > --without dist_kernel dlatego, że już na wstępie jest burak. Kto o
> > zdrowym umyśle ma w drzewku jądra config-nondist ? Nikt.
>
> Nie nikt tylko masz go tam zrobić jak chcesz --without dist_kernel używać.

Po co ? Da rade i bez.

>
> > Więc, żeby zbudować speca trzeba
> > zrobić symlinka do .config. Nie lepiej w specu od razu podać, że ma
> > patrzyć do .config ? Lepiej. Druga sprawa to linkowanie.
> >
> > 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
> >
> > Dlaczego scrypt najpierw sprawdza czy jest config-nondist (znaczy wywala
> > się bo ze względów oczywistych go nie ma) a dopiero później kiedy on już
> > ma istnieć probuje go tworzyć robiąc symlinka do .config ? :) paranoja.
>
> Jak to dlaczego? Bo potrzebujesz mieć ten konfig w katalogu o/, a nie
> w /usr/src/costam.

Jeśli robie czysty make to nie potrzebuje go w o/.

>
> > W
> > ogóle całe linkowanie np. Module.symvers jest zbędne dla jajek
> > niepldowych.
>
> Dlaczego zbędne? Bez tego nie generują się zależności pomiędzy modułami.

Generują, mówimy tu o kernelu niedystrybucyjnym, czyli ktoś musiał go 
kompilować, są też na pewno źródła. Modules.symvers istnieje w drzewku. 
Mówie, że niepotrzebne jest linkowanie typu Modules.symvers-nondist -> 
Modules.symvers.

>
> > Następna sprawa to już makro %{__make} z opcjami. Dzięki opcji M=$PWD
> > O=$PWD/o budowa się wywala bo nie może rozpoznać wersji jądra.
>
> Przykład podaj.
>
> > Z powodu
> > innych opcji budowa też się wywala (głównie z powodu braku praw zapisu w
> > drzewku jądra).
>
> Po to są te opcje by w drzewku jądra się nic nie musiało zapisywać.

Nie zrozumieliśmy się. Właśnie kiedy są te opcje to probuje coś zapisywać w 
drzewku jądra.

>
> > Najlogiczniejszym krokiem jest więc pójść za radą autorów
> > danego modułu (tutaj btsco) i zrobić czyste %{__make} bez niczego. Paczka
> > się wtedy buduje bez problemu.
>
> Jednym tak, innym nie.
>
> > Należałoby przemyśleć jeszcze raz sposób
> > budowania takich specy dla kernelów niedystrybucyjnych, a sposób dla
> > jądra pldowego zostawić jak jest skoro działa.
>
> Z tym budowaniem zawsze były jazdy. Konkretnie coś zaproponuj to się
> popatrzy. Jakiś spec przerobiony wg Twojej ideii itp.
>
> Obecne budowanie pewnie ma jakieś wady ale problemów jest sporo:
> - czyste /usr/src/linux vs częściowo mielone /usr/src/linux
> - budowanie modułów gdy /usr/src/linux jest read only
> - budowanie kilku modułów poza /usr/src/linux ale tak by się odpowiednie
> zależności pomiędzy tymi modułami generowały (np. np paczka ieeecostam
> generująca na raz kilka *.ko zależnych od siebie)
> - budowanie modułu X z zależnościami od drugiego zewnętrznego moduły Y
> również z osobnej paczki (trzeba dostarczać Module.symver z budowania Y)
> - budowanie UP/SMP na raz
> - o czymś pewnie zapomniałem
>

Moja propozycja wygląda tak (patrz załączony btsco.spec). Nie jest ostateczna 
i chętnie popolemizuję nad jej zmianami. Jakoś trzeba to zmienić, żeby to 
działało w dwie strony. W obecnej wersji buduje się u mnie bez konieczności 
jakiegokolwiek linkowania czegokolwiek.
# $Revision: 1.8 $, $Date: 2006/04/12 12:15:40 $
#
# Conditional build:
%bcond_without  dist_kernel     # without kernel from distribution
%bcond_without  kernel          # don't build kernel modules
%bcond_without  userspace       # don't build userspace utilities
%bcond_without  smp             # don't build SMP module
%bcond_with     verbose         # verbose build (V=1)
#
%define rel     2
Summary:        Bluetooth-alsa Project
Summary(pl):    Projekt Bluetooth-alsa
Name:           btsco
Version:        0.41
Release:        %{rel}
License:        GPL
Group:          Applications/Sound
Source0:        
http://dl.sourceforge.net/bluetooth-alsa/%{name}-%{version}.tar.gz
# Source0-md5:  111efb0f7092c92c4dd376eec96aa2e7
Patch0:         %{name}-readme-pl.diff
URL:            http://sourceforge.net/projects/bluetooth-alsa/
%if %{with kernel}
%{?with_dist_kernel:BuildRequires:      kernel-module-build}
%endif
%if %{with userspace}
BuildRequires:  alsa-driver-devel >= 1.0.9-1
BuildRequires:  alsa-lib-devel >= 1.0.9-1
BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  bluez-libs-devel >= 2.21-1
BuildRequires:  libao-devel >= 0.8.6-1
%endif
BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)

%description
This project provides a way to use a bluetooth headset with Linux. We
do this currently by making an alsa kernel driver which uses bluez to
reach the headset. It works well enough now to get voice-quality audio
to and from most headsets.

%description -l pl
Dzięki temu oprogramowaniu można używać zestawów słuchawkowych
Bluetooth Headset z Linuksem. Osiągnięto to dzięki zbudowaniu alsowego
modułu do jądra, który to używa systemu bluez do komunikacji z takim
zestawem. Współpracuje z większością zestawów, ograniczeniem w
komunikacji jest często urządzenie USB, które to może mieć
nieobsługiwane częściowo protokoły, wskazówka: hciconfig hciXXX
revision. W skrajnym wypadku można próbować użyć innego urządzenia
USB.

%package -n kernel-char-btsco
Summary:        Linux ALSA kernel driver for Bluetooth Headset
Summary(pl):    Sterownik ALSA do jądra Linuksa dla Bluetooth Headset
Release:        [EMAIL PROTECTED]
Group:          Base/Kernel
%{?with_dist_kernel:%requires_releq_kernel_up}
Requires(post,postun):  /sbin/depmod
Requires:       kernel-sound-alsa

%description -n kernel-char-btsco
Linux ALSA kernel driver for Bluetooth Headset named snd_bt_sco.

%description -n kernel-char-btsco -l pl
Sterownik ALSA do jądra Linuksa dla Bluetooth Headset o nazwie
snd_bt_sco.

%package -n kernel-smp-char-btsco
Summary:        Linux ALSA kernel driver for Bluetooth Headset (SMP)
Summary(pl):    Sterownik ALSA do jądra Linuksa dla Bluetooth Headset (SMP)
Release:        [EMAIL PROTECTED]
Group:          Base/Kernel
%{?with_dist_kernel:%requires_releq_kernel_smp}
Requires(post,postun):  /sbin/depmod
Requires:       kernel-smp-sound-alsa

%description -n kernel-smp-char-btsco
Linux ALSA kernel (SMP) driver for Bluetooth Headset named snd_bt_sco.

%description -n kernel-smp-char-btsco -l pl
Sterownik ALSA do jądra Linuksa SMP dla Bluetooth Headset o nazwie
snd_bt_sco.

%prep
%setup -q
%patch0 -p1

%build
%if %{with userspace}
%{__aclocal}
%{__autoconf}
%{__autoheader}
%{__automake}
%configure

%{__make}
%endif

%if %{with kernel}
%if %{with dist_kernel}
cd kernel
# kernel module(s)
for cfg in %{?with_dist_kernel:%{?with_smp:smp} up}%; 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
%if %{with dist_kernel}
        %{__make} -C %{_kernelsrcdir} O=$PWD/o prepare scripts
%else
        install -d o/include/config
        touch o/include/config/MARKER
        ln -sf %{_kernelsrcdir}/scripts o/scripts
%endif

        # patching/creating makefile(s) (optional)
        %{__make} -C %{_kernelsrcdir} clean \
                RCS_FIND_IGNORE="-name '*.ko' -o" \
                SYSSRC=%{_kernelsrcdir} \
                SYSOUT=$PWD/o \
                M=$PWD O=$PWD/o \
                %{?with_verbose:V=1}

        %{__make} -C %{_kernelsrcdir} modules \
                CC="%{__cc}" CPP="%{__cpp}" \
                SYSSRC=%{_kernelsrcdir} \
                SYSOUT=$PWD/o \
                M=$PWD O=$PWD/o \
                %{?with_verbose:V=1}

       for mod in *.ko; do
                mod=$(echo "$mod" | sed -e 's#\.ko##g')
                mv $mod.ko ../$mod-$cfg.ko
        done
done

%else
cd kernel

%{__make}

%endif

%endif

%install
rm -rf $RPM_BUILD_ROOT

%if %{with userspace}
install -d $RPM_BUILD_ROOT%{_bindir}

for file in avdtp/avtest sbc/rcplay sbc/sbcenc sbc/sbcinfo a2play btsco2 btsco 
; do
        install $file $RPM_BUILD_ROOT%{_bindir}
done
%endif

%if %{with kernel}
install -d $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}{,smp}/misc
        %if %{without dist_kernel}
        for mod in *.ko; do
                #nmod=$(echo "$mod" | sed -e 's#-nondist##g')
                pwd
                install kernel/$mod 
$RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc/$nmod
        done
        %else
        for mod in *-up.ko; do
                nmod=$(echo "$mod" | sed -e 's#-up##g')
                pwd
                install $mod 
$RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc/$nmod
        done
        %endif

        %if %{with smp}
        for mod in *-smp.ko; do
                nmod=$(echo "$mod" | sed -e 's#-smp##g')
                pwd
                install $mod 
$RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}smp/misc/$nmod
        done
        %endif
%endif

%clean
rm -rf $RPM_BUILD_ROOT

%post -n kernel-char-btsco
%depmod %{_kernel_ver}
echo "after install this package, remember add lines like this:"
echo "alias snd-card-1 snd-bt-sco"
echo "alias sound-slot-1 snd-bt-sco"
echo "to %{_sysconfdir}/modprobe.conf"

%postun -n kernel-char-btsco
%depmod %{_kernel_ver}

%post -n kernel-smp-char-btsco
%depmod %{_kernel_ver}smp
echo "after install this package, remember add lines like this:"
echo "alias snd-card-1 snd-bt-sco"
echo "alias sound-slot-1 snd-bt-sco"
echo "to %{_sysconfdir}/modprobe.conf"

%postun -n kernel-smp-char-btsco
%depmod %{_kernel_ver}smp

%if %{with userspace}
%files
%defattr(644,root,root,755)
%doc README README.PL.txt
%attr(755,root,root) %{_bindir}/*
%endif

%if %{with kernel}
%files -n kernel-char-btsco
%defattr(644,root,root,755)
/lib/modules/%{_kernel_ver}/misc/snd-bt-sco.ko.gz
%endif

%if %{with smp}
%files -n kernel-smp-char-btsco
%defattr(644,root,root,755)
/lib/modules/%{_kernel_ver}smp/misc/snd-bt-sco.ko.gz
%endif

%define date    %(echo `LC_ALL="C" date +"%a %b %d %Y"`)
%changelog
* %{date} PLD Team <[EMAIL PROTECTED]>
All persons listed below can be reached at <cvs_login>@pld-linux.org

$Log: btsco.spec,v $
Revision 1.8  2006/04/12 12:15:40  glen
- add kernel epoch, adapterized

Revision 1.7  2006/04/09 09:44:45  aflinta
- fixed smp scripts, release 2

Revision 1.6  2006/04/04 05:24:32  wolvverine
- up to 0.41

Revision 1.5  2006/04/04 00:52:17  wolvverine
- correct log

Revision 1.4  2006/04/04 00:47:52  wolvverine
- patch from Lukasz Masko ed <at> yen <dot> ipipan <dot> waw <dot> pl

Revision 1.3  2005/12/03 10:39:19  qboosh
- revised docs and userspace build
- I don't see any reason for ExclusiveArch

Revision 1.2  2005/12/03 10:04:45  qboosh
- userspace bcond, cosmetics

Revision 1.1  2005/11/28 19:26:46  abram
- initial
- works on i686, but i can not test it on other platforms
_______________________________________________
pld-devel-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl

Odpowiedź listem elektroniczym