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! :)