Автопатчи firefox под kde
Однажды, на просторах интернета, наткнулся вот на эту страницу.
Оказалось, что в 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 автоматическое патченье таки добавили, но в какой неизвестно, и в манах об этом ни слова(методом тыка таки нашёл) Так что я лучше буду пользоваться этим скриптом пока.



могу ли я перепостить этот материал к себе после проделывания этого для себя?
Я не против, если будет ссылка на данный пост.
http://fat-troll.blogspot.com/2010/04/firefox-kde-integration-gentoo.html
вот здесь =) ссылка на вас есть, авторство указано =)