АнглийскийФранцузскийИспанский

Ad


Значок OnWorks

metaconfig - Онлайн в облаке

Запустите metaconfig в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда metaconfig, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


metaconfig - Генератор сценария настройки

СИНТАКСИС


метаконфиг [-dhkmostvwGMV ] [-L директория ]

ОПИСАНИЕ


Метаконфиг это программа, которая генерирует скрипты Configure. Если вы не знаете, что за
Сценарий настройки, перейдите к Обучение раздел этой справочной страницы. Если хочешь
полное (формальное) описание способа использования метаконфиг и его агрегаты, пожалуйста, посмотрите на
СПРАВКА раздел. Ниже приводится краткое введение и справочная информация для знающих
пользователей.

Метаконфиг работает от набора единиц которые определяют все, что знает metaconfig
портативность. Каждый блок является автономным, и его не нужно нигде регистрировать.
кроме включения в общедоступный каталог U или в личный каталог U. Если
пакет dist (частью которого является metaconfig) устанавливается в LIB, затем общедоступный U
каталог - LIB / dist / mcon / U. На этом компьютере каталог LIB - / usr / share / dist. Ваш
каталог private U, если он у вас есть, находится в каталоге верхнего уровня вашего пакета.
Прежде чем ты сможешь бежать метаконфиг вы должны сделать несколько вещей:

· Создайте файл .package в каталоге верхнего уровня пакета, запустив упаковывать.
Эта программа спросит вас о вашем пакете и запомнит, что вы ему скажете, чтобы
все программы dist могут быть умными.

· Обратитесь к Глоссарию (в LIB / dist / mcon) и напишите свои сценарии оболочки и программы на C
в терминах символов, которые metaconfig умеет определять. Тебе не нужно рассказывать
metaconfig, какие символы вы использовали, поскольку metaconfig выяснит это за вас.

· Создавать любые сценарии .SH, необходимые для написания файлов Makefile или сценариев оболочки, которые будут зависеть от
на значениях, определенных Configure. Есть программа под названием сделатьSH это поможет вам
преобразовать простой скрипт в шаблон script.SH; некоторое редактирование по-прежнему необходимо
выполняется над полученным файлом .SH, чтобы переместить часть переменной конфигурации в
верхняя часть скрипта (см. встроенные комментарии, сгенерированные сделатьSH в вашем .SH
файл).

· Создайте файл MANIFEST.new в каталоге верхнего уровня, в котором перечислены все файлы в
ваш пакет. Этот файл останется личным и не будет частью окончательной
распределение. (Для удобства файл МАНИФЕСТА будет использоваться метаконфиг if
файла MANIFEST.new еще нет.) Имя файла должно быть первым полем в каждом
линия. После некоторого пробела вы можете добавить короткий комментарий, описывающий ваш файл. Только
там должны быть указаны исходные файлы. Специальный файл уровень исправления.h (который
обрабатываются и обслуживаются инструментами исправления - см. похлопывание(1)) должен быть частью
Файл MANIFEST.new, но некоторые инструменты могут его игнорировать. Как правило большого пальца,
там должны быть перечислены только файлы, поддерживаемые RCS, уровень исправления.h файл
одно важное исключение.

· При желании вы можете создать файл МАНИФЕСТА, который будет экспортированной версией.
вашего MANIFEST.new. Этот файл должен быть частью выпуска, т.е. перечислен в обоих
ваш МАНИФЕСТ.новый и сам МАНИФЕСТ. Один из метаконфиг единиц знает об этом
файл и заставит Configure выполнить проверку выпуска, убедившись, что все файлы
перечисленные там являются частью раздачи. Файлы MANIFEST и MANIFEST.new должны
быть четкими, а не ссылками.

· Скопируйте любые файлы .U, которые вы хотите изменить, в свой личный каталог U. Любые файлы .U
в вашем личном каталоге U будет использоваться вместо того, что находится в общедоступном U
каталог. Например, один из способов принудительного включения любого модуля - скопировать End.U
файл в ваш каталог .U и добавьте имя модуля, который вы хотите, в качестве зависимости от
конец строки? MAKE :. Таким образом можно ТОЛЬКО принудительно принудительно активировать определенные юниты, а именно:
формы Warn _ *. U и Chk _ *. U. Вы также можете настроить определенные по умолчанию
Настройте переменные, скопировав Myinit.U в личный каталог U вашего пакета и
установка переменных в этом блоке.

Теперь вы готовы к бегу метаконфиг. Это создаст Настроить файл и, возможно,
config_h.SH файл (если в ваших источниках используются символы C). Сгенерированные файлы будут
автоматически добавляется в ваш MANIFEST.new при необходимости. Не забудьте обновить свой
Хотя файл МАНИФЕСТА.

Чтобы создать новые юниты, сделайте следующее:

· Скопируйте аналогичный блок в новый файл .U. Выбранное вами имя должно быть именем
переменная, генерируемая устройством, хотя это только для вашего удобства, а не
требование. Он должен состоять из 12 или менее символов, чтобы предотвратить прерывание имени файла.
На самом деле, вероятно, должно быть 10 или меньше, чтобы те, кто хочет использовать RCS, могли иметь
a .U, v на конце без рубки. Metaconfig использует регистр первой буквы для
определить, создается ли какая-либо переменная на самом деле этим устройством, поэтому не используйте заглавные буквы.
имя модуля, если предполагается, что он будет создавать переменную оболочки.

· Отредактируйте новый файл .U, чтобы делать то, что вы хотите. Первая строка? MAKE: указывает
зависимости; перед окончательным списком двоеточие все переменные, которые определяет этот модуль, и
после последнего двоеточия - все переменные (или другие единицы), от которых зависит эта единица.
Очень важно, чтобы эти списки были точными. Если зависимость не обязательна и
можно использовать значение по умолчанию, вы должны поставить перед зависимостью знак «+». В
соответствующий блок не будет загружен для вычисления символа, если это действительно не требуется
другим блоком.

· Насколько это возможно, параметризуйте ваше устройство на основе переменной оболочки, определенной на
? INIT: строки. Это переместит определения переменных в модуль Init.U, где
они могут быть переопределены определениями в Myinit.U, который включен после Init.U.

· Добавьте определение любых символов C в виде строк? H :. Строка, начинающаяся с
? H:?% <: В файле .U будет добавлен в конечный файл config.h тогда и только тогда, когда
metaconfig решает, что этот блок нужен. % <Обозначает название устройства,
что также является именем файла (без .U), если вы следовали
соглашение. Всегда ставьте комментарий к каждой строке? H: в случае, если одна из переменных
замены ранее в строке запускают комментарий, не завершая его. Любая оболочка
переменная, начинающаяся с d_, может это сделать, так что будьте осторожны. Если вы опустите?% <:, то
metaconfig попытается интуитивно понять символ, определение которого необходимо перед любым
включение в config.h.

· Добавьте определения глоссария в виде? S: строк для переменных оболочки и? C: строк для C
переменные препроцессора. Примеры см. В текущем модуле. ОЧЕНЬ важно
начинайте каждую запись с имени символа, выровненного по левому краю, и заканчивайте каждую запись? C :. или
? S :. линия. Алгоритм, который переводит записи символов препроцессора C для
Глоссарий в комментариях к config.h зависит от этого.

· Убедитесь, что все в порядке? линии правильные. Правильный порядок:

? RCS: и? X: в основном просто комментарии
? MAKE: зависимости metaconfig
? Y: директива компоновки устройства
? S: определения оболочки глоссария
? C: определения глоссария C
? H: определения config.h
? M: определения confmagic.h
? W: разыскиваемые символы
? V: видимые символы
? F: файлы, созданные этим устройством
? T: используемые временные символы оболочки
? D: необязательное значение зависимостей по умолчанию
? O: используется для обозначения устаревших единиц
? LINT: намёки на металинт
? INIT: инициализация символов оболочки

Вот пример, показывающий порядок строк и различные разрешенные форматы:

? RCS: $ RCS-Id $
? RCS: Информация об авторских правах
? RCS: $ RCS-Log $
?ИКС:
? X: Надуманный пример
?ИКС:
? MAKE: d_one два: три + четыре пять
? СДЕЛАТЬ: -выбрать добавить $ @%
? Y: ПО УМОЛЧАНИЮ
? S: d_one:
? S: Первый символ оболочки, условно определяет ОДИН.
? S :.
? S: два:
? S: второй символ оболочки, значение TWO.
? S :.
? C: ОДИН:
? C: Первый символ C.
? C :.
? C: ДВА:
? C: Второй символ C.
? C :.
? H: # $ d_one ONE / ** /
? H: #define ДВА "$ два"
? H: # $ d_one ONE_TWO "$ два"
?ЧАС:.
? M: перевернуть: HAS_FLIP
? M: #ifndef HAS_FLIP
? M: # определить флип (x) флоп (x)
? M: #endif
? M :.
? W:% <: one_two
? V: p_one p_two: p_three
? F: файл ./ftest! Tmp
? T: tmp var
? D: two = 'undef'
? LINT: изменить три
? INIT: two_init = '2'
: шелл-код, реализующий модуль, следует
p_one = 'один'
p_two = 'два'
p_three = ""

Позвольте мне сказать еще раз: приведенное выше определение единицы не настоящие один только показать
разные возможности. В любом случае такая единица не принесет никакой пользы ... Еще немного.
дополнительные функции здесь не описаны. Пожалуйста, обратитесь к СПРАВКА раздел для получения дополнительной информации
полная информация.

· Поместите устройство в общедоступный или частный каталог U, в зависимости от ситуации.

· Повторить метаконфиг.

· Отправьте свое устройство в [электронная почта защищена] (Рафаэль Манфреди) для включения в мастер-копию,
если вы думаете, что это представляет общий интерес.

Чтобы добавить новую программу, нужно найти:

· Отредактируйте Loc.U и добавьте имя программы в строку? MAKE: (между
два двоеточия) и либо в loclist, либо в trylist (в зависимости от того, является ли программа
обязательно или нет).

· Перезапустить metaconfig.

· Отправьте мне свой блок для включения в мастер-копию, если вы считаете, что это общая
интерес.

Примечания для записи файлов .U:

* Всегда используйте "rm -f", потому что есть системы, в которых rm по умолчанию является интерактивным.

* Не используйте "set - ...", потому что '-' не работает с каждой оболочкой. Используйте «установить x ...;
сдвиг".

* Не используйте "unset ENV", так как unset не является полностью переносимым. Вместо этого произнесите "ENV = ''".

* Всегда используйте эхо "" (с пробелом) из-за систем Eunice.

* Используйте только тестXNUMX с -r, -w, -f или -d, поскольку это единственные переносные переключатели. В
в частности, избегайте "test -x".

* Используйте только программы, поставляемые с V7, чтобы вы знали, что они есть у всех.

* Используйте $ contains, если хотите условно grep, так как не все grep возвращают
разумный статус. Обязательно перенаправьте вывод на / dev / null, используя '> / dev / null
2> & 1 '.

* Используйте «if test» вместо «if [...]», поскольку не все sh знают последнюю конструкцию.

* Используйте сценарий myread для входных данных, чтобы они могли выполнять экранирование оболочки и по умолчанию
оценка. Общая форма

дело "$ grimble" в
'') dflt = 452 ;;
*) dflt = "$ grimble" ;;
ESAC
rp = 'Сколько у тебя гримблов?'
. ./мое чтение
grimble = "$ ans"

* Используйте сценарий getfile, когда запрашиваете путь к файлу, чтобы иметь необязательные
~ расширение имени и проверки работоспособности. Полное описание см. В модуле Getfile.U.

* Всегда ставьте

$ starth

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

* Никогда не предполагайте распространенных UNIX-измов, таких как тот факт, что объектный файл заканчивается на .o и
что имя библиотеки заканчивается на .a, Использовать $ _o и $ _a вместо этого переменные (см.
Unix.U).

* При выполнении теста компиляция-ссылка-выполнение всегда записывайте его так:

$ cc $ ccflags $ ldflags try.c -o попробовать $ libs

потому что некоторые системы требуют, чтобы флаги компоновки были указаны перед скомпилированным
target (за исключением конечных связывающих библиотек).

* Выдавать важные сообщения в файловый дескриптор №4, используя '> & 4' для перенаправления вывода.
Только эти сообщения появятся, когда -s переключатель дается Настроить на
командная строка (тихий режим).

* Всегда пытайтесь определить, присутствует ли функция наиболее конкретным образом - не
скажите "if bsd", когда вы можете использовать команду grep libc. Существует много гибридных систем, и
каждая особенность должна стоять или падать сама по себе.

* Всегда пытайтесь определить, присутствует ли функция в самом общем виде, чтобы
другие пакеты могут использовать ваш модуль.

* Если сомневаетесь, установите значение по умолчанию и спросите. Ничего не предполагайте.

* Если вы думаете, что пользователь ошибается, учтите, что он может быть прав. Для
Например, он может запускать Configure в другой системе, чем он собирается использовать.
конечный продукт на.

Metaconfig резервирует следующие имена в вашем каталоге, и если вы используете такое имя, он
может получить затор или вызвать другие непредвиденные эффекты:

.MT / *
Настроить
Требуются
Устаревший
конфигурировать
config_h.SH
confmagic.h
U / *
МАНИФЕСТ.новый

Кроме того, Configure может уничтожить эти имена в каталоге, в котором он запущен:

UU / *
config.sh
config.h

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ, НЕ ВКЛЮЧЕННЫЕ В ПАКЕТ


Следующие варианты распознаются метаконфиг:

-d Включите режим отладки. Не очень полезно, если вы не отлаживаете метаконфиг
себя.

-h Распечатать справочное сообщение и выйти.

-k Сохраните временный каталог, чтобы вы могли проверить рабочие файлы, используемые
метаконфиг построить свой Настроить сценарий. Полезно только при отладке
единиц.

-m Предположим, что много памяти и места для подкачки. Это ускорит поиск символов в
исходные файлы на значительное количество времени за счет памяти
потребление...

-o Нанесите устаревшие символы на новые. Используйте этот переключатель, если у вас еще есть
устаревшие символы в исходном коде и не хотят (или не могут) удалять
их пока. В противном случае устаревшие символы игнорируются, хотя
даст вам предупреждение от метаконфиг.

-s Включите беззвучный режим.

-t Обведите символы по мере их нахождения.

-v Включите подробный режим.

-w Предположим, что файл разыскиваемого пользователя актуален. Это позволит пропустить время и память
потребляющая фаза сканирования исходного кода в поисках известных символов. Используй это
только если вы знаете, что ваш исходный файл не изменился относительно
бассейн метаконфиг используемые символы.

-G Также предоставьте GNU конфигурировать-подобный интерфейс к сгенерированному Настроить
скрипт, который также будет включен в дистрибутив. Это всего лишь обертка
вокруг Настроить сценарий естественно, но он позволяет людям, знакомым с
Инструмент GNU, который нельзя потерять при встрече с новым дистрибутивом.

-L директория Переопределить расположение библиотеки по умолчанию. Обычно используется только для metaconfig
Сопровождающим на местном уровне использовать разрабатываемые модули вместо
общедоступные. В директория указанный - тот, который содержит единицы
U каталог.

-M Разрешить производство confmagic.h файл для автоматического переназначения некоторых хорошо-
известные символы какой-либо другой альтернативе, например bкопировать() переназначение
прозрачно для memcpy () когда недоступен. Эта опция включена
автоматически, когда confmagic.h файл существует в каталоге верхнего уровня.
Просто удалите этот файл, если вы хотите отключить эту опцию навсегда.

-V Распечатать номер версии и выйти.

Обучение


Этот (длинный) раздел представляет собой введение в метаконфиг, в котором мы узнаем все
основы. Если вы уже знаете, как пользоваться метаконфиг, можете смело переходить к следующему
.

Обзор
Обычно, когда вы хотите получить какой-то пакет с исходным кодом для компиляции на данной платформе, у вас есть
чтобы отредактировать основной Makefile (если он есть!), выберите компилятор C, убедитесь, что вы
иметь нужные библиотеки, а затем запустить сделать команда. Если посылка разумно
хорошо написано, он будет компилироваться (без предупреждения :-). Само по себе последнее
предложение является реальной производительностью, поскольку, учитывая разнообразие платформ UNIX, доступных сегодня
и разнообразие вкусов, а это значит, что автор упаковки глубоко погрузился в
проблема с определением правильного выбора с учетом стандартных проб, догадок и путаницы
вокруг с системой включает и типы.

Однако, несмотря на весь свой талант, автор не может знать, что в какой-то системе есть
сломанный системный вызов, или что в некоторой системной структуре отсутствует одно стандартное поле, или
просто существует ли данный включаемый файл или нет. И я не рассматриваю неявные
предположения, такие как тип, возвращаемый таНос () функция или наличие
переименовать () системный вызов, чтобы назвать несколько. Но эти знания необходимы для достижения настоящего
портативность.

А теперь не будем ругать себя. Использование этой информации требует больших навыков, но может
приводит к созданию более переносимых программ, поскольку в этом случае они пишутся независимым от системы способом
и полагается только на то, что какое-то предположение верно или неверно для конкретной системы,
каждое предположение не связано друг с другом. То есть мы не говорим: мы находимся на
Система BSD или мы находимся в системе USG. В любом случае, сейчас это слишком расплывчато. Нет мы хотим
сказать исходному коду: эта система не имеет переименовать () системный вызов и таНос ()
возвращает (пустота *) значения.

Metaconfig - это инструмент, который позволит вам сделать именно это, с дополнительным преимуществом:
придется вручную редактировать Makefile, если все идет хорошо. Запуская метаконфиг, вы создаете
сценарий оболочки с именем Настроить. Много усилий было вложено в сценарий настройки.
внутренности, чтобы гарантировать, что он будет работать на 99% существующих оболочек, доступных на данный момент
пишу. Configure будет проверять целевую систему, задавая вопросы в случае сомнений и
собрать все ответы в один файл оболочки, который, в свою очередь, можно использовать для
автоматически генерировать настроенные файлы Makefile и включаемые файлы C.

Для ваших сценариев оболочки доступен только ограниченный (но довольно большой) набор символов.
и программы C. Все они задокументированы в файле глоссария. Все, что вам нужно сделать, это научиться
о них и начните использовать их для решения проблем переносимости и конфигурации. Потом,
запустив метаконфиг, для вашего пакета будет создан подходящий сценарий настройки.

Скрипт Configure состоит из нескольких блоков (более 300), каждый из которых
отвечает за определение небольшого количества символов оболочки и / или C. Агрегаты собраны
вместе на заключительном этапе, соблюдая график зависимостей (одному блоку может понадобиться результат
нескольких других единиц, которые затем помещаются в сценарий).

Символы
Символы - самая важная вещь в метаконфиг Мир. Они самые маленькие
распознаваемый объект, обычно слово, и ему может быть присвоено значение в конце Configure
исполнение. Например, символ препроцессора C HAS_RENAME - это метаконфиг символ, который
гарантированно определяется тогда и только тогда, когда переименовать () системный вызов присутствует. Так же,
домен $ ranlib переменная оболочки будет установлена ​​в ':' или 'ranlib' в зависимости от того,
позвонить в ранлиб Программа нужна для заказа файла библиотеки. Как это работает не
на данный момент важно понять, что этим символам life
(т.е. стоимость) при Настроить выполнение.

Использовать символы относительно просто. В исходном файле C вы просто используете символ
value, как директива препроцессора (например: #ифдеф HAS_RENAME) или, если символ
value - это строка, как если бы вы использовали макрос в C.И в файле оболочки или
Makefile, вы можете напрямую ссылаться на символ оболочки.

На самом деле, я вру, потому что это не так волшебно, как в предыдущем абзаце.
мог звучать. В файл C вам необходимо включить созданный Configure config.h файл и
вы должны обернуть свой сценарий оболочки или Makefile в файл .SH, и вы можете ссылаться на оболочку
только в части подстановки переменных этого .SH файла. Подробнее об этом позже.

Источник Файлы
Символы могут появляться только в ограниченном наборе исходных файлов, потому что метаконфиг будет только
сканируйте их, ища известные символы, пытаясь выяснить, какие единицы ему понадобятся.
Вы можете использовать символы C в исходных файлах C, то есть в файлах с .c, .h, .y or .l расширение и
символы оболочки ищутся только в файлах .SH.

Чтобы получить значение символа, файл C должен включать специальный config.h
файл, который создается Настроить когда присутствуют символы C. И файлы .SH запускаются
через оболочку, создавая новый файл. Однако в верхнем разделе файла .SH
особый config.sh файл (также создается путем запуска Настроить) является источником, а переменная
применяются замены. На самом деле, config.h производится путем запуска метаконфиг-produced
config_h.SH файл, снова используя подстановку переменных. Итак, мы собираемся взглянуть на это
немного более внимательно, так как это сердце всего конфигурация схема...

Технология подмена
Есть конструкция оболочки, которая называется здесь документ что позволяет команде принимать входные данные
указывается в самом скрипте. Этот ввод интерпретируется оболочкой как двойной
строка в кавычках или одиночная строка в кавычках в зависимости от формы здесь документа
спецификация.

Чтобы указать здесь документ, используется токен «<<», за которым следует единственный идентификатор. Из
затем оставшиеся строки сценария образуют входные данные для команды, пока здесь
документ находится в отдельной строке. Замена оболочки (включая переменную оболочки
замены) выполняется, если идентификатор не заключен в одинарные кавычки. Например:

var = 'первый'
tar = 'второй'
echo "-> первый здесь документ:"
кошка <
var = '$ var'
tar = '$ tar'
МНВ
echo "-> второй здесь документ:"
кошка << 'EOM'
echo $ var
эхо $ tar
МНВ
echo "-> конец."

при запуске через оболочку будет производить:

-> первый здесь документ:
var = 'первый'
tar = 'второй'
-> второй здесь документ:
echo $ var
эхо $ tar
-> конец.

Содержание первого здесь документа интерпретируется, в то время как второй выводится как есть.
И то, и другое полезно в сценарии .SH, как мы сейчас увидим.

. .SH Заметки к слайдам
Сценарий .SH обычно создается путем запуска СделатьSH скрипт другой существующий файл,
превращение файл в файл.SH. Возьмем один-единственный пример. Вот небольшой сценарий
(назовем это размер), который печатает одно сообщение, размер Int тип данных в C.
К сожалению, в нем зашито значение, а именно:

#!/ Бен / ш
intsize = '4'
echo "На этом компьютере тип int равен $ intsize bytes"

Давайте работать сделатьSH на нем, набрав 'сделатьSH размер'. Получаем сингл intsize.SH файл, который
выглядит так:

case $ CONFIG в
'')
если test -f config.sh; затем TOP = .;
elif test -f ../config.sh; тогда TOP = ..;
elif test -f ../../config.sh; затем TOP = ../ ..;
elif test -f ../../../config.sh; затем TOP = ../../ ..;
elif test -f ../../../../config.sh; затем TOP = ../../../ ..;
еще
echo "Не могу найти config.sh."; выход 1
fi
. $ TOP / config.sh
;;
ESAC
: Это заставляет файлы SH создавать цель в том же каталоге, что и файл SH.
: Это сделано для того, чтобы программа make зависимо всегда знала, где найти производные SH.
case "$ 0" в
* / *) cd `expr X $ 0: 'X \ (. * \) /' ';;
ESAC
echo "Извлечение intsize (с заменой переменных)"
: В этом разделе файла будут произведены подстановки переменных.
: Переместите все, что требует подпрограмм конфигурации, из! NO! SUBS! раздел в! ГРОК! ЭТО !.
: Защитите любые знаки доллара и обратные кавычки, которые вы не хотите интерпретировать.
: поставив перед ним обратную косую черту. Вы можете удалить эти комментарии.
$ spitshell> intsize <
$ starth
! ГРОК! ЭТО!

: В следующих долларах и обратных кавычках дополнительная обратная косая черта не требуется.
$ spitshell >> intsize << '! NO! SUBS!'
intsize = '4'
echo "На этом компьютере тип int равен $ intsize bytes"
! НЕТ! ПОДПИСКИ!
chmod 755 insize
$ eunicefix intsize

Первая часть этого скрипта (в случаев заявление) пытается найти config.sh
файл, чтобы его использовать. В $ КОНФИГУРАЦИЯ переменная ложна по умолчанию, по истине, когда
config.sh уже был получен (что было бы в случае, если бы этот файл был запущен из
в Настроить сам, но давайте не будем путать здесь вопрос).

Как только появится строка config.sh файл был исходным кодом, все символы оболочки, определенные Настроить Он
установленный. Мы знаем, что достигается второй оператор case, используемый для изменения текущего каталога, если
путь будет использоваться для достижения этой программы (например, если мы сказали 'sh ../скрипты/intsize.SH', мы
сначала побежит 'cd ../скрипты'перед продолжением). Если вы этого не понимаете, не
беспокоиться об этом.

А вот и самое интересное. Этот скрипт использует $ spitshell переменная, и это не
кое-что, о чем мы знаем ... пока. Если вы посмотрите файл глоссария, вы увидите, что
это переменная, известная метаконфиг. Если вы сделаете этот файл частью вашего дистрибутива
(включив его в файл MANIFEST.new, мы вернемся к этому позже) и запустим
метаконфиг, то Настроить скрипт определит подходящее значение для этой переменной
и он будет установлен в config.sh. То же самое касается $ starth и таинственный $ eunicefix at
конец. В разумной системе соответствующая часть config.sh будет выглядеть так:

spitshell = 'кошка'
starth = '#!/ Бен / ш'
eunicefix = ':'

Ах! Мы приближаемся. Теперь это выглядит знакомо. Мы сталкиваемся с одним кошка команда, чья
ввод поступает из документа с интерполяцией переменных и вывод которого перенаправляется на
размер. Стоимость будет равна $ starth, т.е. '#!/ Бен / ш'. Пока все в порядке.

Затем мы переходим ко второму расширению документа, чтобы получить оставшуюся часть скрипта. Этот
время, здесь символ документа заключен в одинарные кавычки, поэтому содержимое будет
дословно прилагается к размер файл. Итак, запустив 'sh intsize.SH', мы получаем
следующий вывод:

Извлечение intsize (с заменой переменных)

и посмотрев на созданный файл intsize, мы увидим:

#!/ Бен / ш
intsize = '4'
echo "На этом компьютере тип int равен $ intsize bytes"

это именно то, что у нас было в начале. Пока это простая процедура ...
Но как чудесно! Так получилось (чистое совпадение, поверьте!), Что метаконфиг знает
о $ intsize символ оболочки. Перенеся инициализацию intsize в переменную -
интерполированная область скрипта .SH и инициализация ее с помощью Настроить-расчетное значение,
и удалив теперь бесполезные комментарии, добавленные сделатьSH, мы получили:

case $ CONFIG в
'')
если test -f config.sh; затем TOP = .;
elif test -f ../config.sh; тогда TOP = ..;
elif test -f ../../config.sh; затем TOP = ../ ..;
elif test -f ../../../config.sh; затем TOP = ../../ ..;
elif test -f ../../../../config.sh; затем TOP = ../../../ ..;
еще
echo "Не могу найти config.sh."; выход 1
fi
. $ TOP / config.sh
;;
ESAC
case "$ 0" в
* / *) cd `expr X $ 0: 'X \ (. * \) /' ';;
ESAC
echo "Извлечение intsize (с заменой переменных)"
$ spitshell> intsize <
$ starth
intsize = '$ intsize'
! ГРОК! ЭТО!

$ spitshell >> intsize << '! NO! SUBS!'
echo "На этом компьютере тип int равен $ intsize bytes"
! НЕТ! ПОДПИСКИ!
chmod 755 insize
$ eunicefix intsize

Конечно, запуск этого сценария через оболочку снова приведет к тому же самому сценарию. Но если
мы бегаем Настроить на машине, где Int хранится как количество 64 бита, config.sh будете
набор размер до 8 а размер скрипт получит правильное значение и напечатает:

На этой машине тип int равен 8 байтам.

что правильно. Поздравляю! Мы только что настроили сценарий оболочки !!

производства config.h
Теперь мы можем взглянуть на путь config.h производится из config_h.SH, Мы знаем это
Бег Настроить производит config.sh скрипт (как именно это делается, строго не
здесь актуально, но для любопытных, это еще одна замена документа в
Настроить сам). В config_h.SH сам построен метаконфиг в то же время
Настроить при условии, что вы используете хотя бы один символ C.

Давайте посмотрим на какой-нибудь случайный config_h.SH файл, чтобы увидеть, что происходит на самом деле:

case $ CONFIG в
'')
если test -f config.sh; затем TOP = .;
elif test -f ../config.sh; тогда TOP = ..;
elif test -f ../../config.sh; затем TOP = ../ ..;
elif test -f ../../../config.sh; затем TOP = ../../ ..;
elif test -f ../../../../config.sh; затем TOP = ../../../ ..;
еще
echo "Не могу найти config.sh."; выход 1
fi
. $ TOP / config.sh
;;
ESAC
case "$ 0" в
* / *) cd `expr X $ 0: 'X \ (. * \) /' ';;
ESAC
echo "Извлечение config.h (с заменой переменных)"
sed < config.h -e 's! ^ # undef! / define!' -e 's! ^ # un-def! #undef!'
/*
* Этот файл был создан при запуске сценария config_h.SH, который
* получает свои значения из config.sh, который обычно создается
* запущен Configure.
*
* Не стесняйтесь изменять что-либо из этого по мере необходимости. Обратите внимание, однако,
* повторный запуск config.h.SH уничтожит все внесенные вами изменения.
* Для более постоянного изменения отредактируйте config.sh и повторно запустите config.h.SH.
*/

/ * Время настройки: $ cf_time
* Настроено: $ cf_by
* Целевая система: $ myuname
*/

#ifndef _config_h_
# определить _config_h_

/ * bcopy:
* Этот символ отображается на memcpy, если подпрограмма bcopy () не
* доступно для копирования строк.
*/
/ * HAS_BCOPY:
* Этот символ определяется, если подпрограмма bcopy () доступна для
* копировать блоки памяти. Вы не должны использовать этот символ под
* нормальные обстоятельства и используйте вместо этого напрямую bcopy (), что
* будет сопоставлен с memcpy (), если bcopy недоступен.
*/
# $ d_bcopy HAS_BCOPY / ** /
#ifndef HAS_BCOPY
#ifdef bcopy
# un-def bcopy
#endif
#define bcopy (s, d, l) memcpy ((d), (s), (l)) / * сопоставлен с memcpy * /
#endif

/ * HAS_DUP2:
* Этот символ, если он определен, указывает, что подпрограмма dup2
* доступно для дублирования файловых дескрипторов.
*/
# $ d_dup2 HAS_DUP2 / ** /

/ * I_STRING:
* Этот символ, если он определен, указывает программе на C, что она должна
* включают (Системы USG) вместо (Системы BSD).
*/
# $ i_string I_STRING / ** /

#endif
! ГРОК! ЭТО!

В верхней части файла мы узнаем стандартную конструкцию .SH, которая у нас уже есть.
детально изучен. Далее идет извлечение самого файла через документ здесь с
подстановки переменных. Однако здесь мы не используем простой кошка но СЕПГ вместо этого, поскольку
нам нужно проводить дальнейшее редактирование «на лету». Позже мы увидим почему, так что давайте забудем
об этом прямо сейчас.

Теперь мы переходим к ведущему комментарию, и файл помечается временем конфигурации,
целевая система и т. д. (эти переменные поступают из источника config.sh файл был
созданный Настроить). За заголовком комментария следует защита #ifndef для защиты
против многократного включения этого файла. Затем следует самое сердце файла ...

Это помогает знать, что $ d_ * и $ i_ * переменные установлены на 'определять' или же 'недеф' по
Настроить, в зависимости от того, присутствует ли в системе функция или включаемый файл, или
нет. Это означает:

# $ d_bcopy HAS_BCOPY / ** /

строка будет расширена до:

#define HAS_BCOPY / ** /

если для переменной $ d_bcopy задано значение 'define' или:

#undef HAS_BCOPY / ** /

если $ d_bcopy был установлен в undef, потому что функция отсутствовала. Однако это не так
что написано в config.h файл из-за СЕПГ фильтр мы уже видели,
который преобразует вторую форму в:

/ * # определить HAS_BCOPY / ** /

Это удобная форма для последующего редактирования config.h потому что вам нужно только удалить
ведущий '/ *', если вы хотите переопределить Настроитьвыбор. Точно так же вы можете добавить один
'/ *' в начале строки '#define', чтобы избежать определения конкретного символа.
Вот почему каждое определение символа защищено завершающим символом '/ ** /', чтобы закрыть начальный
комментарий открывается с помощью '/ *' (комментарии не вложены в C).

Теперь преобразование '#undef' в '/ * # define' - это хорошо, но если мы действительно хотим написать
'#undef', мы застряли ... если мы не напишем его как '# un-def' и позволим СЕПГ исправьте это на '#undef'
при производстве config.h, что на самом деле и делается здесь.

Те же рассуждения применимы к этим двум строкам:

# $ d_dup2 HAS_DUP2 / ** /
# $ i_string I_STRING / ** /

и предполагая config.sh определяет:

d_dup2 = 'определить'
i_string = 'undef'

мы попадем в произведенный config.h:

#define HAS_DUP2 / ** /
/ * # определить I_STRING / ** /

Чисто, как проточная вода? Хороший!

Теперь должно быть очевидно, что, включив config.h во всех ваших исходных файлах C вы можете
Знаешь что Настроить угадал в вашей системе. Фактически, используя эти символы, вы
написание настроенного кода C, так как метаконфиг будет знать, что вам нужны эти символы, и будет
создать подходящий config_h.SH файл, а также весь необходимый код в Настроить в
вычислить для них правильное значение (присвоив значения связанным переменным оболочки).

Бег Метаконфиг
Давайте сосредоточимся на метаконфиг программа на время, чтобы понять, как она использует свои единицы и
ваш исходный код для создания всех необходимых файлов конфигурации. Если вы собираетесь написать новый
единиц, вы должны хорошо понимать всю схему.

Если файл MANIFEST.new отсутствует, метаконфиг вместо этого попытается использовать файл МАНИФЕСТА,
для удобства. Везде, где мы упоминаем MANIFEST.new, его можно понимать как MANIFEST.
при условии, что в корне вашего пакета не найден файл MANIFEST.new.

Предполагая, что ваш файл MANIFEST.new правильно настроен и содержит все исходные файлы, которые вы хотите
configure, и что вы запустили упаковка в корневом каталоге исходного кода, чтобы создать
.упаковка файл, вы можете запустить метаконфиг и вы получите следующее:

$ метаконфигурация
Размещение единиц ...
Извлечение списков зависимостей из 312 единиц ...
Извлечение имен файлов (*. [Chyl] и * .SH) из MANIFEST.new ...
Создание файла розыска ...
Сканирование. [Chyl] файлов на наличие символов ...
Сканирование файлов .SH на наличие символов ...
Вычисление оптимального графа зависимостей ...
Создание личного файла make ...
Определение загружаемых единиц ...
Обновление файла make ...
Определение правильного порядка единиц ...
Создание Configure ...
Готово.

На первом этапе выполняется поиск всех файлов модулей (с расширением .U) в общедоступном каталоге.
сначала, потом в личном. Если вы копируете общедоступный файл в свой личный каталог U
(т.е. каталог с именем U на верхнем уровне вашего пакета), он переопределит общедоступный
версия. Когда у него есть список всех доступных модулей, он анализирует их и извлекает все
строки? MAKE: чтобы узнать о зависимостях и известных символах оболочки. Это также
фокусируется на строках? H :, чтобы узнать о символах C и о том, какие символы оболочки должны быть
вычисляется, чтобы получить правильное значение для этого символа C (так что у нас есть другой уровень зависимостей
Вот).

Затем правильные имена файлов извлекаются из файлов MANIFEST.new и Требуются файл
built: в этом файле перечислены все символы C и символы оболочки, необходимые для этого пакета. Мы
сначала просканируйте файлы C-типа на наличие символов C, затем распространите зависимости на их
связанные символы оболочки (взятые из строк? H:). Затем файлы .SH сканируются и, наконец,
все символы оболочки известны.

Создается временный Makefile, и metaconfig пытается сделать все символы оболочки, чтобы увидеть
какие команды (перечисленные во второй строке? MAKE:) выполняются, и, следовательно, какие единицы
действительно необходимо. Необязательные модули, которые иным образом не требуются, удаляются, и создается второй Makefile.
сгенерировано. На этот раз мы знаем обо всех отрядах и их порядках, необязательно.
единицы были удалены и значения по умолчанию вычислены для их символов оболочки. В
Настроить затем можно сгенерировать скрипт вместе с config_h.SH. Были сделаны.

конвенции
Чтобы весь процесс звучал, необходимо соблюдать надлежащие условные обозначения. Есть случай
соглашение для единиц измерения и соглашение об именах переменных.

Все единицы должны иметь первую букву в нижнем регистре, если они не являются специальными единицами. К
специальный, мы имеем в виду, что они на самом деле не определяют новые переменные оболочки, которые могут использоваться
пользователя в его файлах .SH, а скорее единицы, производящие сценарии или переменные оболочки, которые должны
использоваться внутри Настроить сценарий. Типичными примерами являются Инициал.U файл, который
инициализация основной переменной, или Myread.U который производит мое чтение скрипт используется почти
везде в Настроить когда пользователю нужно задать вопрос.

Затем неспециальные единицы подразделяются на две отдельные группы: единицы, определяющие переменные.
связаны с символом C и модулями, определяющими собственные переменные оболочки. Первая группа
далее делится на переменные, относящиеся к включаемым файлам (их имена начинаются с i_) и расширение
переменные, относящиеся к другим определениям (имя начинается с d_). Вторая группа имеет
имена, стоящие сами за себя, например куб.см.U определяет $ cc переменная оболочки, значение которой
компилятор C.

Специальные подразделения иногда резервируют для себя заранее определенные переменные и возвращают «результаты».
в других хорошо известных переменных. Например, мое чтение скрипт производства Myread.U
ожидает подсказки в $ rp, ответ по умолчанию в $ dflt и помещает ответ пользователя в $ ans.
Это не задокументировано на этой странице руководства: вам нужно пойти и посмотреть на само устройство, чтобы
понять, какие переменные используются и как следует использовать устройство.

. Ассоциация Словарь терминов
Файл глоссария автоматически создается Makegloss скрипт, который извлекает
информацию из строк? S :,? C: и? MAKE: и переформатирует их в алфавитно
отсортированный глоссарий. Важно прочитать Глоссарий, чтобы знать, какие символы вы
разрешено использовать. Однако в Глоссарии не сказано, как их использовать. Обычно это
вам решать.

Однажды вы, вероятно, напишете свои собственные единицы измерения и будете знать достаточно о метаконфиг
сделать это быстро и качественно. Однако никогда не забывайте правильно задокументировать свою работу в
строки? S: и? C:, иначе другие люди не смогут использовать его повторно. Помните о
время, когда у вас были только Глоссарий и эта страница руководства, чтобы начать работу.

Заключение
Теперь, когда вы знаете метаконфиг основы, вы должны прочитать ОПИСАНИЕ раздел, то
перейти к СПРАВКА раздел, чтобы узнать обо всех кровавых подробностях, таких как разрешенные
синтаксис для строк управления агрегатом (строки, начинающиеся с '?') или отдельных команд MAKE
вам разрешено использовать.

СПРАВКА


В этом разделе описывается внутреннее устройство метаконфиг, в основном синтаксис модуля, специальный
единицы, о которых вы должны знать, и файлы подсказок.

Общие Ед. Синтаксис
Модуль metaconfig разделен на две отдельные части. Раздел заголовка (строки, начинающиеся
с '?') и раздел оболочки (код, который должен быть включен в Настроить сценарий). это
можно добавить комментарии '? X:' в любом месте блока, кроме другого '?' линии (также
под названием контроль линий) имеют строгую политику заказа.

Если контрольная строка слишком длинная, можно использовать продолжение, избегая последнего
новая строка с обратной косой чертой и переход к следующей строке (которая затем должна быть с отступом
пробелами или табуляциями).

Ниже приводится формальное описание каждой из линий управления. Если не указано иное
в противном случае порядок этого представления - это порядок, который будет использоваться в модуле.

? RCS: бесплатно текст
Используется для комментариев RCS в верхней части блока.

?ИКС: любой текст
Комментарии общего назначения. Может появиться где угодно в отряде, но его нужно оставлять незамеченным.
Для комментариев RCS используйте форму? RCS: comment.

?ДЕЛАТЬ:символ список: зависимость список [+ необязательно]
Это первая строка зависимости. Первое символ список должен перечислить все символы
построенный этим юнитом (т.е. чье значение вычисляется секцией оболочки юнита).
Символы следует разделять пробелами. Если определенный символ предназначен только для внутреннего использования и
не должно появляться в сгенерированном config.sh файл, то ему должен предшествовать
'+' (не путать с дополнительными зависимостями, определенными ниже). Секунда
часть списка (после середины ':') - это зависимость модуля. Он должен перечислить все
необходимые спецподразделения, а также все символы, используемые снарядом
реализация. Если символ вставлен, но его значение конфигурации не критично, он
может предшествовать знак "+", и в этом случае это называется условной зависимостью: его
соответствующий блок будет загружен тогда и только тогда, когда этот символ действительно
хотел; в противном случае будет использоваться значение по умолчанию.

?ДЕЛАТЬ:таб команду
После исходных строк зависимости может быть одна или несколько командных строк. Те
команды будут выполнены, когда устройство захочет загрузить их в Настроить. Посмотреть
параграф о командах make для получения дополнительной информации. Обратите внимание, что ведущие таб
требуется символ перед команду.

? Y:макет
Объявите директиву макета для этого устройства. Эта директива может быть одной из строк
топ, по умолчанию or нижний (регистр не имеет значения, рекомендуемый стиль - разобрать их по буквам
верхний регистр). Если опущено, по умолчанию предполагается.

Эта директива требуется только в том случае, если вы хотите принудительно установить единицу сверху или снизу.
созданных Настроить скрипт, если это позволяют зависимости модулей. Важный
Таким образом, в начале могут возникнуть вопросы. В пределах одного класса компоновки единицы
сортируются в алфавитном порядке с двумя частными случаями для модулей d_ * и i_ *, принудительно
соответственно вверху и внизу своих классов (но они должны принадлежать
класс по умолчанию).

Если вы заставляете вверху блок, зависимости которого требуют, чтобы все остальные блоки
предшествовать этому, вы не добьетесь ничего интересного. Следовательно, эта директива действительно должна
использоваться для повышения приоритета некоторых интерактивных юнитов, не зависящих от многих
другие видимые пользователем символы, например вопросы, связанные с путями.

? S:имя_символа [(устаревший символ список)]:
Вводит символ оболочки. Эта первая строка называет символ, за которым может следовать
список, заключенный в круглые скобки с указанием устаревшего эквивалента. Эти устаревшие
символы будут переназначены на новые имя_символа если -o вариант предоставляется
метаконфиг.

? S:любой Текст, для Словарь терминов
В основном комментарий, описывающий символ оболочки, который будет извлечен Makegloss
в файл глоссария.

? S :. Закрывает комментарий символа оболочки.

? C:имя_символа [~ псевдоним] [(устаревший символ список)]:
Вводит новый символ C. В псевдоним name - это имя, под которым символ C будет
быть управляемым, т. е. если псевдоним требуется символ, тогда этот символ C будет записан
в config_h.SH файл. Обычно псевдоним - это просто '% <' (обозначает имя устройства).
а также есть линия? W:, отображающая символ C в псевдоним. Также соответствующие части
строк? H: явно защищены условием '?% <'. См. Символ
абзац псевдонимов для более подробной информации. Оставшаяся часть строки является необязательной.
устаревший символ список, в котором перечислены старые эквиваленты новой имя_символа.

? C:любой Текст, для Словарь терминов и config_h.SH
В основном комментарий, описывающий символ C, который будет извлечен Makegloss
в файл глоссария и метаконфиг в config_h.SH файл, если символ
требуется (или если требуется его псевдоним при использовании псевдонима символов).

? C :. Закрывает комментарий символа C.

?ЧАС:?символ:config_h.SH материал
Это общий запрос на включение в config_h.SH. Строка пишется только тогда, когда
охрана символ действительно хотел. Эта общая форма необходима, когда символ C
использовался алиасинг. В противном случае, если вы используете одну из других "стандартных" форм,
охрана автоматически осуществляется метаконфиг себя.

?ЧАС:#$ d_var VAR "$ var"
Условно определяет VAR Символ C в $ var когда установлено на 'определять'. Подразумевает
'?VAR: 'охраняющее состояние, и метаконфиг автоматически ссылки VAR к его двум оболочкам
переменные зависимости (т. е. оба $ d_var и $ var будет отмечен как стремятся if VAR is
используется в источниках C).

? H: # определить VAR [необязательный текст]
Всегда определяет VAR Символ C до некоторого значения. Подразумевает '?VAR: 'охраняющее состояние.
Для самого модуля создается автоматическая зависимость оболочки.

? H: # определить ДИСП (x, y, z) $ var
Всегда определяет макрос VAR быть ценностью $ var Переменная. Это зависит от
блок для обеспечения $ var имеет разумную ценность. Автоматическая зависимость между C
макрос VAR и переменная оболочки установлена, и вся строка охраняется
скрытый '?VAR: '.

?ЧАС:#$ d_var VAR
Условно определяет VAR if $ d_var установлен на 'определять'. Подразумевает '?VAR: 'охрана
состояние. Создается автоматическая зависимость оболочки от $ d_war.

? H: # определить VAR "$ var"
Присваивает настроенное значение параметру VAR Символ C. Подразумевает '?VAR: 'охраняющее состояние.
Для связывания создается автоматическая зависимость оболочки. VAR и $ var.

?ЧАС:. Закрывает config_h.SH запросы на включение.

? M:C символ: C Зависимости
Вводит магическое определение символа C для confmagic.h, и определяет
охранный символ для остальных? M: определения. Эта строка молча подразумевает
'? W:% <:C символ', т.е. модуль будет загружен в Configure, если появится символ C.
в источниках C, независимо от того, используется ли магия. Зависимости C активированы
когда используется магия, чтобы заставить их определение в config_h.SH, Однако если
магия не используется, но символ C появляется в источнике без необходимого C
зависимостей, вы будете предупреждены каждый раз, когда будет создан файл Wanted, поскольку он может быть
проблема переносимости (а также потому, что устройство безоговорочно загружается в
Настроить всякий раз, когда используется символ C, независимо от других строк? C: из
Ед. изм).

? M:CPP определение
Определяет отображение magic cpp, которое будет введено в confmagic.h всякий раз, когда
используется символ. Есть неявное "?"сим'охранять где сим это имя символа
определяется ведущей линией? M :.

? M :. Закрывает confmagic.h запрос на включение.

? W:оболочка символ список:C символ список
Связывает судьбу символов оболочки с символами C: если любой из символов C
Если перечисленные символы необходимы, то все символы оболочки помечаются как требуемые. Полезно для
принудительное включение юнита (список символов оболочки установлен на '% <') при наличии некоторого C
Обнаружен символ. Список символов оболочки можно оставить пустым, чтобы воспользоваться преимуществами стороны.
эффект расположения символа C во встроенном препроцессоре (символ определенный
для этого препроцессора, если он находится в источнике). Искать узоры с пробелом
в них вам нужно заключить символы C в простые кавычки, как в 'struct
часовой пояс'.

? V:только для чтения Символы:читай пиши Символы
Это металинт подсказка и должна использоваться только в специальных юнитах, экспортирующих некоторую оболочку
переменные. Переменные до середины ':' экспортируются только для чтения (их изменение
выдаст предупреждение), в то время как другие символы могут быть свободно прочитаны и изменены.

? F:файлов создали
Эта линия служит двум целям: это металинт подсказка, а также заполнитель для
будущее сделать использовать. Он должен перечислить три типа файлов: временный, который
созданные для тестирования, частные UU, созданные в каталоге UU для последующего использования
прочтение, а общедоступные оставлены в корневом каталоге пакета. Временный
файлы должны быть перечислены с предшествующим знаком "!" символ (что означает "нет! они не используются повторно
позже! "), частным файлам UU должен предшествовать './' (что означает: для их использования, скажем,
./файл, А не только файл), а публичные - как есть.

? T:оболочка временные
Другой металинт намекать. В этой строке перечислены все переменные оболочки, используемые как временные.
внутри секции оболочки этого устройства.

? D:символ='ценностное '
Значение инициализации для символов, используемых в качестве условных зависимостей. Если нет? D: строка
найден, то вместо него используется нулевое значение. В металинт программа предупредит вас, если
символ используется хотя бы один раз в качестве условной зависимости и не имеет надлежащего
? D: инициализация. Хорошая практика - добавлять эти строки даже для нулевого значения.
инициализация, поскольку она подчеркивает возможную необязательную природу символа.

? O:любой сообщение являетесь хотеть
Эта директива указывает на то, что данное устройство в целом является устаревшим. При использовании любого
его символов (или косвенного использования через зависимости), сообщение выводится на
экран (на stderr). Вы можете поместить одну или несколько строк, и в этом случае каждая строка будет
распечатать по порядку.

? LINT:металинт подсказки
Смотрите пост в металинт справочную страницу с объяснением различных советов, которые могут быть
используемый.

?В ЭТОМ:инициализация код
Код инициализации, указанный в этой строке, будет загружен в верхней части
Настроить скрипт при условии, что блок необходим.

C Символ Aliasing
Иногда нельзя положиться на метаконфигсобственный выбор по умолчанию для config_h.SH
комментарии и определение символа C. Вот где в игру вступает алиасинг. Поскольку это скорее
сложно объяснить, мы изучим пример, чтобы понять лежащий в основе механизм.

Модуль d_const.U пытается определить, знает ли ваш компилятор C о Const
ключевое слово. Если это не так, мы хотим переназначить это ключевое слово на пустую строку, чтобы позволить
компиляция программы. Более того, мы хотим автоматически запускать тест, когда Const слово
используется.

Вот соответствующие части модуля d_const.U:

? MAKE: d_const: cat cc ccflags Setvar
? СДЕЛАТЬ: -выбрать добавить $ @%
? S: d_const:
? S: Эта переменная условно определяет символ HASCONST, который
? S: указывает программе C, что этот компилятор C знает о
? S: константный тип.
? S :.
? C: HASCONST ~% <:
? C: Этот символ, если он определен, указывает, что компилятор C знает о
? C: тип const. Фактически нет необходимости проверять этот символ.
? C: в ваших программах. Простое использование ключевого слова "const" приведет к
? C: запустить необходимые тесты.
? C :.
? H:?% <: # $ D_const HASCONST / ** /
? H:?% <: # Ifndef HASCONST
? H:?% <: # Определить const
? H:?% <: # Endif
?ЧАС:.
? W:% <: const
? LINT: установить d_const
? LINT: известная константа
: проверьте ключевое слово const
эхо ""
echo 'Проверка, знает ли ваш компилятор C о "const" ...'> & 4
/ bin / cat > const.c << 'EOCP'
Основной ()
{
const char * foo;
}
ЭОП
если $ cc -c $ ccflags const.c> / dev / null 2> & 1; тогда
val = "$ определить"
echo "Да, это так."
еще
val = "$ undef"
echo "Не-а, это не так."
fi
установить d_const
eval $ setvar

Сначала мы замечаем использование строки? W:, которая в основном говорит: «Этот блок нужен, когда
Const ключевое слово используется в файле C. ". Для условного переназначения Const к нулю
строка в config.h, Я решил условно определить ХАСКОНСТ с помощью $ d_const.

Однако здесь возникает проблема, поскольку ХАСКОНСТ символ не будет использоваться в
источники, только Const токен есть. И? H: линия, определяющая ХАСКОНСТ неявно
охраняется «? HASCONST». Следовательно, мы должны добавить явное ограничение '?% <', Чтобы указать
метаконфиг что эти строки должны быть включены в config_h.SH всякий раз, когда символ '% <'
разыскивается (% <относится к имени юнита, здесь d_const).

Это почти идеально, потому что строка? W: d_const когда бы ни Const используется, то
строки? H: будут включены в config_h.SH файл. Однако главный комментарий (? C:
линии) прикреплены к ХАСКОНСТ сам также охраняется через ХАСКОНСТ, т.е. имеет неявный
Ограничение "? HASCONST". Следовательно, необходимость в алиасинг домен ХАСКОНСТ символ на "% <".

Остальная часть устройства (часть корпуса) действительно проста. Это просто
пытается скомпилировать образец программы на C, используя Const ключевое слово. Если это возможно, то это будет
определять $ d_const через $ setvar функция (определяется Сетьвар.У Ед. изм). Смотрите абзац
о специальных подразделениях для более подробной информации.

MAKE Команды
В командной строке? MAKE: вы можете написать команду оболочки, которая будет выполняться как есть, или
особый -выбирать команда, которая попала в ловушку метаконфиг и проанализировал, чтобы увидеть, что должно быть
сделано. Ведущий '-' нужен только для предотвращения сделать от сбоя при возврате команды
ненулевой статус - на самом деле он не нужен, так как мы используем 'сделать -n'решить
зависимости, но я советую вам сохранить его на случай, если он станет обязательным в будущих версиях.
Синтаксис выбирать команда является:

-выбирать CMD $@ целевой_файл

в котором $@ стандартный макрос в Makefiles, обозначающий текущую цель (имя
строящегося устройства, с удаленным окончательным расширением .U). В CMD часть - это
представить метаконфиг команда, которую нужно запустить, и целевой_файл еще один параметр, чей
интерпретация зависит от CMD сам. У него также удалено последнее расширение .U и
обычно относится к модульному файлу, если он не начинается с './', и в этом случае он ссылается на один
метаконфиг управляющие файлы в '.МТ каталог.

Доступные команды:

добавить Добавляет целевой_файл в Настроить.

add.Config_sh
Заполняет эту часть Настроить производя config.sh файл. Только б / у
добавляются переменные, условные (из условных зависимостей)
пропущено.

add.Null Добавляет раздел, инициализирующий все используемые переменные оболочки для пустой строки.

c_h_weed Производит config_h.SH файл. Печатаются только необходимые строки.

cm_h_weed Производит confmagic.h файл. Печатаются только необходимые строки. Этот
команда доступна только тогда, когда -M включен переключатель, или когда confmagic.h файл
уже существует.

закрыть.Config_sh
Добавляет последний символ 'EOT' в отдельную строку, чтобы закончить здесь документ
конструкция, производящая config.sh .

prepend Добавляет содержимое цели к целевой_файл если этот файл не пуст.

сорняк Добавляет единицу к Настроить как Добавить команда, но сделайте несколько дополнительных тестов
удалить '?символ' а также '%символ'строки из целевой_файл если символ
не разыскивается и не разыскивается условно. Форма "%" используется только внутри компании
метаконфиг при создании собственных файлов .U в формате '.МТкаталог.

wipe То же, что и Добавить действительно, но выполняет дополнительную подстановку макросов. В
доступные макросы описаны в Проводные Макрос пункт.

Как примечание стороны, метаконфиг генерирует -второй внутренняя команда для работы с условными
зависимости. Вы не должны использовать его самостоятельно, но вы увидите это, если отсканируете
генерируется Makefile в .МТ каталог.

Проводные Макрос
Следующие макросы распознаются вытирать командование и заменено перед включением в
Настроить:

Базовый номер версии пакета, полученный из .упаковка.

Текущая дата.


Адрес электронной почты сопровождающего этого пакета, полученный из вашего
.упаковка.


Название пакета, производное от вашего .упаковка .


Уровень патча метаконфиг программа (устарела в пользу ).


Уровень ревизии SVN метаконфиг программу.

Номер версии метаконфиг программу.

Эти макросы в основном используются для идентификации метаконфиг версия, которая сгенерировала
особый Настроить скрипт и для какого пакета это было сделано. Электронный адрес
сопровождающий встроен в основные инструкции, которые Настроить печатает при запуске.

Недавние метаконфиг версии понимают гораздо более общий синтаксис формы:

<$ переменная>

который заменяется во время создания конфигурации значением переменная взято из твоего
.упаковка файл. В конце концов, старый формат фиксированного макроса исчезнет, ​​и <$ baserev>
заменит во всех поставляемых агрегатах.

Особый Единицы
Следующие специальные единицы используются для факторизации кода и обеспечения более высокого уровня
функциональные возможности. Они либо создают сценарий оболочки, который может быть получен, либо оболочку
переменная, которая может быть Evalизд. Передача параметров осуществляется через известные переменные, либо
именованные или анонимные, например $ 1, $ 2 и т. д. (которые можно легко установить через оболочку набор
оператор). Когда Настроить выполняет, он создает и переходит в UU каталог, поэтому каждый
созданный скрипт лежит там и не мешает файлам из вашего пакета.

Вот особые единицы, о которых вам следует знать, и способы их использования.

Cppsym.U
Этот модуль создает сценарий оболочки под названием Cppsym, который можно использовать для определения
определяется ли какой-либо символ в списке препроцессором C или компилятором C, который у вас есть
указано. Он может определять статус любого символа, хотя символы в
(список атрибутов) легче определить.

Csym.U
Это устанавливает переменную оболочки $ csym, используемую внутри Настроить проверить, есть ли
данный символ C определен или нет. Типичное использование:

установить символ результат [-fva] [предыдущий]
eval $ csym

Это установит результат переменной в значение "истина", если функция [-f], переменная [-v] или
array [-a] определен, иначе - false. Если указано предыдущее значение и -r
переключатель был предоставлен Настроить (См Настроить Опции параграф), то
значение повторно используется без вопросов.

Способ выполнения этого вычисления зависит от ответа пользователя на вопрос.
Настроить спросит, следует ли nm добыча или нет. Если
была проведена экстракция, прибор просто просматривает список символов, в противном случае
он выполняет проверку компилируемой ссылки, если только -r было дано повторно использовать ранее вычисленные
ценность, естественно ...

Конец.U
Скопировав этот блок в свой личный U каталог и добавление зависимостей к
? MAKE: строка, вы можете принудительно загрузить данный юнит в Настроить даже если это не так
иначе хотел. Некоторые юниты могут быть вынуждены только Настроить сюда.

Fileexp.U
Это устройство создает сценарий оболочки файлэксп который расширит имена файлов, начинающиеся с
тильды. Типичное использование:

exp_name = `. / filexp $ name`

назначить расширенное имя файла в exp_name.

Findhdr.U
Это устройство производит найтиhdr скрипт, который используется для поиска файлов заголовков в
$ usrinc или в других незнакомых местах, использующих возможности cpp. Скрипту дается
включает базовое имя файла, например 'stdio.h' или 'sys / file.h', и возвращает полный путь к
файл inlcude и нулевой статус, если он найден, или пустая строка и ненулевой статус
если файл не может быть найден.

Getfile.U
Этот модуль производит небольшой фрагмент кода оболочки, который должен быть получен, чтобы получить файл.
имя и сделать некоторые проверки вменяемости. Необязательно, расширение имени выполняется ~.

Чтобы использовать это устройство, $ rp и $ dflt должен содержать вопрос и ответ по умолчанию, который
будут переданы как есть мое чтение сценарий (см. следующие Myread.U). $ fn
переменная управляет операцией, и результат возвращается в $ ans.

Чтобы найти файл или каталог, введите 'f' или 'd' в f ~ /. Если появляется '~', то ~ имя
замена разрешена. Если появляется '/', принимаются только абсолютные пути и
~ подстановки имен всегда раскрываются перед возвратом. Если указан '+',
проверки существования пропускаются. Если в пределах $ fn, то пользователю разрешено
ответьте «нет».

Обычно, если вы не просили о переносимости, замена имени происходит по запросу.
Однако в некоторых случаях вы хотите обойти переносимость и принудительно
подмена. Для этого вы можете использовать букву «е» (развернуть).

Если используется специальный тип 'l' (найти), то $ fn переменная должна заканчиваться ":",
за которым следует базовое имя файла. Если ответ - это каталог, базовое имя файла будет
добавляется перед проверкой существования файла. Это полезно в вопросах типа определения местоположения.
как это:

dflt = '~ новости / библиотека'
: нет необходимости указывать 'd' или 'f' при использовании 'l'
fn = 'l ~: активный'
rp = 'Где активный файл?'
. ./получить файл
active = "$ ans"

Кроме того, буква p (путь) может использоваться вместе с l, чтобы указать
получить файл что ответ без "/" в нем должен быть принят, предполагая, что он будет
быть в PATH каждого в то время, когда это значение будет необходимо.

Также полезна возможность указать список ответов, которые следует принять.
дословно, минуя все проверки. Этот список должен быть заключен в круглые скобки, а элементы
должны быть разделены запятыми, без пробелов. Не забудьте процитировать
результирующая строка, поскольку скобки имеют значение для оболочки. Например:

dflt = '/ bin / install'
fn = '/ fe ~ (установить,. / установить)'
rp = 'Какую программу установки использовать?'
. ./получить файл
install = "$ ans"

позволит пользователю указывать только полные пути, относящиеся к существующим файлам,
но все же разрешить специальные ответы "install" и "./install" как есть (при условии
конечно, что-то будет иметь дело с ними позже в цепочке, так как они
не соответствует общему ожидаемому кадру).

Если ответ на вопрос «нет», то проверки существования пропускаются и
возвращается пустая строка. Обратите внимание, что поскольку получить файл звонки мое чтение внутри все
функции, доступные с мое чтение применить здесь к.

Если требуется полностью развернутое значение (например, в Makefile), вы можете использовать
домен $ ansexp переменная, которая всегда правильно настраивается получить файл как расширенный
версии $ ans. Конечно, он не будет расширять имя ~, если вы не разрешили это в
первое место в $ fn Переменная.

Инхдр.У
Это устройство производит $ inhdr переменная оболочки, используемая внутри Настроить проверить
существует ли набор заголовков или нет. Типичное использование:

установить заголовок i_header [header2 i_header2 ...]
eval $ inhdr

Это напечатает сообщение, сообщающее, был ли заголовок найден или нет, и установит
i_header соответственно. Если указано более одного заголовка и первый
заголовок не найден, пробуем следующий, пока список не станет пустым или не будет найден.

Inlibc.U
Это устройство производит $ inlibc переменная оболочки, используемая внутри Настроить проверить
определена ли данная функция C или нет. Типичное использование:

установить функцию d_func
eval $ inlibc

Это напечатает сообщение о том, была ли функция найдена или нет и установлена
$ d_func соответственно. Внутри он использовал $ csym рутина.

Лок.U
Этот важный модуль создает сценарий оболочки LOC который можно использовать, чтобы узнать, где
в списке каталогов лежит данный файл. Первый аргумент указывает файл для
быть найденным, второй аргумент - это то, что будет возвращено, если поиск завершится неудачно, а
аргументы reamining - это список каталогов, в которых нужно искать файл. Для
пример:

dflt = `. / loc sendmail.cf X / USR / Lib / var / lib / sendmail / Lib`

установил бы $ dflt в X если нет sendmail.cf файл был найден в перечисленных каталогах,
или что-то вроде /usr/lib/sendmail.cf в некоторых системах. Смотрите также Getfile.U.

MailAuthor.U
Этот модуль должен быть включен в строку? MAKE: вашего личного End.U, чтобы сделать
это в Настроить. Предлагает пользователю зарегистрироваться у автора, по желанию
получать уведомления о поступлении новых исправлений или получать их автоматически при выпуске.
Вам необходимо установить почтовый агент для этого (как минимум версия 3.0).

MailList.U
Этот модуль должен быть включен в строку? MAKE: вашего личного End.U, чтобы сделать
это в Настроить. Он предлагает пользователю подписаться или отказаться от подписки на список рассылки.
где проходят обсуждения, связанные с пакетом. Вам нужно бежать упаковывать
и ответьте на вопросы, связанные со списком рассылки, чтобы настроить правильные переменные в вашем
.упаковка прежде, чем это устройство может быть введено в эксплуатацию.

Myinit.U
Скопируйте этот блок в свой личный U каталог, чтобы добавить свои собственные значения по умолчанию в некоторые
внутренние переменные. Этот блок загружен в Настроить в конце концов по умолчанию
инициализации выполнены.

Myread.U
Это устройство производит мое чтение сценарий оболочки, который должен быть получен для выполнения
читать. Он позволяет экранировать оболочку, назначать по умолчанию и оценивать параметры, как
задокументировано в модуле Instruct.U. Он также позволяет динамически настраивать -d вариант,
который будет использоваться для оставшейся части выполнения скрипта.

Чтобы использовать это устройство, $ rp должен держать вопрос и $ dflt должен содержать значение по умолчанию
отвечать. Вопрос будет напечатан самим скриптом, а результат будет возвращен.
в $ ans Переменная.

Вот типичное использование:

dflt = 'у'
rp = 'Вопрос?'
. ./мое чтение
значение = "$ ans"

Для получения дополнительной информации см. Само устройство.

Старыйconfig.U
Этот юнит должен быть частью вашей зависимости? MAKE: line, когда некоторые из ваших юнитов пытаются
для повторного использования старого значения символа. Этот блок отвечает за получение старых ответов
от config.sh или предоставление полезных советов при работе на данной платформе для
первый раз. Увидеть Настроить Советы параграф для получения дополнительной информации о подсказках.

Префикс.U
Целью этого модуля является обнаружение изменений в каталоге префиксов установки для
автоматически пересчитывать подходящие значения по умолчанию из предыдущих ответов. Он полагается на
значение $ oldprefix переменная, которая содержит предыдущий каталог префиксов, когда он
изменено, в противном случае пусто. Например, если префикс был изменен с / неавтоматического в
/ USR / местные, то предыдущий каталог установки двоичного файла будет изменен с
/ opt / bin в / USR / местные / бен, или останется неизменным, если, скажем, / бен.

Вам нужно позвонить набор перед выпуском Eval on $ prefixit, Таких как:

установить dflt var [каталог]
eval $ prefixit

который установил бы $ dflt в $ var or $ prefix / dir в зависимости от того, осталась ли приставка
то же самое или нет. Если директория это строка никто, одиночное значение пробела в $ dflt хранится как-
есть, даже когда префикс меняется. Если директория опускается, то $ dflt установлен на пустой
строка, если префикс изменился, на $ var в противном случае.

Префиксup.U
Предназначение thit модуля аналогично Prefixit.U, то есть помогает исправить
строка по умолчанию для изменения префикса. Однако переменная оболочки $ prefixup,
при оценке будет восстанавливать только расширения имен ~, если в префиксе используется такой escape
механизм. Используйте это как:

установить dflt
eval $ prefixup

перед запросом через получить файл например. Если в префиксе не используется ~ имя
расширения, то вышеупомянутое не будет y переменная, естественно.

Typedef.U
Это устройство производит $ typedef переменная оболочки, используемая внутри Настроить проверить
существует ли typedef или нет. Типичное использование:

установить typedef val_t по умолчанию [включает]
eval $ typedef

Это установит переменную val_t к стоимости по умолчанию если typedef не был найден
среди перечисленных включаемых файлов или в ЬурейеЕ если найден. Если включаемые файлы не
указано, единица заглядывает в Только. Если вы укажете некоторые из них, только
те смотрят.

Unix.U
Цель этого модуля - определить некоторые из наиболее распространенных UNIX-измов через переменные.
которые можно изменить из командной строки или с помощью соответствующих файлов подсказок. Особенно,
$ _exe, $ _o и $ _a установлены. Все единицы должны относиться к $ _o и не .o непосредственно.
'.' является частью этих переменных.

Сетьвар.У
Этот модуль производит переменную, которая используется внутри Настроить установить
определять/ undef значение для данного символа, генерируя предупреждение, когда оно внезапно изменяется
от предыдущего значения. Например:

val = "$ определить"
установить d_variable
eval $ setvar

Если предыдущий $ d_variable значение было ненулевым и $ val другое, "эй"
выдается предупреждение.

Вау.U
Это устройство производит тпру скрипт, который выдает предупреждение, когда ценностное в переменной
чье имя $ var не совпадает со старым предыдущим значением, хранящимся в $ было, на
вернуть, $ td и $ tu иметь надлежащую ценность для определять or недеф переменная. Видеть
примеры в Inlibc.U.

Builtin Препроцессор
Каждый блок должен быть включен в Настроить проходит через встроенный препроцессор. Предварительно
операторы процессора начинаются с символа '@' ('#' - это комментарий оболочки
персонаж). Он работает так же, как препроцессор C, но позволяет использовать оболочку и perl.
убегает. Вот доступные функции:

@если выражение
If выражение верно, продолжайте загрузку кода до @end, @elsif или @else.

@элсиф выражение
Альтернативный выбор. Если выражение верно, продолжайте загрузку кода до @end,
другой @elsif или @else.

@else Код по умолчанию для загрузки, если @if выражение было ложным, и ни один из
необязательный @elsif сопоставлен. Загружать до @end.

@end Закройте оператор условной загрузки, открытый @if.

@определять символ
Сообщает препроцессору, что символ определяется с этого момента.

Условный выражение может включать имена символов (значение истинно, если требуется символ, или
определяется через @определять или оболочка / perl ускользает. Эти атомы можно объединить с помощью
традиционные логические операторы '!' для отрицания, '&&' для логического И и '||' для логического
или.

Текст в одинарных скобках - это тест оболочки, а текст между двойными скобками -
тест на Perl. А именно выражения:

{ оболочка текст }
{{ Perl текст }}

переведены на:

if оболочка текст > / dev / null 2> & 1; затем выйдите из 0; иначе выход 1; фи
если (Perl текст) {выход 0;} иначе {выход 1;}

и статус выхода используется стандартным способом для получения логического значения, т.е. 0 - истина, а
все остальное ложно. Обратите внимание, что в perl могут быть выражены только простые условия, пока
какой-то сложный код может быть загружен в метаконфиг и выполнен.

Встроенный препроцессор можно использовать для точной настройки некоторых модулей (см. d_getname.U для
сложный пример) в зависимости от символов, фактически используемых программой или файлами
присутствует в раздаче. Например, Старыйconfig.U использует такой тест:

@if {тест -d ../подсказки}

и Настроить будет содержать код, зависящий от подсказки, только если есть подсказки каталог в
каталог верхнего уровня пакета. Обратите внимание, что тесты запускаются изнутри '.МТ'каталог,
отсюда и необходимый "../" в тесте.

Препроцессор также можно использовать, чтобы избежать добавления бесполезного кода, когда символ не
определенный. Таким образом можно защитить блоки, определяющие более одного символа (поскольку
загружается как единое целое) путем сбора символьно-зависимого кода в паре @ if / @ end. Для
пример:

@если I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h = 'правда'
@еще
need_time_h = 'ложь'
@конец

проверит, используется ли в исходном коде один из трех символов, управляющих
домен время.ч or sys / time.h включение и соответственно определите символ оболочки. Это дает
Настроить обратная связь о том, что нужно источникам, и устранение недостатка, связанного с исправлением
замороженные единицы.

С помощью строк '? W:' вы можете получить интересные комбинации. Например, i_time.U Ед. изм
необходимо знать, используют ли источники C структура часовой пояс тип. Следовательно,
линия:

? W :: часовой пояс

используется как побочный эффект определения символа часовой пояс для препроцессора. В
код устройства может тогда сказать:

@if часовой пояс
для s_timezone в '-DS_TIMEZONE' ''; делать
@еще
s_timezone = ''
@конец

... код с использованием s_timezone ...

@if часовой пояс
сделанный
@конец

и есть дополнительный цикл, пытающийся два последовательных значения для s_часовой пояс переменная, но только
если нужно.

Устаревший Символы
Устаревшие символы сохранены, чтобы облегчить переход со старыми метаконфиг единицы. Пока не
домен -o переключатель передается метаконфиг они будут проигнорированы. Однако Устаревший файл будет
быть сгенерированным, сообщая вам, какие файлы используют эти устаревшие символы и какие
новые символы, которые будут использоваться.

Срок службы устаревших символов - одна полная ревизия, т. Е. Они будут удалены, когда
выдается следующая базовая ревизия (обновления патчей, конечно, не в счет). Следовательно, это
разумно перевести свои источники и начать использовать новые символы как можно скорее.

Настроить Советы
Может случиться так, что внутренняя логика конфигурации сделает неправильный выбор. Для
например, на какой-то платформе vfork () системный вызов присутствует, но не работает, поэтому он должен
не использоваться. Невозможно включить эти знания в сами модули, потому что
это может быть временная проблема, которую поставщик со временем исправит, или что-то, что
был представлен новым обновлением ОС.

В любом случае, для всех этих крошечных проблем, которые слишком специфичны для системы, метаконфиг
обеспечивает поддержку файлов подсказок. Чтобы использовать его, вам нужно создать подсказки каталог в
каталог верхнего уровня пакета и иметь его при запуске метаконфиг. Это загрузит
часть, связанная с подсказкой из Старыйconfig.U.

С этого момента вы можете предварительно установить некоторые переменные оболочки Настроить использует в конкретных ОС
.sh файл. Есть код в Старыйconfig.U который пытается угадать, какие файлы подсказок нужны
вычисление стандартного имени на основе имени системной ОС, имени ядра, выпуска
номер и т. д. Поскольку эта информация может быстро измениться, я не документирую ее.
здесь. Вы должны перепроектировать код из Старыйconfig.U.

При первом выпуске пакета каталог файлов подсказок должен быть пустым. Если
пользователи вашего пакета жалуются, что у них проблемы с Настроить по умолчанию на
конкретной системе, вы должны увидеть, является ли это проблема конкретной платформы или
общий. В первом случае пора ввести новый файл подсказок, а в
в последнем случае следует доработать соответствующий блок.

Например, известно, что системы SGI имеют неисправный vfork () системный вызов, начиная с этого
пишу. И соответствующее имя файла подсказки сги.ш. Итак, все, что вам нужно сделать, это создать
a подсказки / sgi.sh файл, в котором вы пишете:

d_vfork = "$ определить"

который всегда будет переназначать вилка on вилка (См. d_vfork.U). При работе в системах SGI для
первый раз, Настроить обнаружит, что есть подсказки / sgi.sh файл, и что мы на
машина IRIX (имя ядра часто / irix), поэтому она предложит SGI как
возможный намек. Если пользователь принимает это, и поскольку $ d_vfork значение изменяется через
$ setvar звоните, а Вау! будет выдан, чтобы предупредить, что мы собираемся переопределить значение
вычислено Настроить.

Обратите внимание, что вам не нужно предоставлять Найти намеки, известные Старыйconfig.U. Если файл подсказки
отсутствует, он не будет предложен в качестве возможного выбора. С помощью эвристических тестов вычислили
возможные кандидаты на подсказки ненадежны. Если у вас есть новые значения или другие тесты, пожалуйста,
присылайте их мне...

Переопределение Choices
Если вы создадите config.over файл в каталоге верхнего уровня, Настроить спросит вас, если вы
хотите загрузить его, чтобы изменить значения по умолчанию. Это делается до создания
config.sh файл, так что это дает вам возможность исправить значения, хранящиеся в нем.

Это отличается от подхода подсказок тем, что это локальный файл, который пользователь
бесплатно создавать для собственного использования. Вы не должны предоставлять такой файл самостоятельно, но позвольте
пользователь знает об этой возможности.

Настроить Опции
Ассоциация Настроить сценарий может быть вызван с некоторыми параметрами, указанными в командной строке, чтобы
немного изменить его поведение. Вот допустимые варианты:

-d Используйте значения по умолчанию для всех ответов.

-e Продолжайте, не задавая вопросов, за пределами производства config.sh.

-f файл Использовать указанный файл в качестве конфигурации по умолчанию. Если этот переключатель не используется,
конфигурация взята из config.sh, если присутствует.

-h Распечатать справочное сообщение и выйти.

-r Если возможно, повторно используйте значение символов C. Это позволит избежать дорогостоящих nm символ
добыча. Если используется в первый раз (без предыдущего файла конфигурации),
Настроить попытается скомпилировать и связать небольшую программу, чтобы узнать о
наличие символа или его отсутствие.

-s Бесшумный режим. Только строки, напечатанные в файловом дескрипторе # 4, будут видны на
экран (это важные сообщения). Полностью выключить невозможно
любой вывод, но вы можете использовать 'Настроить -дерсы > / dev / null 2> & 1'иметь полный
пакетный запуск без вывода и взаимодействия с пользователем.

-D символ = значение
Предварительно определяет символ нести указанные ценностное . Также можно использовать '-D
символ'который будет использовать значение по умолчанию' определить '.

-E Остановитесь в конце вопросов о конфигурации после создания
config.sh. Это не будет работать 'сделать зависеть'или извлечение файлов .SH.

-K Знающий пользователь. Когда вы используете эту опцию, вы знаете, что делаете, и
Следовательно config.sh файл всегда будет обрабатываться так, как если бы он был
повторно используется, даже если он мог быть создан в чужой системе. Это также
предотвращает прерывание, когда Настроить обнаруживает непригодный для использования компилятор C или неправильный набор
флагов C. Дальнейшие ярлыки могут быть включены с помощью этой опции, а также в
будущее. Эта опция задокументирована в Настроить сообщение об использовании, чтобы напомнить нам
о его существовании, но предполагается, что данное описание будет достаточно загадочным.
:-)

-O Разрешить значения, указанные через -D or -U для отмены настроек из любых загруженных
конфигурационный файл. Это не поведение по умолчанию, так как переопределение будет
не распространяться на переменные, производные от тех, которые вы в настоящее время изменяете.
Естественно без -O, настройка выполняется только в том случае, если файл конфигурации не
загружен, что безопасно, поскольку производные переменные еще не вычислены ...

-S Выполните подстановку переменных во всех файлах .SH. Вы можете комбинировать его с
-f переключатель для распространения любой конфигурации, которая вам нравится.

-U символ =
Предустановки символ иметь пустое значение. Также можно использовать '-U символ'
который установит символ в undef.

-V Выведите номер версии метаконфиг что породило это Настроить скрипт
и выйти.

Бег Окружающая среда
При запуске Настроить создает местный UU каталог и запускается оттуда. Каталог
удаляется при завершении Configure, но это означает, что вы должны запускать скрипт из места, где
вы можете писать, т.е. не из файловой системы, доступной только для чтения.

Вы можете запустить Настроить хотя удаленно, например:

../пакет/Настроить

для настройки источников, которых нет локально. Все сгенерированные файлы будут помещены в
каталог, из которого вы запускаете скрипт. Эта магия сделана благодаря src.U
блок, который устанавливает $ src и $ rsrc переменные, указывающие на источники пакета. Что
путь полный или относительный, в зависимости от того, Настроить был вызван с помощью полного или
относительный путь.

Изнутри UU подкаталог, вы можете использовать $ rsrc для доступа к исходным файлам (единицам
ссылки на ссылки на исходные файлы должны всегда использовать этот механизм и не предполагать
файл находится в родительском каталоге). Все файлы Makefile должны использовать переменную $ src
как указатель на источники из верхней части каталога сборки (где Настроить запущен),
либо напрямую, либо через настройку VPATH.

При запуске Настроить удаленно файлы .SH извлекаются в каталог сборки, а не
в исходном дереве. Однако для этого требуется какое-то сделать поддержка, чтобы иметь возможность компилировать
вещи в каталоге сборки, в то время как исходники лежат в другом месте.

. магия Переопределения
Используя -M переключателя, некоторые волшебные переназначения могут иметь место в пределах confmagic.h
файл. Этот файл необходимо добавить после config.hконечно, но и после всех
другие необходимые включаемые файлы. А именно:

#include "config.h"
...
... другие включений ...
...
#include "confmagic.h"

Как правило, confmagic.h попытается переназначить bcopy () on memcpy () если нет bcopy () is
доступны локально или преобразовать вилка в вилка при необходимости, что делает бесполезным
беспокоиться о ХАС_ВФОРК символ.

Эта магия настройки задокументирована в файле глоссария.

Ед. Шаблоны
В папке есть набор шаблонов юнитов. метаконфиг исходный каталог, которые предназначены для
использоваться (еще не написанной) программой для быстрого производства новых единиц для различных видов
ситуации. Нет документации для этого незавершенного проекта, но я подумал, что упомяну об этом
на странице руководства, если вы хотите сделать это самостоятельно, а затем внести свой вклад ...

АВТОРЫ


Ларри Уолл[электронная почта защищена]> для версии 2.0.
Харлан Стенн[электронная почта защищена]> для важных расширений агрегатов.
Рафаэль Манфреди[электронная почта защищена]>.
Многие другие участники метаконфиг единицы. См. Список в кредитном файле.

Используйте metaconfig онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

Команды Linux

Ad