По наводке funeralismatic.
И так: в сабжевой директории рассмотрим bashrc per package.
bashrc - это обычный скрипт на bash-е.
Такие файлы могут иметь следующее расположение и имена:
/etc/portage/env/${CATEGORY}/${PN}
/etc/portage/env/${CATEGORY}/${PN}:${SLOT}
/etc/portage/env/${CATEGORY}/${P}
/etc/portage/env/${CATEGORY}/${PF}
В нём можно задавать и перезадавать переменные и функции для любого отдельно взятого пакета, как ваши собственные, так и из ебилда - т.е. если в ебилде задана функция src_configure в одном виде, а в bashrc пакета другая, то будет использоваться ваша реализация, например:[ root@desktop ] megabaks # cat /etc/portage/env/media-video/gnome-mplayer
src_configure() {
# FIXME: The only reason why --without-gpm-new-method is passed is lack of testing.
econf \
# --enable-gtk3 \
$(use_enable gnome nautilus) \
--disable-gseal \
--without-gconf \
--with-gio \
$(use_with dbus) \
$(use_with alsa) \
$(use_with pulseaudio) \
$(use_with libnotify) \
$(use_with ipod libgpod) \
$(use_with musicbrainz libmusicbrainz3) \
--without-gpm-new-method \
--without-gpm-old-method
}
[ root@desktop ] megabaks #
Этим я выключил сборку с gtk3, которая была в основном дереве, просто переопределив функцию src_configure.Функции
pkg_pretend
pkg_nofetch
pkg_setup
src_unpack
src_prepare
src_configure
src_compile
src_test
src_install
pkg_preinst
pkg_postinst
pkg_prerm
pkg_postrm
pkg_config
pkg_info
Некоторые функции выполняются в песочнице (sandbox):src_unpack
src_compile
src_test
src_install
Это значит, что на этих этапах обработки ебилда мы можем делать что угодно с сорсами пакета, но из других мест можем только читать, ибо нефиг что-либо изменять в системе на этих этапах.Функции-этапы умеют префиксы pre и post, которые не используются в ебилдах, но дают пользователю свободу действий перед/после, соответственно, выполнения некоторой функции из екласса/ебилда.
Например, я заменяю перед сборкой chromium-а некоторое кол-во png файлов через функцию в /etc/portage/env/www-client/chromium , т.к. терпеть не могу косые табы
pre_src_compile ()
{
cp -R /home/megabaks/some_trash/chromium/* .
}
т.е. перед запуском компиляции я заменяю всё что мне нужно.В данном примере под "." подразумевается корень исходников пакета, если точнее "/var/tmp/portage/www-client/chromium-версия/work/${S}", где S обычно "${PN}-${PV}", но иногда может принимать и другие значения если это описано в ебилде.
Впрочем это не имеет отношения к нам - пусть портаж раскуривает это.
Достаточно просто запомнить, что по-умолчанию все действия происходят в корне исходников.
Доки о переменных.
Впрочем, они, как обычно, не полные - не учтены те же git/svn/etc...
Переменные
Некоторые переменные так же можно задавать в bashrc per package.
Например {C,CXX,LD,FF,FC}FLAGS:
desktop megabaks # cat /etc/portage/env/media-video/ffmpeg
CFLAGS="-O2 -march=core2 -ftree-vectorize -msse4.1"
desktop megabaks #
Вроде всё, что применимо в сабже...
Комментариев нет :
Отправить комментарий