librsvg

Z funus.net

librsvg to biblioteka oraz narzędzia do obsługi grafik wektorowych w formacie SVG.

Z librsvg może korzystać MediaWiki do renderowania grafik wektorowych. Alternatywnie może używać ImageMagicka, niestety obsługa SVG w tym ostatnim jest fatalna i tak naprawdę nie nadaje się do użytku. Ponieważ na moim serwerze WWW librsvg nie jest zainstalowane, więc postanowiłem to zrobić sam. Niestety, tu dała o sobie znać cała kaskada zależności...

Spis treści

[edytuj] Instalacja librsvg

Tak więc próbuję zbudować librsvg w wersji 2.20, która wymaga paru innych pakietów:

  • glib2 >= 2.12.0
  • gdk-pixbuf-2.0 >= 1.37
  • libxml-2.0 >= 2.4.7
  • pangoft2 >= 1.2.0
  • pangocairo >= 1.2.0
  • cairo >= 1.2.0
  • cairo-png >= 1.2.0
  • fontconfig >= 1.0.1

[edytuj] Instalacja glib2

Pierwsza rzecz to instalacja biblioteki glib2, najnowsza wersja to 2.15.5. Instalacja przebiegła bezproblemowo.

[edytuj] Instalacja libxml2

Kolejnym krokiem była instalacja libxml2 w wersji 2.6.31. Tu także obyło się bez problemów.

[edytuj] fontconfig

Jako następny zbudowałem pakiet fontconfig w wersji 2.5.0 (była tam co prawda wersja 2.5.91, ale – jak sądzę – to jakiś "rc" przed wersją 2.6, więc ściągnąłem 2.5).

[edytuj] cairo

Pora na cairo, kolejną bibliotekę do obsługi grafik wektorowych. Pobrałem wersję 1.4.14.

Co ciekawe, pakiet cairo opcjonalnie wykorzystuje librsvg. A librsvg ma cairo w swoich zależnościach. Zapętlili się?

Cairo podczas kompilacji próbował gdzieś włączyć plik nagłówkowy X11/extensions/Xrender.h, a takiego niestety na tym serwerze nie było. Spróbowałem więc skonfigurować cairo tak:

./configure --disable-xlib-xrender

Niestety, nic to nie dało. Więc spróbowałem jeszcze drastyczniej:

./configure --disable-xlib-xrender --disable-xlib

I tym razem udało się skompilować.

[edytuj] pango

Kolej na pango. Ściągnąłem wersję 1.19.3. Zbudowało się bezproblemowo i załatwiło zależności: pangoft2 i pangocairo.

[edytuj] gdk-pixbuf

Potrzebny jest jeszcze gdk-pixbuf-2.0, ale wygląda na to, że nie jest to osobny pakiet (jak kiedyś), lecz część gtk+ (w sieci można znaleźć pakiet gdk-pixbuf, ale to staroć do pierwszej edycji GTK).

Chciałem pójść na łatwiznę i zainstalować całe GTK+. Ściągnąłem wersję 2.12.6, która z kolei wymagała:

  • glib2 >= 2.13.5
  • atk >= 1.9.0 [1]
  • pango >= 1.17.3 (1.19)
  • cairo >= 1.2.0.

Glib, pango i cairo zbudowałem już wcześniej. Pozostało zainstalować atk (jest to to jakiś gnomowski "accessibility framework"). Zbudowałem wersję 1.21.5.

Potem okazało się, że GTK+ chce jeszcze libtiff. Niby może bez tej biblioteki, ale radzą jednak zainstalować. Ściągnąłem wersję 3.8.2. Nawiasem mówiąc, konfigurator GTK+ nie sprawił się tutaj i przy sprawdzaniu libtiff nie uwzględnił odpowiednich (niestandardowych) ścieżek.

Niestety, GTK+ uparło się na korzystanie z rozszerzenia XRender (libXreder), którego na moim serwerze nie było. Na szczęście wyczytałem gdzieś, że można gdk-pixbuf "wyciągnąć" z GTK+ i zbudować samodzielnie. Wymagało to wycięcia fragmentów dotyczących XRender z pliku configure, żeby doprowadzić konfigurację do końca.

Potem wystarczyło już wejść do podkatalogu gdk-pixbuf, tam zbudować i zainstalować jak zwykle. Wówczas pojawił się kolejny problem: ostrzeżenie, że nie został utworzony plik gdk-pixbuf.loaders i mam sam sobie go zrobić za pomocą programu gdk-pixbuf-query-loader. Niestety, ten durny programik generował co prawda jakąś listę, ale ze ścieżkami do katalogów systemowych (/usr/lib/...), zamiast tam, gdzie został zainstalowany. A w tych systemowych owszem, były jakieś loadery, ale z innych wersji... Na razie postanowiłem zignorować ten problem.

Ponowna próba skonfigurowania librsvg zakończyła się powodzeniem. No, prawie. Konfigurator orzekł, że przydałyby się jeszcze dwie biblioteki: libcroco (do obsługi CSS w plikach SVG) i libgsf (do obsługi skompresowanych plików SVG). Niby może się bez nich obejść, ale specyfikacja SVG wymaga tej funkcjonalności. A więc...

[edytuj] libcroco

Ściągam wersję 0.6.1. Instalacja przebiegła bez żadnych problemów.

[edytuj] libgsf

Pobrałe wersję 1.14.7. Kilka warningów przy kompilacji (m.in. brak obsługi formatu bz2), poza tym bez problemów.

[edytuj] Konfiguracja MediaWiki

Trzeba było jeszcze skonfigurować MediaWiki. W pliku LocalSettings.php dopisałem coś w stylu:

$wgSVGConverters['my_rsvg']  = '/ścieżka/do/mojego/rsvg -w$width -h$height $input $output';
$wgSVGConverter              = 'my_rsvg';

i usunąłem stare miniaturki.

rm -r wiki/images/thumb/

I sprawdziłem, czy działa. Przez chwilę miałem wrażenie, że chyba nie do końca. Okazało się jednak, że to mój lokalny squid skeszował sobie te stare miniaturki i nie chciał i przeładować.

[edytuj] Efekt

W efekcie mogę wreszcie używać obrazków w formacie SVG na wiki. Oto przykład ;-)

Skull and crossbones.svg