ChangeBlog  •  Archiwum  •  Kategorie  •  Artykuły  •  Galeria  •  Czytelnicy  •  Rupieciarnia
RSS wpisów  |  RSS komentarzy
Paczkujemy Vima z CVS

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