LINUX.ORG.RU

О диалекте Make, используемом во FreeBSD

 , , ,


0

2

Всем здравствуйте.

Выкачал исходники FreeBSD (вот с этого зеркала) с целью посмотреть, какие ещё бывают Makefile’ы, кроме «гнутых», и как на них себя ведёт обычный GNU Make под Linux.

И при выполнении make clean на корневом Makefile вижу следующее:

Makefile:113: *** missing separator.  Stop.

Что, с т. з. человека из экосистемы GNU, и неудивительно:

.if ${MAKE_VERSION} >= 20140620 && defined(.PARSEDIR)
.sinclude <bsd.compiler.mk>
.endif

Для GNU Make это выглядело бы скорее как

if ${MAKE_VERSION} >= 20140620 && defined(.PARSEDIR)
include <bsd.compiler.mk>
endif

Вопрос к знатокам: что это за диалект Makefile и где ещё он может использоваться в наше время?

Cast @kirk_johnson, @buratino, @iZEN, @yoghurt.

★★★★★
Ответ на: комментарий от buratino

Ты буратино, тебя можно в любой тред кастовать по определению =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от Dark_SavanT

понятия не имею. я вообще не имею ни малейшего понятия, что там во FreeBSD, что там происходит и есть ли там make. знаю, что вместо ftp(1) там fetch :)

buratino ★★★★★
()

Вообще этот синтаксис в целом разывают просто bsd make syntax. Конкретно сейчас во FreeBSD bmake из netbsd. До этого был ЕМНИП nmake не знаю откуда. В синтаксисе там есть незначительные отличия.

slovazap ★★★★★
()

что это за диалект Makefile

bsdmake.

где ещё он может использоваться

В FreeBSD, конечно же.

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

есть ли там make

А как ему не быть?

знаю, что вместо ftp(1) там fetch

Что значит вместо?! Во FreeBSD есть и ftp(1), и fetch(1).

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

Для линуксоидов *BSD — это дистрибутивы одной ОС, в которых разные только приставки.

Нет.

Я прекрасно понимаю, что дистрибутивы совершенно разные.

Но, тем не менее, часть кода они таки делят. И логично было предположить, что реализация make и соотв. синтаксис у них общие.

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

ну, собственно, слов у меня больше нет

Тебе ниже уже ответили:

bsd make один и тот же вроде

bsdmake

Но спасибо за конструктивное общение.

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

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html

Всё остальное от лукавого

Штука в том, что там описан portable syntax, который прекрасно понятен GNU Make. И сам GNU Make будет использовать близкое к стандарту синтаксическое подмножество, если ему сказать .POSIX (см. тж. https://nullprogram.com/blog/2017/08/20/).

Но вот то, что я увидел в исходниках FreeBSD (и это во всех *BSD – сравни с кодом DragonFly BSD) – это совсем не стандарт.

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

часть кода они таки делят

Не делят, а тащат друг у друга, адаптируя под себя (ибо как есть оно просто не заработает).

И логично было предположить, что реализация make и соотв. синтаксис у них общие.

Не логично. От кода общего прародителя у каждой из них осталось ровно ничего, каждая из них развивается своей дорогой, большинство не просто тащит готовенькое и адаптирует, но и пишет своё. В OpenBSD вообще ребята повёрнутые (в хорошем смысле этого слова, и пишут они действительно хороший софт) на «У нас всё должно быть своё!».

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

Этот posix - должен поддерживаться во всех posix-совместимых системах. А расширения - if/.if, -include/.sinclude - это неопределенное поведение.

Поэтому мейкфайлы и в линуксе, и в фрибсд - это совсем не стандарт (в основном)

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

Ну так и в линуксовых пакетах ты как правило не увидишь POSIX make. И у GNU, и BSD расширения, у каждого свои. Имхо, у BSD красивше.

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

Что значит вместо?! Во FreeBSD есть и ftp(1), и fetch(1).

везёт :)

Я последний раз ftp(1) пользовал очень много лет назад (задолго до того, как стал использовать FreeBSD на десктопе), и вместо fetch(1) чаще всего (хотя, конечно, в скриптах стараюсь ограничиваться утилитами из базовой системы) удобнее использовать curl (оно и быстрее и по умолчанию срёт в stdout).

Так что тут «везёт»/«не везёт» как-то немного за уши. ☺ Можешь поискать (просто из любопытства, вряд ли он тебе так остро нужен в OpenBSD) в портах fetch, я подозреваю что он там вполне может быть.

С одной стороны мне нравится отсутствие зоопарка базовых утилит в OpenBSD, с другой мне нравится что из FreeBSD долго не выкидывают obsolete (чтобы не добавлять геморроя админам, сервера которых крутятся много лет без вмешательства).

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

bsd make один и тот же вроде

Dark_SavanT ни разу не бздун.

И даже если не брать это во внимание, одно название никак не говорит о том, что у каждого не могут быть свои расширения над оригинальным кодом (тем, что было в 4.4BSD, если от него вообще что-то осталось).

Прямая цель bsdmake — обслуживать порты; так как порты в каждой *BSD свои и устроены по-своему, то и bsdmake у каждого должен быть (хотя бы немного) свой.

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

Имхо, у BSD красивше.

Красивше или нет — понятие субъективное. А вот что у bsdmake много где оно просто нагляднее (то есть можно разобрать визуально без подсветки синтаксиса) — это есть.

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

Прямая цель bsdmake — обслуживать порты

Ох и чушь я несу…

Первостепенная обязанность bsdmake — базовая система (но в остальном про по-своему всё то же самое). А потом уже порты.

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

Прямая цель bsdmake — обслуживать порты;

Не, его прямая цель — быть мейком. У меня gmake-то не всегда в системе есть, но cmake всё собирает

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

для сборки из сырцов

Лолшто? make ничего не собирает сам по себе. Это лишь инструмент для автоматизации сборки (то есть чтобы ты не вводил 100500 cc ./someprog.c для сборки одного большого проекта). И как нужно автоматизировать — зависит от софта, который использует (или не использует) make.

mord0d ★★★★★
()

Там реализация Parallel Make(pmake), взятая из NetBSD, он же BSD Make или bmake.

https://docs.freebsd.org/doc/6.1-RELEASE/usr/share/doc/en/books/pmake/

Какое-то время вплоть до 9-й версии был FreeBSD Make(fmake), выдававший при вводе в консоль make love - not war.

В OpenBSD если не ошибаюсь до сих пор используется старый pmake.

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

Поумничай мне тут

Когда у глупых людей кончаются аргументы, они начинают винить умных в своей глупости. ☺

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