Сборка m4 из исходников при ошибке FreeBSD: не знаю, как сделать ../../build-aux/snippet/c++defs.h

То, что вы показываете, edиспользуется вместе со сценарием редактирования.

Сценарий редактирования (последовательность edкоманд )передается в edкак здесь -документ. Здесь -документ представляет собой часть возможно многострочного -текста , перенаправленного на стандартный ввод утилиты. Документ здесь -— это то, что находится между первым и последним маркерами END. \перед первым маркером ENDозначает, что документ заключен в кавычки, а это означает, что оболочка не будет пытаться раскрывать в нем переменные и т. д. Его также можно было записать как <<'END'. В этом конкретном случае \можно удалить, так как сценарий редактирования не содержит ничего для расширения оболочки.

Это распространенный способ использования edдля более простого не -интерактивного редактирования, хотя edследует использовать с опцией -sпри таком использовании.

Команда эквивалентна использованию sedс

sed '10,20/^/#/' /etc/passwd

(Сценарий edвнесет изменения в файл, а затем отобразит файл в терминале перед выходом без сохранения изменений, что более или менее то, что делает вышеприведенный скрипт sed. по строке -по -по строке ).


Это не хороший способ редактирования /etc/passwdфайла, (которого скрипт edна самом деле не делает, к счастью, поскольку он не сохраняет свои изменения ). Для этого следует использовать такие инструменты, как vipw, или специальные команды, сделанные для изменения этого файла (, такие как useraddи т. д. ). Это связано с тем, что файл во многих системах Unix должен быть синхронизирован с одним или несколькими другими файлами или базами данных, а его редактирование требует обновления и их (, что, например. vipwделает автоматически ).

0
17.03.2020, 11:17
1 ответ

Только что распаковал m4 -1.4.17 здесь (Fedora 31; ваш latestможет быть другой версией... но, похоже, он датирован 2013 годом ). Файл-нарушитель находится там (вbuild-aux/snippet). В комплект входит скрипт под названием bootstrap, но он, по-видимому, нужен только для исходников прямо из системы контроля версий.

Традиционный ./configure; makeтанец идет хорошо, но терпит неудачу после компиляции кучи вещей с:

freadahead.c: In function 'freadahead':
freadahead.c:91:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."

Простой поиск «GNU m4 FreeBSD» приводит к FreshPorts , в руководстве FreeBSD m4 говорится о -gопции для активации совместимости с GNU m4. Почему их недостаточно? Предположительно, любая исправленная версия, которую несет FreshPorts, является лучшей отправной точкой (, если они цивилизованны и несут исходные коды и отдельные исправления, портирование исправлений на другую версию менее трудоемко, чем отладка этого беспорядка самостоятельно ).

2
28.04.2021, 23:21

Теги

Похожие вопросы