LINUX.ORG.RU

Помогите проверить ебилд на корректность

 ,


0

1

Написал ебилд, тестирую. Выполнил этапы compile, install, merge с помощью ebuild (ebuild voc-2.1.2.ebuild compile, ebuild voc-2.1.2.ebuild install и так далее). Все проходит, все хорошо. Пытаюсь сделать то же самое с помощью emerge -av voc, на этот раз установка прерывается с ошибкой, рекомендуя ознакомиться с логом sandbox. Лог sandbox:

VERSION 1.0
FORMAT: F - Function called
FORMAT: S - Access Status
FORMAT: P - Path as passed to function
FORMAT: A - Absolute Path (not canonical)
FORMAT: R - Canonical Path
FORMAT: C - Command Line

F: open_wr
S: deny
P: /opt/voc/2/sym/Oberon.sym
A: /opt/voc/2/sym/Oberon.sym
R: /opt/voc/2/sym/Oberon.sym
C: /var/tmp/portage/dev-lang/voc-2.1.2/work/voc-2.1.2/voc -Ss -O2 ../../src/runtime/Oberon.Mod

Почему-то пытается влезть в директорию /opt/voc, хотя я явно указываю ставить все в /usr, как разрулить?

Текст ебилда:

# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7
DESCRIPTION="Visharp compiler for Oberon-2 programming language"
HOMEPAGE="http://oberon.visharp.am"
SRC_URI="https://github.com/vishaps/voc/archive/refs/tags/v${PV}.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="debug static-libs"
DEPEND=""
RDEPEND="${DEPEND}"
BDEPEND=""
DESTDIR="${WORKDIR}/${P}/install"
RESTRICT="strip"
src_compile()
{
	emake -j1 full
}

src_install()
{
	if ! use debug; then
		strip ${DESTDIR}/bin/*
		strip ${DESTDIR}/lib/voc/*
	fi
	dobin ${DESTDIR}/bin/*
	insinto /usr/include/voc
	doins -r ${DESTDIR}/2/include/*
	doins -r ${DESTDIR}/2/sym/*
	insinto /usr/include/voc/c
	doins ${DESTDIR}/C/include/*
	exeinto /usr/lib/voc
	doexe ${DESTDIR}/lib/*.so
	if use static-libs; then
		insinto /usr/lib/voc
		doins ${DESTDIR}/lib/*.a
	fi
}

Перемещено hobbit из general

Я не вижу в твоём билде никакого специального inherit для оберона. Поэтому попробуй-ка ты переопределить src_configure и передать в ./configure (или куда там? может прямо при вызове emake ?) имена директорий…

Разве ты не видишь, что нарушение доступа происходит во время компиляции, а не во время установки?

А для того, чтобы этот voc так не делал, надо читать на него man.

Shushundr ★★★★
()
Последнее исправление: Shushundr (всего исправлений: 3)
Ответ на: комментарий от Shushundr

Там нет никакого configure. Там лежит готовый Makefile, который собирает Оберон и по make install ставит его в /opt/voc. Приходится на этапе install руками раскидывать все.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

и по make install ставит его в /opt/voc.

Ну вот это и является причиной ошибки при компиляции.

В генте утилите make внутрь обычно передается путь, в который надо собирать (DESTDIR). А ты этого не делаешь.

(либо сам make-файл переменную DESTDIR не учитывает, и тогда надо их make-файл пропатчить, чтобы он научился)

Shushundr ★★★★
()
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от Shushundr

никакого специального inherit для оберона

Он тут и не нужен, так как проект не использует (надеюсь) в процессе сборки компилятор Оберона.

Возможно, что как в случае fpc и ряда других вещей сборка может осуществляться через bootstrap - ранее собранный компилятор. Но судя по беглому взгляду на make нужен только Си компилятор.

DESTDIR

Да, похоже путь надо передать команде emake "${DESTDIR} install

Но сама переменная явно не такое значение, какое определено, должна иметь.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)

Хрен его знает, как там настроить сборку. При export CC=..., похоже распознаёт только то, что он знает, иначе берёт умолчания для платформы. Т.е. Makefile здесь не столько Makefile, сколько свод правил для сборки bootstrap компилятора voc, сборки скрипта определения платформы и создания конфигурации сборки на основе данных о платформп, сборки уже выходного компилятора voc для установки. «2» и «C» при установке разделены, так как содержат одинаковые имена файлов. Собирает ли что полученное в итоге не проверял. Вместо strip пытался использовать dostrip с относительным путём (относительно ${ED}, но не понял применяется ли оно. Да и не знаю, зачем оно тут.

# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8

DESCRIPTION="Visharp compiler for Oberon-2 programming language"
HOMEPAGE="http://oberon.visharp.am"
SRC_URI="https://github.com/vishaps/voc/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64"

IUSE="static-libs"

RDEPEND=""
DEPEND="${RDEPEND}"

src_compile() {
        emake -j1 full
}

src_install() {
        local INSTDIR="${S}/install"

        dobin "${INSTDIR}"/bin/*

        insinto /usr/include/"${PN}"/2
        doins -r "${INSTDIR}"/2/include
        doins -r "${INSTDIR}"/2/sym

        insinto /usr/include/"${PN}"/C
        doins -r "${INSTDIR}"/C/include
        doins -r "${INSTDIR}"/C/sym

        dolib.so "${INSTDIR}"/lib/libvoc-O2.so
        dolib.so "${INSTDIR}"/lib/libvoc-OC.so

        if use static-libs ; then
                dolib.a "${INSTDIR}"/lib/libvoc-O2.a
                dolib.a "${INSTDIR}"/lib/libvoc-OC.a
        fi
}
grem ★★★★★
()
Ответ на: комментарий от grem

Спасибо за труды. emerge все равно валится при установке с ошибкой. И самое главное - установка через ebuild merge работает, а через emerge - нет. Что он такого дополнительно делает?

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Странно. На этапе merge уже ничто не должно мешать. С такой же ошибкой? Или пишет, что хочет перезаписать уже установленные файлы?

Очень странно. Всё что есть в image не должно мешать установке. Как выглядит «emerge –info»?

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

Меня всё-таки смущает, что изначально ошибка вызвана командой

C: /var/tmp/portage/dev-lang/voc-2.1.2/work/voc-2.1.2/voc -Ss -O2 ../../src/runtime/Oberon.Mod

То есть это собранным bootstrap компилятором пытается собрать себя. Но почему-то модуль едет на 2 каталога вверх, что странно.

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

Цель full сама по себе тесты должна гонять, кажется. Но мне нужно уточнить.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от grem
# autobuild: Start test clients.
318 autobuild: configuration
319     ./testclient -c "make -s autoonce"
320 
321 
322 
323 
324 # autostop: Tell test clients to exit their wait loop.
325 autostop: configuration
326     ./testclient -c "exit"

Вот где собака порылась. Если запускать отдельно make compiler, make O2library, make OClibrary, то оно не вызывает тесты.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Так у меня то full нормально отрабатывает.

Нужно больше инфы: glibc или musl, gcc или clang, какая версия? Ccache включен?

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

glibc 2.37

Ну с этим что угодно может падать пока. Тут преход на 2.36 то только завершили.

Я для GCC13 проверил - норм собирается цель full в том числе и сразу вызовом emerge. Есть, конечно, пара QA warnings

 * QA Notice: Files built without respecting LDFLAGS have been detected
 *  Please include the following list of files in your report:
 * /usr/bin/showdef
 * /usr/lib64/libvoc-O2.so
 * /usr/lib64/libvoc-OC.so


 * QA Notice: The following shared libraries lack a SONAME
 * /usr/lib64/libvoc-O2.so
 * /usr/lib64/libvoc-OC.so

но это не смертельно.

grem ★★★★★
()