LINUX.ORG.RU

Сборка ебилда, который требует самого себя для сборки

 , ,


0

5

Обнаружил как-то, что в дереве portage нету ассемблера fasm. Через некоторое время пришла в голову мысль, а как для него можно написать ебилд, если он написан на себе самом и соответственно требует себя для сборки? Возможное решение разве что сделать сначала ебилд fasm-bin, который будет качать сборку с официального сайта, указать его в зависимостях для fasm.

Как в общем случае по Ъ-гентушному должны разруливаться такие ситуации?

#cast Pinkbyte

★★★★★

Я не пинкбайт, но я лично не вижу смысла в отдельном ебилде для fasm-source. Гораздо логичнее здесь просто бинарь.

DeadEye ★★★★★
()

ммм... А что тебе мешает в процессе сборки (шаг 1) скачать бинарь и собрать им исходники, потом (шаг 2) собрать те же исходники тем, что получилось на (шаг 1), ну и опционально шаг 3.

Т.е. зачем тебе ещё один ненужный -bin пакет?

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

ну это черезжопинг и костылинг.

не совсем, половина пакетов таким страдает
потому и реализован механизм типо «override»
для примера предположительно большой ебилд:

$ cat /home/portage/www-client/firefox/firefox-24.8.0.ebuild | grep -e  configure\(\) -e inst\(\)
src_configure() {
pkg_preinst() {
pkg_postinst() {

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

обычные сырци при этом собираются ебилдом ограничивающимся указанием SRC

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

gcc, внезапно, тоже сам себя собирает

Просто первичный компилятор есть в системе изначально.

O02eg ★★★★★
()

Обнаружил как-то, что в дереве portage нету ассемблера fasm.

В портаже нет, в оверлеях есть: dev-lang/fasm.

Так что ничего писать не нужно.

redhat
()
Ответ на: комментарий от redhat

таки оно бинарную сборку скачивает

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

gcc, внезапно, тоже сам себя собирает

Только ставится в stage1 бинарником.

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

это ж не Ъ, вдруг аффтар туда закладок запихнул :)

Если с умом, а не абы как, написал закладки, то пересборка не поможет. Хоть стопятьсот раз.

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

для ассемблера, написанного на ассемблере, проверить на закладки проще как-то :)

Построчно сравниваешь дамп дизассемблера с исходниками и при обнаружении лишних инструкций поднимаешь тревогу

Harald ★★★★★
() автор топика

раскрутка

anonymous
()

Ну да, SBCL так и собирается. В архиве с исходниками лежит бинарь, которым собирается новый бинарь, которым затем собирается еще один бинарь.

crowbar
()

Через некоторое время пришла в голову мысль, а как для него можно написать ебилд, если он написан на себе самом и соответственно требует себя для сборки?

Такого не должно быть. Пардон за виндовозничество, но это то же самое, как и знаменитый кейс c:\install\unzip.zip.

Подойди к вопросу по-другому: забудь что есть ebuild'ы - как ты ручками такое будешь собирать? Скорее по-другому: как создатели fasm расчитывают он будет собираться на какой-то lfs?

gcc - исключение, так как он есть в stage*.

Моя рекомендация - либо позволить его собирать не fasm (а какой там еще есть) если это возможно, либо, да, сделать зависимость от бинаря. Но, скорее всего, есть другой путь, который описан где-то в INSTALL или на сайте fasm.

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

Но, скорее всего, есть другой путь, который описан где-то в INSTALL или на сайте fasm.

не, нету

Моя рекомендация - либо позволить его собирать не fasm (а какой там еще есть)

там свой особый синтаксис

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

внезапно, gcc написан на с, и может быть собран не только собой

внезапно, разговор про ебилд, и гцц приведен как пример

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

Тогда проще не собирать, а только сделать проверку.

С другой стороны, дизассемлирование более-менее сопадает с исходником, если оный одним файлом. А если куча файлов исходников, потом линковка?

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

Там нет минимального компилятора?

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

Старой версией, как же еще. А самая первая версия была написана на чем-нить другом.

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

Построчно сравниваешь дамп дизассемблера с исходниками и при обнаружении лишних инструкций поднимаешь тревогу

Ну попробуй сделать это с FASM'ом, посмотрим, как у тебя получится.

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

gcc написан на с++, но это не аргумент. Ядро линукса таки написанно на С, но собирается нормально только через gcc

snaf ★★★★★
()

Как в общем случае по Ъ-гентушному должны разруливаться такие ситуации?

Посмотри как это сделано в ghc - компиляторе Haskell, написанным на Haskell. ЕМНИП он бутстрапится, скачивая бинарную сборку самого себя с офсайта.

Pinkbyte ★★★★★
()

В расте тоже бутстрап. И в ерланге.

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

внезапно, gcc написан на с, и может быть собран не только собой

Внезапно, gcc написан на c с гнутыми расширениями, некоторые из которых никто больше не умеет.

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

с гнутыми расширениями, некоторые из которых никто больше не умеет

говноедство какое-то

anonymous
()
Ответ на: комментарий от anonymous

уже же собирается с clang

После того как они допилили совместимость с gcc. Это не есть что-то плохое в тех случаях, где требуется руками указать alignment / address space / etc. Просто в стандарте C этих вещей нет.

hateyoufeel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.