Nobody about something

Автопатчи firefox под kde

Написано 25 апреля 2010 в 21:24 - Рубрики: *nix

Однажды, на просторах интернета, наткнулся вот на эту страницу.
Оказалось, что в openSUSE для огнелиса сделали патчи, чтобы он более лаконично смотрелся в KDE окружении.
Решил я и у себя сделать такой firefox.

Для начала, необходимо поставить kmozillahelper.
Вот текст kmozillahelper-0.6.ebuild :

# /usr/overlays/my/kde-misc/kmozillahelper/kmozillahelper-0.6.ebuild
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"
inherit cmake-utils

DESCRIPTION="Mozilla KDE Integration"
HOMEPAGE="http://en.opensuse.org/KDE/FirefoxIntegration"
SRC_URI="http://aur.archlinux.org/packages/kmozillahelper/kmozillahelper/${PN}-${PV}.tar.bz2"

LICENSE="MIT"
SLOT="0"
KEYWORDS="~x86"
IUSE=""

DEPEND="
        >=kde-base/kdelibs-4.2"
RDEPEND="${DEPEND}"

S=${WORKDIR}/${PN}

Собственно, этот ебилд надо поместить в локальный оверлей. Например, у меня этот ебилд лежит в /usr/overlays/my/kde-misc/kmozillahelper/
Это библиотека, требуемая этими патчами.
А далее нужно патчить сам firefox и xulrunner.

Вначале, я сделал отдельные ебилды для xulrunner и firefox, поместил их в локальный оверлей, и поставил. Но возникла проблема обновления, так как при обновлении поставились бы версии без патчей. А каждый раз править ебилды – это слишком нудно.

Когда в дереве портежей уже была версия 3.6.3, я по-прежнему пользовался 3.6.0. Это меня дико огорчало.

Случайно, я наткнулся вот на этот баг в багзилле.
Вкратце, автор просил возможность автоматического наложения своих патчей при сборке ебилдов.
На что ему ответили, что это уже можно сделать, используя /etc/portage/bashrc.
Патчи будут браться из директории /некая_директория/категория_пакета/имя_пакета/

Там же в аттаче прикреплён пример этого bashrc.
Но меня тот пример не устроил по нескольким пуктам:

  • патчи искались исключительно имя_проги.patch или diff. Я не вижу в этом смысла, так как ведь уже и так патчи ищутся в директории соответствующей категории и имени пакета
  • Патчи накладывались на этапе compile. Хотя логичнее их накладывать вместе с патчами из ебилда на этапе prepare
  • В случае неудачного наложения патча, выводилась ошибка, но сборка продолжалась. Это нелогично. Так как раз уж я положил патч, то значит мне он нужен, и без него собирать я не хочу. Я хочу, чтобы в случае, если патч не смог наложиться, сборка прекращалась

В итоге, я немного подправил bashrc.
Вот мой подправленный вариант:

# /etc/portage/bashrc
# echo 'PATCH_OVERLAY=/etc/portage/autopatch' >> /etc/make.conf
# mkdir -p /etc/portage/autopatch

autopatch() {
        local diff level p patches patched 

        [[ ! -d "$PATCH_OVERLAY" ]] && return 0

        patches=$(ls -1 ${PATCH_OVERLAY}/${CATEGORY}/${PN}/*.{patch,diff} 2>/dev/null)
        [[ $patches == "" ]] && return 0

        if ! cd ${S}; then
                echo ">>> FAILED TO cd $S"
                return 1
        fi

        for p in ${patches}; do
                p=$(basename $p)
                diff=${PATCH_OVERLAY}/${CATEGORY}/${PN}/${p}
                if [[ -e $diff ]] && [ ! -e ${S}/.${p} ]; then
                        patched=0
                        for level in 0 1 2 3 4; do
                                if [[ $patched == 0 ]]; then
                                        patch -g0 --dry -p${level} >/dev/null < $diff
                                        if [ $? = 0 ]; then
                                                echo -e ' \e[0;36m*\e[0m '"auto patching (-p${level}) ${p}"
                                                patch -g0 -p${level} < $diff > /dev/null && patched=1
                                                touch ${S}/.${p}
                                        fi
                                fi
                        done
                        [[ $patched != 1 ]] && echo "!!! FAILED auto patching $p" && return 1
                else
                        [[ ! -e $diff ]] && echo "!!! $diff does not exist, unable to auto patch"
                fi
        done
        cd $OLDPWD
}

if [[ $EBUILD_PHASE == prepare ]]; then
        PATH=$PATH:/usr/sbin:/usr/bin:/bin:/sbin
        autopatch || exit
fi

В /etc/make.conf добавим строку
PATCH_OVERLAY="/etc/portage/autopatch"

Итак, осталось только найти сами патчи.

Для начала xulrunner.
Создадим директорию /etc/portage/autopatch/net-libs/xulrunner/
И положим туда следующие патчи:
~ # cd /etc/portage/autopatch/net-libs/xulrunner/
xulrunner # find . -type f | sed "s/\.\///g"
mozilla-prefer_plugin_pref.patch
mozilla-helper-app.patch
fix-mozilla-launcher.patch
mozilla-nongnome-proxies.patch
mozilla-z-kde.patch
mozilla-libproxy.patch
gecko-lockdown.patch
xulrunner-png14.patch
mozilla-startup-notification.patch
toolkit-ui-lockdown.patch
xulrunner #

Где их взять? Я их брал со страницы арчевского aur`а. Вот тут. Только есть одно НО!
Файла mozilla-z-kde.patch на той странице нету. Но есть mozilla-kde.patch. Именно его и надо качать.
Это один и тот же файл, но его необходимо переименовать, чтобы он наложился одним из последних (накладываются по алфавиту). Иначе, просто не наложится.

Далее firefox.
~ # cd /etc/portage/autopatch/www-client/mozilla-firefox/
mozilla-firefox # find . -type f | sed "s/\.\///g"
firefox-kde.patch
firefox-no-gnomevfs.patch
firefox-kdejs.patch
firefox-browser-css.patch
firefox-cross-desktop.patch
mozilla-firefox #

Всё, кроме firefox-kdejs.patch качается там же, с aur`а.
Этого файла там нету. Там есть просто kde.js, и он необходим для сборки. Но его нужно переделать в патч.
Например, вот так:

diff -ur browser_old/app/profile/kde.js browser/app/profile/kde.js
--- browser_old/app/profile/kde.js      1970-01-01 08:00:00.000000000 +0800
+++ browser/app/profile/kde.js  2010-04-24 15:11:30.000000000 +0900
@@ -0,0 +1 @@
+pref("browser.preferences.instantApply", false);

Итак, bashrc сделан, патчи скачаны/сделаны, в make.conf запись сделана, kmozillahelper лежит в локальном оверлее.
Делаем
emerge -1 xulrunner && emerge kmozillahelper mozilla-firefox
И радуемся.

p.s. Возможно, после установки kmozillahelper на директорию /usr/lib/mozilla будут права 700. Нужно исправить на 755, иначе никаких изменений не будет.

p.p.s В какой-то версии portage автоматическое патченье таки добавили, но в какой неизвестно, и в манах об этом ни слова(методом тыка таки нашёл) Так что я лучше буду пользоваться этим скриптом пока.

Метки: , ,

Комментарии (3) на запись “Автопатчи firefox под kde”

  1. Valdos The Fat-Troll пишет 25 апреля 2010 в 23:07

    могу ли я перепостить этот материал к себе после проделывания этого для себя?

  2. reonaydo пишет 26 апреля 2010 в 0:14

    Я не против, если будет ссылка на данный пост.

  3. Valdos The Fat-Troll пишет 26 апреля 2010 в 1:15

    http://fat-troll.blogspot.com/2010/04/firefox-kde-integration-gentoo.html

    вот здесь =) ссылка на вас есть, авторство указано =)

Оставить комментарий