Tuesday, October 7, 2008

Ужасы Firefox 3

Убил пол воскресенья на запоздалый переход с Bon Echo. В результате никто никуда не перешел, а моя кошка имела возможность весь день наблюдать, как я извергал проклятия на все что попадалось под руку, то есть на следующее:

  1. FreeBSD 7.0 с найсвежайшими портами, но несвежими установленными пакетами.
  2. Firefox 3.0.3 source code.
  3. Cairo 1.4.10.
  4. SQLite 3.6.3.

Нужно заметить, что Firefox я собираю всегда руками, а не ставлю из портов, традиция чего тянется еще с версии 1.0, когда для компилирования под FreeBSD требовалось терпение и выносливость, как у солдат армии Ксенофонтовского Кира. К чему, спрашивается, такой героизм и самопожертвования? Если быть честным, но всему виной давно потерявшее меру собственное занудство и маниакальное желании собрать Firefox как можно более легким. Но, не в этот раз.

gnash может заворачиваться в plugin для mozilla, но с условием, что он собран с gtk2. Firefox 2 у меня живет с gtk1, во-первых, потому что gtk1 быстрее 2-й версии, а во-вторых, потому что в нем отсутствует сглаживание шрифтов, которое я ненавижу каждой молекулой своих глаз. Понятно, что правильно воспитывая fontconfig сглаживание можно убирать, что я и делаю, чтобы радоваться emacs'у, собранному с gtk2, но это не мешает gtk1 оставаться good enough для Firefox. Раньше не мешало.

Стало быть, что мы делаем? Скачиваем Firefox 3.0.3 и чуточку редактируем спрятанный .mozconfig от Bon Echo? Ага, держите карман шире.

Выясняется, что тот nspr, что у меня уже установлен -- слегка outdated, nss -- тоже, Cairo им нужно версии 1.6, а sqlite, который оне полагают у меня есть, должен быть новее, чем самая самая последняя версия в портах FreeBSD. Ну, ради б-га, пускай берут все вышеперечисленное из своего tarball, раз оно там заботливо положено, да? Wishful thinking.

configure и последующий make идут так тихо и гладко, как капельки дождя по стеклу за окном. Вы делаете себе крепчайший кофе и вдыхаете свежий осенний воздух из открытой двери балкона, рассуждая, что октябрь и серенькое небо, несмотря на известные недостатки, обладают тем преимуществом, что дают возможность нажать на тормоз сумасшедшей машине жизни XXI века, чтобы безопасно выйти с нее и размять уставшие члены. Как там у Поупа:

Здесь листья лип оделись желтизной.
Давно ль они нам тень дарили в зной?
В тиши лесов хранит безмолвье птичий
Народ, презрев свой певческий обычай.
Утратив аромат, хоть слезы лей,
Поникли нежные цветы лилей.

Вы мечтательно потягиваетесь, кошка мирно посапывает на кресле рядом, капли дождя продолжают монотонно маршировать. Вы поворачиваетесь к xterm'у и обнаруживаете, что кое-кто на тормоз уже нажал, потому что make отвалилось с воплем ld о невозможности найти библиотеку sqlite, где-то после 5 минут компилирования.

Вы смотрите в чем дело и ничего не понимаете: sqlite оно уже собрало (тот что идет в комплекте с Firefox), путь для ld к библиотеке указан. Так какого же тогда дьявола? Вы лезете в порт FreeBSD чтобы посмотреть на возможные имеющиеся решения и видите патч который добавляет к опциям компиляции sqlite путь в CFLAGS, а для ld -- содержимое %%PTHREAD_LIBS%%. Не слишком обнадеживающе. Что там, кстати, у нас должно содержаться в %%PTHREAD_LIBS%%? Это лучше симулировать:

% cat Makefile.sample
PTHREAD_LIBS=-pthread
GECKO_PTHREAD_LIBS!=gcc -dumpspecs | grep -m 1 pthread | sed -e 's|^.*%{\!pg: %{pthread:|| ; s|}.*$$||'

foo:
       @echo '%%PTHREAD_LIBS%%' | \
                 sed -e 's|%%PTHREAD_LIBS%%|${PTHREAD_LIBS:C/-pthread/${GECKO_PTHREAD_LIBS}/}|'

% make -f Makefile.sample
-lpthread

Обратите внимание на элегантный способ получения из исходного коварного -pthread старого знакомого -lpthread. Клянусь Герой, чтение FreeBSD'шных портов доставить вам немало минут радости.

Короче говоря -- ничего такого полезного тот патч не приносит. Но мы его накладываем, говорим "авось", переконфигурируем Firefox, ждем минут 5 и опять наблюдает ругню ld.

Гм. Тут вам приходит на ум низкая мысль руками добавить в строчку компиляции -L/usr/local/lib, чтобы оно слилось в объятьях с системным sqlite. Хи-хи-хи, говорите вы голосом Юли Тимошенко, наблюдая за продолжением компиляции Firefox и потираете руки. Как бы не так.

Начинается какое-то совершенно неудобоваримые мямлянье от nss, прекратить которое у вас падает желание одновременно с понижением температуры кофе в чашке. На память приходят забытые образы сражений с Firefox 1.5.x, повторить которые вам хочется так же, как Киасакру подвергаться опасностям в преследовании ассирийцев, поэтому вы решаете поступить, как мидийский царь и возложить на кого-нибудь другого вытаскивание каштанов из огня, сиречь идете к порту FreeBSD, надеясь, что не капитальные изменение его вами удовлетворит ваше стремление и решат проблему с линкованием sqlite и дрянным поведением nss.

Тут оказывается, что несмотря на ваши ухищрения с минимизацией обновлений системы, гадкий порт настаивает, чтобы вы провели обновления cairo, потому что добродушные люди, писавшие bsd.gecko.mk добавили туда по умолчанию зависимость от системного cairo, когда вы хотите использовать тот, что идет в комплекте с Firefox. О боги, доживу ли я до этих дней, когда не нужно будет мне искать, как золото в руде, как жалкий, старый дуралей, блеск радости модификации, бурча всем атанде?

Косметически отделав порт, вы скептически говорите make и идете повторно делать кофе. Ища чем заняться и предвкушая gnash, вы думаете, что теперь сможете, наконец, снести никому не нужный gtk1. Приготовившись к самому худшему, вас озаряет почти что улыбкой окно xterm'а, где видно благополучное завершение компиляции. Как любит говорить один мой знакомый (по ничтожнейшим причинам вроде этой): жизнь налаживается.

Жаль, я так и не понял, как у Firefox с gtk2 одновременно указать шрифт Arial для всех диалогов и меню и LucidaTypewriter для URL bar. Стандартное в userChrome.css:

* {
       font-family: Arial !important;
       font-size: 9pt !important;
}
#urlbar {
       font-family: LucidaTypewriter !important;
       font-size: 9pt !important;
}

не помогает. Все равно в URL bar остается Arial.

Кто не знает, то теперь Firefox 3 игнорирует /usr/local/lib/browser_plugins, чтобы не упасть от plugins от прежних версий. Могли бы и снизойти, чтобы предупредить.

А еще Firefox 3 перестал поддерживать pkg-config. Очень удобно стало, например, собирать mplayerplug-in. Помните, что желала Берти Вустеру в детстве одна из его тетушек? Одеть на шею веревку с камнем и броситься в озеро. Именно это хочется посоветовать сделать тому, кто убедил девелоперов Firefox в бессмысленности pkg-config. В общем, как там у Поупа:

Струится ливень, и, полны печали,
поникли, птицы замолчали.
тем улыбка Делии одна
небу возвратить вольна,
природе прежнее обличье,
роз и пенье птичье.

No comments:

Post a Comment