source, installsources, noclean1. /usr/share/emacs/30.2/src/Если нажать в Emacs (describe-function #'%), то есть C-h f % в дефолтных настройках, то откроется документация к функции % берущей остаток от деления. Про неё будет также будет написано, что это primitive-function in src/data.c
Нажав на строчку src/data.c подсвечиваемую как cсылку мене перекидывает в каталог /usr/share/emacs/версия_емакса/src и файл data.c и вот такую функцию:
DEFUN ("%", Frem, Srem, 2, 2, 0,
doc: /* Return remainder of X divided by Y.
Both must be integers or markers. */)
(Lisp_Object x, Lisp_Object y)
{
x = check_integer_coerce_marker (x);
y = check_integer_coerce_marker (y);
return integer_remainder (x, y, false);
}Попадание данных сишных исходников в нужный елисп-функции describe-function каталог в portage регулируется с помощью use-флага source:
https://packages.gentoo.org/useflags/source2. /usr/src/debug/app-editors/emacs-30.2-r7/emacs-30.2/srcЭтот каталог нужен главным образом, когда Emacs упадёт.
Дело в том, что я использую следующие FEATURES в /etc/portage/make.conf:
splitdebug compressdebug binpkg-dostrip installsources
Фича splitdebug позволяет положить в отдельный каталог отладочный символы. Отладочные символы, нужны отладчику, чтобы соотносить место с в отлаживаемом бинарнике со строчкой в исходном коде из которого бинарник был собран.
compressdebug позволяет отладочные символы сжать, чтобы они много места не занимали.
installsources устанавлиает те самые исходники, которые видны из отладчика за счёт отладочных файлов.
binpkg-dostrip применяет к файлам команду strip из состава binutils, чтобы отделить отладочные символы в отдельный каталог. Необходима чтобы фича installsources работала.
Вот только нюанс — вернуться в этот каталог, чтобы запустить билд систему и собрать что-то из этих исходников нельзя.
3. (source-directory)"/var/tmp/portage/app-editors/emacs-30.2-r3/work/emacs-30.2"
Вообще каталог /var/tmp/portage/ используется portage для того, чтобы в моменте сборки программы из исходников хранить их там.
Чаще всего они после этого удаляются.
Но не у меня! Я же пользуюсь app-emacs/portage::akater, чтобы устанавливать пакеты, что позволяет мне от ошибок компиляции в логе сборки переходить прям на строчки, которые ошибку вызывали. Такое работает и с warning'ами и note, если включить фичу noclean. У меня был для про это скринкаст:
https://youtu.be/9QM3JX29lXwОднако не стоит всё же включать эту фичу. Или по крайней мере не стоит включать эту фичу на все пакеты по умолчанию. Потому что в какой-то момент в результате того, что я компилировал telegram и llvm подкаталоги в которых собирались эти программы заполнились настолько, что мне пришлось грузиться в live CD и увеличивать размер корневого раздела c помощью команды lvresize из состава sys-fs/lvresize.
Потом я понял, что можно было просто эти каталоги поудалять и я их удалил, но ладно... Было приятно доказать себе, что я могу использовать логические разделы lvm, чтобы менять размер раздела, если мне надо его увеличить.
Тем не менее, как я уже сказал можно включить фичу noclean попакетно:
$ cat /etc/portage/env/noclean
FEATURES="${FEATURES} noclean"
$ cat /etc/portage/package.env/noclean
sys-kernel/* noclean
app-emacs/* noclean
app-editors/emacs noclean
app-shells/bash noclean
app-admin/doas noclean
x11-misc/slstatus noclean
В итоге в /var/tmp/portage можно будет открывать каталоги с исходным кодом программ в том виде, из которого они собираются системой сборки. Там можно найти интерсные файлики, которых в предыдущих двух локациях не будет, типа .clang-format,
AGENTS.md или .gdbinit. А ещё можно продолжить сборку прям оттуда с определёнными опциями запустив комманду ebuild.