Nie mogę tutaj pominąć Najlepszego Z Edytorów, więc Vim też musi zostać spakietowany :)
1. Źródła Normalne, z CVS. Zakładam, że lokalnie leżą w katalogu ~/CVS/vim
2. Próbna instalacja Vim z CVS posiada "od razu" skrypt ./configure, więc odpada jego generowanie. Decyduję się na opcje:
./configure --disable-multibyte --disable-hangulinput --enable-gui=no \ --without-gnome --disable-acl --with-tlib=tinfo --disable-gpm \ --disable-nls --without-x --with-compiledby=Hoppke --prefix=/usr
Czyli rezygnuję z obsługi unikodu i języków azjatyckich, wyłączam gui (niedawno przestałem używać gvima, bo doszedłem do wniosku, że zwykły vim w xtermie mi wystarcza. Tak, wiem, dziwak ze mnie. Ale ja naprawdę nie korzystałem z żadnej z funkcji GUI - nie klikałem na ikony na pasku narzędzi, zamiast wybierać "File-<Save" robiłem ":w", itp. GUI było mi i tak niepotrzebne, więc...
Wyłączam też obsługę acl-i (mam XFS, ale nie używam acl-i - więc dla pewności nie pozwolę vim-owi nawet spróbować ich użyć (gdyby kiedyś, omyłkowo zadecydował że jednak mu wolno))
Bibliotekę ncurses mam skompilowaną w dwóch częściach - jako właściwą bibliotekę libncurses i bibliotekę odpytywania terminali libtinfo. Vim domyślnie próbowałby się skompilować w oparciu o "pełną" wersję libncurses, ale tak naprawdę do szczęścia wystarczy mu sama libtinfo. Dlatego też jako biblioteki operującej na terminalu każę mu użyć libtinfo.
Potem jeszcze wyłączam wsparcie dla X-ów i gpm, wyłączam "lokale", no i oczywiście zaznaczam kto też tak okaleczył Vima ;) (to ostatnie będzie widać np. po "vim --version")
"make install DESTDIR=/shm" udaje się, widzę tam potem taką strukturę katalogów (pliki pomijam, zbyt wiele by ich było):
usr/
|-bin/
|-man/
| \-man1/
\-share/
\-vim/
\-vim62b/
|-colors/
|-compiler/
|-doc/
|-ftplugin/
|-indent/
|-keymap/
|-lang/
|-plugin/
|-syntax/
|-tools/
|-tutor/
\-macros/
|-hanoi/
|-life/
|-maze/
\-urm/
Katalog usr/bin/ zawiera główne binarki i parę symlinków do nich. Trzeba będzie tam dodać symlink vim->vi, ze względu na moje lenistwo itd.
Dodatkowo usunąć będę musiał binarkę vimtutor, bo tutorial mi już nie będzie potrzebny.
Strony manuala pozostaną nienaruszone. A, nie, moment - jest tutaj strona manuala dla vimtutor, ją też będę musiał usunąć (skoro usuwam vimtutor, to po co mi manual do niego?)
Katalog usr/share/vim/vim62b/ zawiera różne luźne pliki i podkatalogi. Praktycznie wszystko tutaj jest potrzebne vimowi do pracy, ale widzę że będę mógł wywalić katalog lang/, bo zawiera tylko i wyłącznie pliki związane z menu w różnych językach (a ja nie używam tak czy siak NLS). Taki sam los czeka katalog tutor/. Oglądam też zawartość katalogu tools/... nie, on zawiera tylko jakieś głupie dodatki, też mi się nie przyda. Hmm, to samo chyba mogę powiedzieć i o katalogu keymap/ - on i tak nie będzie mi potrzebny do normalnego pisania tekstów. Reszta katalogów musi pozostać - doc/ zawiera pliki dla "online help" Vima, pozostałe zawierają schematy kolorów, wtyczki dla poszczególnych typów plików, reguły kolorowania składni itp. Jedyny katalog który można by jeszcze w miarę bezpiecznie usunąć, to macros/. Ale ja go sobie zachowam, może mi się przydać jako zbiór przykładów gdy samemu zechcę skrobnąć kilka poważniejszych makr.
3. Plik .spec
Summary: Edytor programisty "Vi Improved" Name: vim Version: %(date +%Y%m%d) Release: 1 License: GPL Group: Edytory BuildRoot: /var/tmp/%{name}-%{version} %description Vim jest jednym z najlepszych edytorów na świecie (jeśli nie najlepszym). Jest szybki, konfigurowalny, skryptowalny i w dużej mierze kompatybilny z najpopularniejszym w świecie Unices edytorem "Vi" %prep %setup -q -c -T cp -a /home/grzegorz/CVS/vim/* . %build %configure --disable-multibyte --disable-hangulinput --enable-gui=no \ --without-gnome --disable-acl --with-tlib=tinfo --disable-gpm \ --disable-nls --without-x --with-compiledby=Hoppke make %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} cd %{buildroot}%{_bindir} ln -s vim vi rm vimtutor rm %{buildroot}%{_mandir}/man1/vimtutor.1 cd %{buildroot}%{_datadir}/vim/vim* rm -rf lang tools tutor keymap %files %defattr(0644,root,root,0755) %attr(0755,root,root)%{_bindir}/* %{_mandir}/man*/*.gz %{_datadir}/vim %clean rm -rf %{buildroot} %{_builddir}/%{buildsubdir}
Preambuły nie trzeba opisywać, tag z wersją jest generowany identycznie jak w przypadku Midnight Commandera. Sekcja %prep też jest identyczna jak i poprzednio. Jedyna "nowość" dotyczy sekcji %install, gdzie po zainstalowaniu plików najpierw wchodzę do katalogu bin/, tworzę tam symlink od vi do vim oraz usuwam vimtutor. Potem usuwam jeszcze jego stronę manuala i te podkatalogi: lang/ tools/ tutor/ keymap/. Tutaj może tylko pokażę, w jaki sposób wchodzę do katalogu usr/share/vim/vim62b/ - załatwia to linijka:
cd %{buildroot}%{_datadir}/vim/vim*
Dzięki tej gwiazdce nie muszę używać numeru wersji vim-a. Bo prawdę mówiąc, to ja tego numeru nie znam. Teraz gdy np. z wersji 6.2beta vim przeskoczy na "pełną" 6.2, to ja nie będę musiał zmieniać pliku .spec. Ot, drobnostka, ale takie właśnie drobnostki ułatwiają życie.
Sekcja %files jest banalna, standardowe linijki dla binarek i manuali. I jedna dodatkowa załączająca /usr/share/vim/ wraz z zawartością. W porównaniu z Midnight Commanderem tym razem poszło wyjątkowo łatwo, a to dlatego, że nie trzeba było kombinować z prawami dostępu.
4. Budowanie pakietu udaje się za pierwszym podejściem. Ha! :)