info: qt.spec
Tomasz Kłoczko
kloczek w rudy.mif.pg.gda.pl
Śro, 16 Wrz 1998, 01:57:07 CEST
On Mon, 14 Sep 1998, Jacek Konieczny wrote:
> Czesc,
>
> Oto moja proba przerobienia czegos dla PLD.
> Standardowe pakiety Qt byly straszne, wiec sprobowalem cos z tym zrobic.
Szkoda, że wcześneij nie zajrzałeś do zasobów PLD-stable bo qt 1.40 jest
już tam od dłuższego czasu.
Niemniej i tak kilka komentaży które zapewne Ci się przydadzą :)
[..]
> BuildRoot: /tmp/RHBuildRoot
Jeżeli często i gęsto kompilujesz różne rzeczy do rpm-ów to wstawianie
tutaj stałej nazwy będzie powodować kłopoty. Dlatego zalecane jest wręcz
żeby wygladało to tak:
BuildRoot: /tmp/%{name}-%{version}-root
[..]
> %prep
> %setup -n qt-1.33
Jeżeli po rozpakowaniu tara ze źródłami masz katalog %{name}-%{version}
to dodawanie "-n coś_tam" jest niepotrzebne ponieważ domyśnie %setup ma
parametr "-n %{name}-%{version}". Dodatkowo powyższe spowoduje, że przy
próbie wykorzystania speca na potrzeby wersji następnych będziesz miał
dodatkwe miejsce gdzie będzisz musiał grzebnąć w celu dostosowania speca
do nowej wersji.
> %build
> make linux-gcc-shared CFLAGS="-nostdinc++ $RPM_OPT_FLAGS" "CC=g++"
> LD_LIBRARY_PATH=/usr/X11R6/lib make CFLAGS="-nostdinc++ $RPM_OPT_FLAGS" CC="g++"
Przejrzałem mana do g++ i przy opisie -nostdinc++ znalazłem coś takiego:
-nostdinc++
Do not search for header files in the standard
directories specific to C++, but do still search
the other standard directories. (This option is
^^^^^^^^^^^^^^^
used when building libg++.)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Bez tej opcji też wszystko ładnie się kompiluje. Czy są jakieś szczególne
powody że to dodałeś ?
Dodanie CC=g++ też nic nie zmienia bo w trakcie kompilacji plików .cpp
jest wykorzystywana zmienna CPP która zawiera g++.
> %install
Tutaj brak na początku "rm -rf $RPM_BUILD_ROOT"
Przy ponownym kompilowaniu pakietu i próbie jego instalacjhi w
odseparowanym drzewku bez tego o ile poprzednie binarki były wadliwe lub
zawierały więcej plików nićż obecnie instyalowana wersja mogą wynikąć
kłopoty, co powodować będzie, że pośrednio cała procedura nie będzie
powtażalna.
> install -d $RPM_BUILD_ROOT/usr/X11R6/bin
> install -d $RPM_BUILD_ROOT/usr/X11R6/man/man1
> install -d $RPM_BUILD_ROOT/usr/X11R6/man/man3
> install -d $RPM_BUILD_ROOT/usr/X11R6/lib
Powysze można skrócić do:
install -d $RPM_BUILD_ROOT/usr/X11R6/{bin,man/man{1,3},lib}
> install bin/moc $RPM_BUILD_ROOT/usr/X11R6/bin/moc
> install lib/libqt.so.1.33 $RPM_BUILD_ROOT/usr/X11R6/lib
> cp -fR man/. $RPM_BUILD_ROOT/usr/X11R6/man
> install -d $RPM_BUILD_ROOT/usr/X11R6/include
> cp -fR include/. $RPM_BUILD_ROOT/usr/X11R6/include
>
[.wycięte różne rzeczy.]
Zajrzyj do speca jakiego sprokurowałem, bo mi to wyciołem zajeło chyba 4
linijki.
> cp $RPM_SOURCE_DIR/qt.sh $RPM_BUILD_ROOT/etc/profile.d/qt.sh
> cp $RPM_SOURCE_DIR/qt.csh $RPM_BUILD_ROOT/etc/profile.d/qt.csh
>
> %post
> /sbin/ldconfig
>
> %postun
> /sbin/ldconfig
Powyższe jest niepoprawne lub będzie poprawne o ile w nagłówku znajdzie
się dodatkowo:
Perereq: /sbin/ldconfig
Powinno być:
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
W powyszym przypadku /sbin/ldconfig jest automatycznie dodawane do listy
Perereq.
> %files
> %doc ANNOUNCE LICENSE README.QT FAQ PORTING README changes-1.30 changes-1.31 changes-1.32 changes-1.33 html tutorial examples
^^^^^^^
Po co to przecież tu już jest konkretny port qt :>
> %attr(755,root,root,755) /etc/profile.d/*
> %attr(755,root,root,755) /usr/X11R6/lib/libqt.so.1.33
Czwarty parametr w tym przypadku jest nie potrzebny. Żeby było
uniwersalnie to powinno być:
%attr(755,root,root) /usr/X11R6/lib/lib*.so.*.*
> %files devel
> %attr(644,root,root,-) /usr/X11R6/bin/moc
> %attr(644,root,root,-) /usr/X11R6/man/man1/moc.1
> %attr(644,root,root,-) /usr/X11R6/man/man3/*.3qt
> %attr(644,root,root,755) /usr/X11R6/include/*
Brak /usr/X11R6/lib/lib*.so
W wersji jaka jest w PLD-stable powyższe %files wyglądają tak:
%files
%defattr(644, root, root, 755)
%doc ANNOUNCE LICENSE README* FAQ PORTING changes-*
/usr/lib/lib*.so.*.*
%files devel
%defattr(644, root, root, 755)
%doc html tutorial examples doc
%attr(755, root, root) /usr/bin/*
%attr(644, root, man) /usr/man/man[13]/*
/usr/include/qt
%attr( -, root, root) /usr/lib/lib*.so
> %changelog
> * Mon Sep 14 1998 Jacek Konieczny <jajcus w zeus.polsl.gliwice.pl>
>
> Przeróbki oryginalnego speca Troll-ów:
> - umożliwienie kompilacji z konta zwykłego użytkownika
> - dodanie BuildRoot oraz usunięcie wszystkich chmod, chown z %install
> - pliki przeniesione do hierarchi /usr/X11R6
> - dokumentacja html, przyklady i tutorial oznaczone jako %doc
> - dodane pliki do /etc/profile.d ustawiające QTDIR (potrzebne
> do kompilacji niektórych aplikacji)
> - kompilator zmieniony z gcc na g++, ale bez nagłówków C++
> w ten sposób nna pewno będzie użyty właściwy kompilator C++
> Niestety dochodzi zależność od libstdc++
Primo komentaże w %changelog obowiązkowo po angielsku (niestety).
Z libstdc++ nic nie wycudujesz raczej gdyż qt jest bilioteką napisaną w
C++ ;>
Kolejna sprawa. Ja do qt dodałem patch który nie kompiluje wszystkiego w
tutorial examples.
Sprawa dodatków w /etc/profile.d .. to też nie jest potrzebne gdyż korekta
QTDIR skoro jest tylko na potrzeby kompilacji to powinna być w specach
reszty pakietów (po co na produkcyjnych stacjach w środowisku zmienna
QTDIR skoro nikt tam niczego pod qt nie będzie kompilował ?). Jeżeli już
to powinno się to znaleźć ale w pakiecei devel ale IMHO nie tędy droga,
bo potem ktoś weźmie nasze obce qt-devel i jakiś nasz pakiet ze stuffem
do KDE i mu się coś nie będzie chciało przebudować.
kloczek
--
-----------------------------------------------------------
*Ludzie nie mają problemów, tylko sobie sami je stwarzają*
-----------------------------------------------------------
Tomasz Kłoczko, sys adm @zie.pg.gda.pl|*e-mail: kloczek w rudy.mif.pg.gda.pl*
Więcej informacji o liście dyskusyjnej pld-devel-pl