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