@anchor{Testing Values and Files}
Скрипты configure должны проверять различные свойства разных
файлов и строк. Вот небольшой список проблем с переносимостью, которых
нужно избегать при написании проверок.
Программа test используется для выполнения многих проверок файлов
и строк. Она часто запускается альтернативным способом, через имя
`[', но использование этого имени в коде Autoconf приведет к
ошибкам, потому что этот символ является символом кавычек в m4.
Если вам необходимо выполнить несколько проверок, используя команду
test, то объединяйте их с помощью операторов командного
процессора `&&' и `||', а не используйте операторы программы
test `-a' и `-o'. На System V приоритеты операторов
`-a' и `-o' неправильно соотносятся с приоритетами унарных
операторов; из-за этого POSIX не определяет эти операторы, так что их использование
приводит к непереносимому коду. Если вы в одном выражении используете как
`&&', так и `||', то помните, что они имеют одинаковый
приоритет.
Скрипты configure, поддерживающие
кросс-компиляцию, не должны не делать ничего, что тестирует свойства
системы, на которой выполняется скрипт. Но иногда вам может понадобиться
проверить, существует ли определенный файл. Чтобы сделать это
используйте команды `test -f' или `test -r'. Не используйте
команду `test -x', поскольку 4.3BSD не поддерживает ее.
Другой непереносимой конструкцией программирования командного процессора является
var=${var:-value}
Она предназначена для установки значения переменной var равным
value, но только в тех случаях, когда переменная еще не имеет
значения. Если var уже было присвоено значение, даже равное
пустой строке, то оно остается неизменным. Старые командные процессоры
BSD, включая Ultrix-версию sh, не воспринимают символ двоеточия,
выдают ошибку и прекращают работу. Переносимым эквивалентом данной
конструкции является
: ${var=value}
Go to the first, previous, next, last section, table of contents.