go to the first, previous, next, last section, table of contents.
@anchor{existing tests}
эти макросы выполняют проверку отдельных возможностей системы, в которых
пакет нуждается или которые он может использовать.
если вам необходимо протестировать возможность, которую не
проверяет ни один из имеющихся макросов, то, скорее всего, вы сможете это
сделать путем вызова примитивных макросов с соответствующими аргументами
(see section написание тестов).
эти тесты сообщают пользователю, что именно они проверяют и каков
результат проверки. результаты кэшируются для ускорения последующих
запусков configure
(see section кэширование результатов).
некоторые из этих макросов устанавливают выходные
переменные. see section подстановки в файлах makefile, для того, чтобы узнать о том,
как получить значения этих переменных. фраза "определить name"
ниже используется как сокращение, обозначающее "определить символ
name препроцессора c в значение 1". see section определение символов препроцессора с,
для того, чтобы узнать о том, как получить определения этих символов в
вашей программе.
@anchor{alternative programs}
эти макросы проверяют наличие или поведение определенных программ. они
используются для выбора между несколькими различными программами и для
решения того, что делать, когда нужная программа выбрана. если для
проверки наличия необходимой вам программы нет отдельного макроса, и вам
не нужно выполнять проверку специальных возможностей этой программы, то
можно использовать один из стандартных макросов проверки программ.
@anchor{particular programs}
эти макросы выполняют проверку отдельных программ--- существуют ли они,
а также, в некоторых случаях, проверку того, поддерживают ли эти программы
определенные свойства.
- macro: ac_decl_yytext
-
определяет
yytext_pointer , если yytext имеет тип
`char *', а не `char []'. также устанавливает значение
выходной переменной lex_output_root равным основе имени файла,
создаваемого лексическим генератором; обычно это значение равно
`lex.yy', но иногда используется что-то другое. эти результаты
различаются в зависимости от того, используется ли lex или
flex .
- macro: ac_prog_awk
-
проверяет наличие
mawk , gawk , nawk и awk , в таком
порядке и устанавливает выходную переменную awk , равную имени найденной
программы. сначала пытается найти mawk , который считается
самой быстрой реализацией.
- macro: ac_prog_cc
-
определяет компилятор c, который надо использовать. если переменная
среды
cc не
установлена, то проверить наличие gcc и использовать
cc , если gcc не найден. устанавливает выходную переменную
cc , равную имени найденного компилятора.
если используется компилятор gnu c, то значение переменной gcc
устанавливается в значение `yes', в противном случае оно остается
пустым. если выходная переменная cflags еще не была установлена,
то установить ее равной `-g -o2' для компилятора gnu c (`-o2'
на системах, в которых gcc не понимает ключа `-g') или равной
`-g' для других компиляторов.
если используемый компилятор c не создает исполняемых файлов, которые
могут запускаться в той системе, где исполняется configure , то
переменной командного процессора cross_compiling присваивается
значение `yes', в противном случае она получает значение
`no'. другими словами, здесь проверяется, отличается ли тип системы, для
которой производится сборка, от системы, на которой производится сборка
(тип целевой системы не относится к этому тесту). для получения
дополнительной информации о кросс-компиляции see section ручная настройка.
- macro: ac_prog_cc_c_o
-
если компилятор c не может запускаться одновременно с ключами `-c' и
`-o', то определяется переменная
no_minus_c_minus_o .
- macro: ac_prog_cpp
-
значение выходной переменной
cpp устанавливается равным имени
команды, которая запускает препроцессор c. если `$cc -e' не
работает, то используется `/lib/cpp'. переносимым решением является
запуск cpp только для обработки файлов с расширением `.c'.
если текущим языком является c (see section выбор языка), то многие
специфические тесты косвенно используют значение переменной cpp ,
вызывая макросы ac_try_cpp , ac_check_header ,
ac_egrep_header или ac_egrep_cpp .
- macro: ac_prog_cxx
-
определяет имя используемого компилятора c++. проверяется,
установлены ли переменные среды
cxx или ccc (именно в
таком порядке); если одна из них установлена, то значение выходной переменной
cxx устанавливается равным значению этой переменной. в противном
случае производится поиск компилятора c++, используя вероятные имена (c++ ,
g++ , gcc , cc , cxx и cc++ ). если ни
одна из этих проверок не прошла успешно, то в качестве последнего шанса
значение переменной cxx устанавливается равным gcc .
если используется компилятор gnu c++, то переменная командного
процессора gxx получает значение `yes', иначе ей
присваивается пустое значение. если выходная переменная cxxflags
еще не была установлена, то ей присваивается значение `-g -o2' для
компилятора gnu c++ (`-o2' на системах, где g++ не распознает ключ
`-g') или значение `-g' для других систем.
если используемый компилятор c++ не создает исполняемых файлов, которые
могут запускаться в системе, где выполняется configure , то
переменной командного процессора cross_compiling присваивается
значение `yes', в противном случае устанавливается значение
`no'. другими словами, здесь проверяется, отличается ли тип системы, для
которой производится сборка, от системы, на которой производится сборка
(тип целевой системы не относится к этому тесту). для получения
дополнительной информации о кросс-компиляции see section ручная настройка.
- macro: ac_prog_cxxcpp
-
значение выходной переменной cxxcpp устанавливается равным имени
команды, которая запускает препроцессор c++. если `$cxx -e' не
работает, то используется `/lib/cpp'. переносимым решением является
запуск cxxcpp только для обработки файлов с расширениями `.c',
`.c' или `.cc'.
если текущим языком является c++ (see section выбор языка), то многие
специфические тесты косвенно используют значение переменной
cxxcpp , вызывая ac_try_cpp , ac_check_header ,
ac_egrep_header или ac_egrep_cpp .
- macro: ac_prog_f77
-
определяет имя используемого компилятора fortran 77. если переменная
среды
f77 не установлена, то производится проверка наличия
программ g77 , f77 and f2c , в описанном порядке. имя
найденной программы присваивается выходной переменной f77 .
если используется программа g77 (компилятор gnu fortran 77), то
макрос ac_prog_f77 установит переменную g77 равной
значению `yes', а в противном случае ей будет присвоено пустое
значение. если выходная переменная fflags не была установлена в
среде, то для g77 данной переменной присваивается значение
`-g -02' (или `-o2' в тех случаях когда g77 не
принимает ключ `-g'). иначе, для всех остальных компиляторов
fortran 77, переменной fflags присваивается значение `-g'.
- macro: ac_prog_f77_c_o
-
выполняет проверку того, что компилятор fortran 77 может запускаться
одновременно с ключами `-c' и `-o'. если компилятор не принимает
эти ключи одновременно, то определяется переменная
f77_no_minus_c_minus_o .
- macro: ac_prog_gcc_traditional
-
добавляет строку `-traditional' к выходной переменной
cc в
том случае, если используемый компилятор gnu c и функции ioctl
неправильно работают без нее. обычно это
случается, если в старой системе не были установлены исправленные
заголовочные файлы. поскольку свежие версии компилятора gnu c при
установке исправляют заголовочные файлы, это становится менее
распространенной проблемой.
- macro: ac_prog_install
-
устанавливает выходную переменную
install , равной полному пути к
совместимой с bsd программе install , если она найдена в текущей
переменной path . иначе, переменная install получает
значение `dir/install-sh -c', проверяя каталоги, указанные в
ac_config_aux_dir (или каталоги по умолчанию) для определения
dir (see section создание выходных файлов). этот макрос также устанавливает переменные
install_program и install_script равными значениям
`${install}', а install_data значение `${install}
-m 644'.
этот макрос не замечает версии install о которых известно, что
они не работают. этот макрос также предпочитает использовать программу
на языке c вместо скриптов командного процессора. вместо
`install-sh', он также может использовать `install.sh', но это
имя устарело, поскольку некоторые программы make имеют правило,
которое создает файл `install' из этого файла, если нет файла
`makefile'.
копия `install-sh', которую вы можете использовать, поставляется с
autoconf. если вы используете ac_prog_install , то вы должны
включить в свой дистрибутив либо `install-sh', либо
`install.sh', иначе configure выдаст ошибку, сообщающую о
том, что он не может найти эти файлы--- даже если система имеет
нормальную программу install . это мера безопасности, чтобы вы
случайно не забыли про этот файл, тем самым лишив пользователя
возможности установить ваш пакет в системе, в которой нет
bsd-совместимой
программы install .
если вам необходимо использовать вашу собственную программу установки
(поскольку она имеет возможности, отсутствующие в стандартных программах
install ), то нет никакой надобности в использовании макроса
ac_prog_install ; просто поместите путь к вашей программе в ваши
файлы `makefile.in'.
- macro: ac_prog_lex
-
если найдена программа
flex , то выходная переменная lex
получает значение `flex', а lexlib -- значение `-lfl', в
случае, если библиотека располагается в стандартном месте. иначе
переменная lex получает значение `lex', а lexlib ---
значение `-ll'.
- macro: ac_prog_ln_s
-
если команда `ln -s' работает в текущей файловой системе (и
операционная, и файловая системы поддерживают символьные ссылки), то
выходная переменная
ln_s получает значение `ln -s', в
противном случае значение равно `ln'.
если ссылка помещается в другой, отличный от текущего, каталог, то смысл
этой ссылки зависит от того, какая команда будет использована: `ln' или
`ln -s'. чтобы безбоязненно создавать ссылки, используя
`$(ln_s)', либо определите, какая форма команды используется и
соответственно измените ее аргументы, либо всегда запускайте ln в
том каталоге, где будет создаваться ссылка.
другими словами, не делайте
$(ln_s) foo /x/bar
вместо этого выполняйте
(cd /x && $(ln_s) foo bar)
- macro: ac_prog_ranlib
-
если команда
ranlib найдена, то выходная переменная
ranlib получает значение равное `ranlib', в противном случае
используется значение `:' (не делать ничего).
- macro: ac_prog_yacc
-
если найдена программа
bison , то выходная переменная yacc
получает значение `bison -y'. в противном случае, если найдена команда
byacc , то переменная yacc получит значение `byacc'. в
противном случае yacc устанавливается в `yacc'.
@anchor{generic programs}
эти макросы используются для обнаружения программ, для которых нет
отдельных макросов. если вам необходимо проверить не только присутствие
программы, но и ее поведение, то вам необходимо написать свой
тест для данной программы (see section написание тестов). по умолчанию эти
макросы используют переменную среды path . если вам необходимо
проверить наличие программы, которая может находится в каталогах
пользовательской переменной path , то вы можете передать макросу
измененную переменную path , вот как в этом случае:
ac_path_prog(inetd, inetd, /usr/libexec/inetd,
$path:/usr/libexec:/usr/sbin:/usr/etc:etc)
- macro: ac_check_file (file [, action-if-found [, action-if-not-found]])
-
выполняет проверку, существует ли в системе файл file. если он
найден, то выполняются команды action-if-found, в противном случае
выполняется action-if-not-found, если задано.
- macro: ac_check_files (files[, action-if-found [, action-if-not-found]])
-
выполняет макрос
ac_check_file для каждого из файлов в списке
files. дополнительно определяет переменную `havefile'
для каждого из найденных файлов и устанавливает ее равной 1.
- macro: ac_check_prog (variable, prog-to-check-for, value-if-found [, value-if-not-found [, path, [ reject ]]])
-
проверяет, находится ли программа prog-to-check-for в каталогах,
перечисленных в переменной
path . если эта программа найдена, то
переменная variable устанавливается равным значению
value-if-found, в противном случае равным значению
value-if-not-found (если оно задано). никогда не использует
reject (имя файла с абсолютным путем), даже если такая программа была
найдена в путях поиска; в этом случае переменная variable
устанавливается, используя абсолютное имя найденной программы
prog-to-check-for, которая не является reject. если
переменная variable уже установлена, то ничего не делается.
вызывает макрос ac_subst для variable.
- macro: ac_check_progs (variable, progs-to-check-for [, value-if-not-found [, path]])
-
проверяет наличие в
path каждой программы из списка через пробел
progs-to-check-for. если программа найдена, то
переменная variable устанавливается в значение, равное имени
найденной программы. в противном случае продолжается проверка наличия
следующей программы. если ни одна из программ не найдена, то переменная
variable получает значение value-if-not-found; если
value-if-not-found не указано, то значение variable не
изменяется. вызывает макрос ac_subst для variable.
- macro: ac_check_tool (variable, prog-to-check-for [, value-if-not-found [, path]])
-
работает подобно
ac_check_prog , но сначала проверяет наличие
prog-to-check-for с префиксом типа системы, который определяется
макросом ac_canonical_host , за которым следует тире
(see section получение канонического типа системы). например, если пользователь запустит
`configure --host=i386-gnu', то этот вызов:
ac_check_tool(ranlib, ranlib, :)
установит переменную ranlib в значение `i386-gnu-ranlib',
если эта программа находится в каталогах, перечисленных в path ,
или в `ranlib', если эта программа находится в path , или в
`:', если ни одна из программ не существует.
- macro: ac_path_prog (variable, prog-to-check-for [, value-if-not-found [, path]])
-
работает подобно
ac_check_prog , но устанавливает variable
равной полному пути к найденной программе prog-to-check-for.
- macro: ac_path_progs (variable, progs-to-check-for [, value-if-not-found [, path]])
-
подобен макросу
ac_check_progs , но если найдена любая из программ
progs-to-check-for, то переменная variable получает значение,
равное полному пути к найденной программе.
@anchor{libraries}
нижеописанные макросы проверяют наличие определенных библиотек c,
c++ или fortran 77.
- macro: ac_check_lib (library, function [, action-if-found [, action-if-not-found [, other-libraries]]])
-
в зависимости от текущего языка (see section выбор языка), макрос пытается
убедиться, что функция c, c++ или fortran 77 с именем function
доступна (путем проверки, что тестовая программа компонуется с
библиотекой library для получения доступа к функции).
library является базовым именем библиотеки; например, для
`-lmp', используйте `mp' в качестве аргумента library.
action-if-found является списком команд командного процессора,
которые запускаются в случае, если процесс компоновки прошел удачно;
action-if-not-found является списком команд, которые запускаются,
если процесс компоновки потерпел неудачу. если аргумент action-if-found
не указан, то действие по умолчанию добавит `-llibrary' в
переменную libs и определит переменную
`have_liblibrary' (все буквы заглавные).
если при компоновке с library выдаются сообщения о ненайденных
символах, которые могут быть найдены, компонуя программы с
дополнительными библиотеками, то вы должны передать список этих
библиотек через пробелы в аргументе other-libraries: `-lxt
-lx11'. в противном случае этот макрос
не сможет определить, что библиотека library присутствует,
поскольку компоновка тестовой программы всегда будет аварийно
завершаться с сообщениями о ненайденных символах.
- macro: ac_have_library (library, [, action-if-found [, action-if-not-found [, other-libraries]]])
-
этот макрос аналогичен вызову
ac_check_lib с аргументом
function, равным main . вдобавок, library
может быть указана как `foo', `-lfoo' или `libfoo.a'. во
всех этих случаях компилятору передается строка `-lfoo'. однако
library не может быть переменной командного процессора; ее
значение должно быть символьным именем. этот макрос считается
устаревшим.
- macro: ac_search_libs (function, search-libs [, action-if-found [, action-if-not-found [, other-libraries]]])
-
производит поиск библиотеки, определяющей функцию function, если
она еще не доступна. это подобно вызову макроса
ac_try_link_func сначала без указания библиотек, а затем для каждой из
библиотек, перечисленных в списке search-libs.
если функция найдена, то выполняются команды action-if-found, в
противном случае выполняются action-if-not-found.
если при компоновке с library выдаются сообщения о ненайденных
символах, которые могут быть найдены, компонуя программы с
дополнительными библиотеками, то вы должны передать список этих
библиотек через пробел, используя аргумент other-libraries:
`-lxt -lx11'. в противном случае этот макрос
не сможет определить, что библиотека library присутствует,
поскольку компоновка тестовой программы всегда будет аварийно
завершаться с сообщениями о ненайденных символах.
- macro: ac_search_libs (function, search-libs[, action-if-found [, action-if-not-found]])
-
этот макрос эквивалентен вызову
ac_try_link_func для каждой из
библиотек, перечисленных в списке search-libs. макрос добавляет
`-llibrary' к содержимому переменной libs для первой
библиотеки, которая содержит function и выполняет
action-if-found. в противном случае выполняется
action-if-not-found.
@anchor{library functions}
следующие макросы проверяют отдельные функции библиотеки c. если для
функции, которая вам нужна, нет отдельного макроса, и вам не нужно
проверять специальные возможности этой функции, то можно использовать
один из общих макросов проверки функций.
@anchor{particular functions}
эти макросы выполняют проверку отдельных функций: существуют ли
они и, в отдельных случаях, как они работают при задании
определенных аргументов.
- macro: ac_func_alloca
-
проверяет, как получить
alloca . макрос пробует получить
встроенную версию, проверяя наличие файла `alloca.h' или
предопределенных макросов препроцессора c __gnuc__ и
_aix . если этот макрос находит `alloca.h', то определяется
переменная have_alloca_h .
если эти попытки оканчиваются неудачей, то макрос будет искать функцию в
стандартной библиотеке c. если любой из этих методов закончится успешно,
то будет определена переменная have_alloca . в противном случае
выходная переменная alloca получит значение `alloca.o' и
будет определена переменная c_alloca (так что программы смогут
периодически вызывать `alloca(0)' для сборки мусора). эта
переменная отделена от libobjs , так что несколько программ смогут
использовать одно и то же значение alloca , без необходимости создания настоящей
библиотеки, если лишь некоторые из них используют код в
libobjs .
эти макросы не пытаются получить alloca из библиотеки system v
r3 `libpw' или из библиотеки system v r4 `libucb', поскольку
эти библиотеки содержат некоторые несовместимые функции, что может в
дальнейшем вызвать проблемы. некоторые версии библиотек даже не содержат
alloca или содержат версию с ошибками. если вы все таки хотите
использовать alloca из этих библиотек, то вместо компиляции файла
`alloca.c' используйте ar для извлечения из них
`alloca.o'.
для правильного объявления этой функции исходные тексты, использующие
alloca , должны начинаться примерно с нижеизложенного кода. в некоторых
версиях aix, объявление alloca должно предшествовать всему, за
исключением комментариев и директив препроцессора. директива
#pragma специальным образом выровнена (перед ней стоит несколько
пробелов), чтобы старые не-ansi компиляторы c игнорировали ее, а не
выдавали ошибку.
/* aix требует, чтобы это было первым кодом в файле. */
#ifndef __gnuc__
# if have_alloca_h
# include <alloca.h>
# else
# ifdef _aix
#pragma alloca
# else
# ifndef alloca /* предопределено в cc +olibcalls фирмы hp */
char *alloca ();
# endif
# endif
# endif
#endif
- macro: ac_func_closedir_void
-
если значение, возвращаемое функцией
closedir , не несет полезной
информации, то определяется closedir_void . в противном случае
тот, кто вызывает эту функцию, может проверить возвращаемое значение на
наличие ошибки.
- macro: ac_func_fnmatch
-
если функция
fnmatch доступна и работает (в отличие от имеющейся
в sunos 5.4), то определяется переменная have_fnmatch .
- macro: ac_func_getloadavg
-
проверка того, как получить данные о загрузке системы. если система
имеет функцию
getloadavg , то этот макрос определяет переменную
have_getloadavg , и добавляет к libs библиотеки,
необходимые для получения этой функции.
в противном случае макрос добавляет `getloadavg.o' к выходной
переменной libobjs и, возможно, определяет другие макросы
препроцессора c и выходные переменные:
-
он определяет
svr4 , dgux , umax или umax4_3
на соответствующих системах.
-
если он находит `nlist.h', то он определяет переменную
nlist_struct .
-
если `struct nlist' имеет поле `n_un', то определяется
переменная
nlist_name_union .
-
если компиляция `getloadavg.c' определяет
ldav_privileged ,
то программы необходимо специальным образом устанавливать на эту систему, чтобы
getloadavg работала, и этот макрос определяет
getloadavg_privileged .
-
этот макрос устанавливает выходную переменную
need_setgid . ее значением
является `true', если требуется специальная установка, и `false'
в противном случае. если need_setgid равен `true', то этот
макрос устанавливает kmem_group в значение, равное названию группы,
которая должна владеть установленной программой.
- macro: ac_func_getmntent
-
проверяет наличие
getmntent в библиотеках `sun', `seq'
и `gen' для irix 4, ptx и unixware, соответственно. затем, если
функция getmntent доступна, определяется переменная
have_getmntent .
- macro: ac_func_getpgrp
-
если
getpgrp запускается без аргументов (версия posix.1), то
определяется getpgrp_void . в противном случае функция является
bsd-версией, которая принимает в качестве аргумента идентификатор процесса.
этот макрос не выполняет проверку наличия getpgrp ; если вам
необходимо работать в такой ситуации, то сначала вызовите
ac_check_func для getpgrp .
- macro: ac_func_memcmp
-
если функция
memcmp недоступна, или не работает с восьмибитными
данными (как функция в sunos 4.1.3), то `memcmp.o' добавляется к
выходной переменной libobjs .
- macro: ac_func_mmap
-
если функция
mmap существует и работает правильно, то
определяется переменная have_mmap . проверяется только
фиксированное приватное отображение уже отображенной памяти.
- macro: ac_func_select_argtypes
-
определяет правильный тип, передаваемый каждому из аргументов функции
select , и определяет эти типы в переменных
select_type_arg1 , select_type_arg234 и
select_type_arg5 . значением по умолчанию для
select_type_arg1 является `int', для
select_type_arg234 типом по умолчанию является `int *' и для
select_type_arg5 типом по умолчанию является `struct timeval
*'.
- macro: ac_func_setpgrp
-
если
setpgrp запускается без аргументов (версия posix.1), то
определяется setpgrp_void . в противном случае, функция является
bsd-версией, которая принимает в качестве аргумента идентификатор процесса.
этот макрос не выполняет проверку наличия setpgrp ; если вам
необходимо работать в такой ситуации, то сначала вызовите
ac_check_func для setpgrp .
- macro: ac_func_setvbuf_reversed
-
если
setvbuf принимает тип буферизации как второй аргумент, а
указатель на буфер как третий аргумент, а не наоборот, то
определяется переменная setvbuf_reversed . это справедливо для
system v до выпуска 3.
- macro: ac_func_strcoll
-
если функция
strcoll существует и работает правильно, то
определяется переменная have_strcoll . этот макрос выполняет
больше проверок, чем просто вызов `ac_check_funcs(strcoll)',
потому что некоторые системы имеют неправильные определения
strcoll , которыми не следует пользоваться.
- macro: ac_func_strftime
-
проверка наличия
strftime в библиотеке `intl', для sco unix.
затем, если strftime доступна, определяется переменная
have_strftime .
- macro: ac_func_utime_null
-
если вызов `utime(file, null)' устанавливает время
модификации файла file в текущее время, то определить переменную
have_utime_null .
- macro: ac_func_vfork
-
если найден файл `vfork.h', то определяется переменная
have_vfork_h . если работающая версия vfork не найдена, то
определить vfork как fork . этот макрос проверяет несколько
известных ошибок в реализации vfork и если найдена одна из таких
реализаций, то считается, что система не имеет работающей версии
vfork . макрос не считает, ошибкой реализации, если
при вызове потомком функции signal изменяются обработчики
сигналов родителя, поскольку потомки редко изменяют обработчики
сигналов родительского процесса.
- macro: ac_func_vprintf
-
если найдена функция
vprintf , то определяется переменная
have_vprintf . в противном случае, если найдена функция
_doprnt , то определяется переменная have_doprnt . (если
функция vprintf доступна, то вы можете считать, что
функции vfprintf и vsprintf тоже доступны).
- macro: ac_func_wait3
-
если функция
wait3 найдена, и заполняет содержимое своего
третьего аргумента (`struct rusage *'), чего не делает hp-ux, то
определяется переменная have_wait3 .
@anchor{generic functions}
эти макросы используются для нахождения функций, которые не имеют
специальных макросов проверки. если функции могут находиться в других
библиотеках, а не в стандартной библиотеке c, то сначала вызовите макрос
ac_check_lib для проверки наличия нужных библиотек. если вам
нужно не только проверить, существует ли функция, но и уточнить ее
поведение, то вам придется написать свой собственный тест для этой
функции (see section написание тестов).
- macro: ac_check_func (function, [action-if-found [, action-if-not-found]])
-
если функция c с именем function доступна, то запускаются команды
командного процессора action-if-found, в противном случае
запускаются action-if-not-found. если вы просто хотите определить
символ препроцессора, если функция существует, то вместо этого макроса попробуйте
использовать
ac_check_funcs . этот макрос проверяет
компоновку с библиотекой c, даже если был вызван макрос
ac_lang_cplusplus , поскольку c++ является более
стандартизованным, чем c. (see section выбор языка, для дополнительной
информации о выборе языка, для которого проводятся проверки).
- macro: ac_check_funcs (function... [, action-if-found [, action-if-not-found]])
-
для каждой из заданных function в списке, разделенном пробелами, в
случае если она доступна, определить переменную
have_function (все буквы заглавные). если задан аргумент
action-if-found, то выполняется дополнительный код командного
процессора, если одна из функций найдена. вы можете задать значение
`break' для прекращения цикла при нахождении первой функции. если
задан аргумент action-if-not-found, то эти команды выполняются,
когда одна из функций не найдена.
- macro: ac_replace_funcs (function...)
-
этот макрос подобен вызову макроса
ac_check_funcs , используя код
action-if-not-found, который добавляет `function.o' к
выходной переменной libobjs . вы можете объявить функцию, для
которой будет использована ваша замена, поместив ее прототип
между директивами `#ifndef have_function'. если система имеет
нужную функцию, то эта функция, вероятно, будет объявлена в заголовочном
файле, который вы должны включить в свою программу, так что вы не должны
повторно объявлять ее, во избежание конфликта объявлений.
@anchor{header files}
следующие макросы проверяют наличие определенных заголовочных
файлов языка c. если для нужного вам заголовочного файла нет
специального макроса, и при этом вам не нужно проверять специальные
особенности этого файла, то можно использовать один из стандартных
макросов проверки заголовочных файлов.
@anchor{particular headers}
эти макросы выполняют проверку отдельных заголовочных файлов---
существуют ли они и, в некоторых случаях, объявлены ли в них какие-либо
символы.
- macro: ac_decl_sys_siglist
-
определяет переменную
sys_siglist_declared , если переменная
sys_siglist объявлена в системном заголовочном файле--- либо
в `signal.h', либо в `unistd.h'.
- macro: ac_dir_header
-
подобен вызову макросов
ac_header_dirent и
ac_func_closedir_void , но определяет немного другой набор макросов
препроцессора c, для указания того, какой заголовочный файл найден. этот
макрос и имена, которые он определяет, считаются устаревшими. макрос
определяет следующие имена:
- `dirent.h'
-
dirent
- `sys/ndir.h'
-
sysndir
- `sys/dir.h'
-
sysdir
- `ndir.h'
-
ndir
вдобавок, если функция closedir не возвращает информативного
значения, то определяется переменная void_closedir .
- macro: ac_header_dirent
-
проверка следующих заголовочных файлов, и для первого файла, который
найден и определяет `dir', определить нижеследующие макросы
препроцессора c:
- `dirent.h'
-
have_dirent_h
- `sys/ndir.h'
-
have_sys_ndir_h
- `sys/dir.h'
-
have_sys_dir_h
- `ndir.h'
-
have_ndir_h
в исходном тексте объявления библиотеки каталогов должны выглядеть
примерно так:
#if have_dirent_h
# include <dirent.h>
# define namlen(dirent) strlen((dirent)->d_name)
#else
# define dirent direct
# define namlen(dirent) (dirent)->d_namlen
# if have_sys_ndir_h
# include <sys/ndir.h>
# endif
# if have_sys_dir_h
# include <sys/dir.h>
# endif
# if have_ndir_h
# include <ndir.h>
# endif
#endif
используя нижеследующие объявления, программа должна объявить переменные с
типом struct dirent , а не struct direct , а доступ к полю
длины имени каталога она должна получать путем передачи указателя на
struct dirent макросу namlen .
этот макрос также проверяет наличие библиотек `dir' и `x' в
sco xenix.
- macro: ac_header_major
-
если `sys/types.h' не определяет
major , minor и
makedev , но это делается в `sys/mkdev.h', то определяется
переменная major_in_mkdev ; в противном случае, если эти функции
определяются в `sys/sysmacros.h', то определяется переменная
major_in_sysmacros .
- macro: ac_header_stdc
-
определяет
stdc_headers , если система имеет заголовочные файлы
ansi c. это макрос проверяет наличие `stdlib.h', `stdarg.h',
`string.h' и `float.h'; если система имеет эти файлы, то,
скорее всего, имеются и остальные заголовочные файлы ansi c. этот макрос
также проверяет, что `string.h' объявляет memchr (и поэтому,
скорее всего, еще и другие функции mem ), объявляется ли в
`stdlib.h' функция free (и, по видимому, malloc и
другие относящиеся к ним функции), и будут ли макросы из `ctype.h'
работать с символами с установленным старшим битом, как этого требует
ansi c.
используйте stdc_headers вместо of __stdc__ для
определения, имеются ли в системе совместимые с ansi заголовочные файлы
(и, вероятно, функции библиотеки c), поскольку многие системы, имеющие gcc,
не имеют заголовочные файлы ansi c.
на системах без заголовочных файлов ansi c существует так много
вариантов, что, вероятно, легче объявить используемые вами функции, чем
точно определять, какой из заголовочные файлов определяет эти
функции. некоторые системы содержат смесь функций ansi и bsd; некоторые
из них по большей части совместимы с ansi, но не имеют
`memmove'; некоторое определяют функции bsd как макросы в файлах
`string.h' или `strings.h'; некоторые из них имеют только
функции bsd, но с `string.h'; некоторые объявляют функции работы с
памятью в `memory.h', некоторые в `string.h'; и т. п.
скорее всего,
достаточно проверить наличие одной функции работы со строками и одной
функции работы с памятью; если библиотека имеет ansi-версии этих
функций, то, скорее всего, она имеет и большинство других функций. вы
должны поместить следующий код в `configure.in':
ac_header_stdc
ac_check_funcs(strchr memcpy)
а затем, в вашем коде вы можете поместить следующие строки:
#if stdc_headers
# include <string.h>
#else
# ifndef have_strchr
# define strchr index
# define strrchr rindex
# endif
char *strchr (), *strrchr ();
# ifndef have_memcpy
# define memcpy(d, s, n) bcopy ((s), (d), (n))
# define memmove(d, s, n) bcopy ((s), (d), (n))
# endif
#endif
если вы используете функции, которые не имеют эквивалентов в bsd, такие
как memchr , memset strtok или strspn , то
просто макросов будет недостаточно; вы должны предоставить реализацию
каждой из функций. простой способ подключить ваши реализации только
если они действительно нужны (потому что функции из системной библиотеки
могут быть вручную оптимизированы) --- это, например, поместить
функцию memchr в файл `memchr.c', и использовать макрос
`ac_replace_funcs(memchr)'.
- macro: ac_header_sys_wait
-
если `sys/wait.h' существует и совместим с posix.1, то определяется
переменная
have_sys_wait_h . несовместимость может возникнуть,
если файла `sys/wait.h' не существует, или для сохранения значения
статуса он использует старую bsd-версию union wait вместо
int . если `sys/wait.h' не является совместимым с posix.1, то
вместо его включения определяется макрос posix.1 с его обычной
реализацией. вот пример:
#include <sys/types.h>
#if have_sys_wait_h
# include <sys/wait.h>
#endif
#ifndef wexitstatus
# define wexitstatus(stat_val) ((unsigned)(stat_val) >> 8)
#endif
#ifndef wifexited
# define wifexited(stat_val) (((stat_val) & 255) == 0)
#endif
- macro: ac_memory_h
-
определяет
need_memory_h , если memcpy , memcmp , и
т. п. не объявлены в файле `string.h' и существует файл
`memory.h'. этот макрос является устаревшим; вместо него
используйте вызов ac_check_headers(memory.h) . смотрите пример для
ac_header_stdc .
- macro: ac_unistd_h
-
определяет переменную
have_unistd_h , если в системе имеется файл
`unistd.h'. этот макрос является устаревшим; вместо него
используйте вызов `ac_check_headers(unistd.h)'.
для проверки того, что система поддерживает posix.1, можно использовать
следующий код:
#if have_unistd_h
# include <sys/types.h>
# include <unistd.h>
#endif
#ifdef _posix_version
/* код для систем posix.1 */
#endif
_posix_version определяется, когда `unistd.h' подключен в
системах, совместимых с posix.1. если файла `unistd.h' не существует,
то, скорее всего, эта система не относится к posix.1. однако некоторые
не-posix.1 системы имеют файл `unistd.h'.
- macro: ac_usg
-
определяет usg , если система не имеет файла `strings.h',
rindex , bzero и т. п. это означает, что система имеет
`string.h', strrchr , memset и т. п.
символ usg является устаревшим. вместо этого макроса смотрите
пример для ac_header_stdc .
@anchor{generic headers}
эти макросы используются для нахождения системных заголовочных файлов,
для которых не существует отдельного теста. если вам надо проверить не
только наличие заголовочного файла, но и его содержимое, то придется
написать для этого собственный тест
(see section написание тестов).
- macro: ac_check_header (header-file, [action-if-found [, action-if-not-found]])
-
если системный заголовочный файл header-file существует, то
исполняются команды командного процессора action-if-found, в
противном случае выполняются action-if-not-found. если вы просто
хотите определить символ, если заголовочный файл доступен, то лучше
используйте макрос
ac_check_headers .
- macro: ac_check_headers (header-file... [, action-if-found [, action-if-not-found]])
-
для каждого системного заголовочного файла header-file, заданного
в списке через пробел, в случае его существования определить
переменную
have_header-file (все буквы заглавные). если
задан аргумент action-if-found, то выполняется дополнительный код
командного процессора в случае, когда файл найден. вы можете задать
аргумент `break' для прекращения итераций, когда найден первый
файл. если задан аргумент action-if-not-found, то он выполняется,
когда заголовочный файл не найден.
@anchor{structures}
следующие макросы проверяют наличие определенных структур или полей
структур. для проверки структур, не перечисленных в этом разделе,
используйте макрос ac_egrep_cpp (see section исследование деклараций)
или ac_try_compile (see section проверка синтаксиса).
- macro: ac_header_stat
-
если макросы
s_isdir , s_isreg и т. п., определенные в
`sys/stat.h', работают неправильно (возвращая неверные
положительные результаты), то определяется переменная
stat_macros_broken . это происходит на системах tektronix utekv,
amdahl uts и motorola system v/88.
- macro: ac_header_time
-
если программа может подключать как `time.h', так и `sys/time.h', то
определяется переменная
time_with_sys_time . в некоторых старых
системах `sys/time.h' подключает `time.h', но `time.h'
не защищен от многократного подключения, так что программы не должны
явно подключать оба файла. этот макрос полезен для программ, которые,
например, используют структуры struct timeval или struct
timezone , вместе с struct tm . этот макрос лучше всего
использовать
вместе с have_sys_time_h , который может быть проверен с помощью
ac_check_headers(sys/time.h) .
#if time_with_sys_time
# include <sys/time.h>
# include <time.h>
#else
# if have_sys_time_h
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
- macro: ac_struct_st_blksize
-
если
struct stat содержит поле st_blksize , то определяется
переменная have_st_blksize .
- macro: ac_struct_st_blocks
-
если
struct stat содержит поле st_blocks , то определяется
переменная have_st_blocks . в противном случае, `fileblocks.o'
добавляется к выходной переменной libobjs .
- macro: ac_struct_st_rdev
-
если
struct stat содержит поле st_rdev , то определяется
переменная have_st_rdev .
- macro: ac_struct_tm
-
если `time.h' не определяет
struct tm , то определяется
символ tm_in_sys_time , что означает, что `sys/time.h'
следовало бы определить struct tm .
- macro: ac_struct_timezone
-
определяет, как получить текущую временную зону. если
struct tm
имеет поле tm_zone , то определяется переменная
have_tm_zone . в противном случае, если найден внешний массив
tzname , то определяется переменная have_tzname .
@anchor{typedefs}
следующие макросы проверяют определения типов (typedef) языка c. если для нужного
вам определения типа нет специального макроса, и вам не нужно выполнять
проверку специальных возможностей, то можно использовать общие
макросы проверки объявлений типов.
@anchor{particular typedefs}
эти макросы проверяют конкретные объявления типов c в файлах
`sys/types.h' и `stdlib.h' (если он существует).
- macro: ac_type_getgroups
-
определяет
getgroups_t равным gid_t или int , в
зависимости от того, что именно является базовым типом массива-аргумента
функции getgroups .
- macro: ac_type_mode_t
-
если
mode_t не определен, то определить тип mode_t равным
int .
- macro: ac_type_off_t
-
если
off_t не определен, то определить off_t равным
long .
- macro: ac_type_pid_t
-
если
pid_t не определен, то определить pid_t равным
int .
- macro: ac_type_signal
-
если `signal.h' определяет
signal как возвращающий указатель
на функцию, возвращающую void , то переменная retsigtype
становится равной void ; в противном случае она определяется с
типом int .
определить обработчики сигналов как возвращающие тип retsigtype :
retsigtype
hup_handler ()
{
...
}
- macro: ac_type_size_t
-
если
size_t не определен, то определить size_t как
unsigned .
- macro: ac_type_uid_t
-
если
uid_t не определен, то определить uid_t равным
int и gid_t равным int .
@anchor{generic typedefs}
эти макросы используются для проверки определений типов (typedef), которые не были
описаны в разделе конкретных макросов проверок.
- macro: ac_check_type (type, default)
-
если тип type не определен в `sys/types.h', или в
`stdlib.h', или в `stddef.h' (если они существуют), то
определить этот тип равным встроенному типу c (или c++) default;
например, `short' или `unsigned'.
@anchor{c compiler characteristics}
следующие макросы выполняют проверку свойств компилятора c или
архитектуры машины. для проверки характеристик, не перечисленных в этом
разделе, используйте макросы ac_try_compile (see section проверка синтаксиса) или ac_try_run (see section проверка поведения во время выполнения).
- macro: ac_c_bigendian
-
если слова хранятся в порядке, когда самый значимый байт хранится первым
(подобно процессорам motorola и sparc, но не intel и vax), то
определяется переменная
words_bigendian .
- macro: ac_c_const
-
если компилятор c не поддерживает полностью ключевое слово
const ,
то макросу const присваивается пустое значение. некоторые
компиляторы c не определяют константу __stdc__ , но поддерживают
const ; некоторые компиляторы, определяющие
__stdc__ , не полностью поддерживают const . программы могут
просто использовать const , как будто любой компилятор c
поддерживает его; для тех компиляторов, которые не имеют такой поддержки,
`makefile' или заголовочный файл настройки определят это слово как
имеющее пустое значение.
- macro: ac_c_inline
-
если компилятор c поддерживает
inline , то ничего не
делается. в противном случае, inline определяется равным
__inline__ или __inline , если компилятор поддерживает один
из этих вариантов, иначе inline определяется равным пустому
значению.
- macro: ac_c_char_unsigned
-
если тип c
char является беззнаковым, то определяется переменная
__char_unsigned__ (если компилятор c еще не определил ее).
- macro: ac_c_long_double
-
если компилятор c поддерживает тип
long double , то определяется
переменная have_long_double . некоторые компиляторы c, которые не
определяют __stdc__ , поддерживают long double ; а
некоторые компиляторы, определяющие __stdc__ , не поддерживают тип
long double .
- macro: ac_c_stringize
-
если препроцессор c поддерживает строковый (stringizing) оператор, то определяется
переменная
have_stringize . строковым (stringinzing)оператором является `#'
и он используется в макросах, например:
#define x(y) #y
- macro: ac_check_sizeof (type [, cross-size])
-
определить
sizeof_uctype равным числу байтов во встроенном
типе c (или c++) type, например, `int' или `char *'.
если `type' неизвестен компилятору, то переменная получает
значение 0.
uctype является type, со строчными буквами,
преобразованными в прописные, пробелы преобразуются в знаки
подчеркивания, и знаки звездочка (* ) заменяются на `p'. если
производится кросс-компиляция, то используется значение cross-size
(если оно задано), в противном случае configure прекращает работу
с выдачей сообщения об ошибке.
например, вызов
ac_check_sizeof(int *)
определяет sizeof_int_p равным 8 на системах dec alpha axp.
- macro: ac_int_16_bits
-
если тип
int имеет размер 16 бит, то определяется переменная
int_16_bits . этот макрос является устаревшим; вместо него лучше
использовать общий макрос `ac_check_sizeof(int)'.
- macro: ac_long_64_bits
-
если тип
long int имеет размер 64 бита, то определяется
переменная long_64_bits . этот макрос является устаревшим; вместо
него лучше использовать вызов `ac_check_sizeof(long)'.
@anchor{fortran 77 compiler characteristics}
следующие макросы используются для проверки характеристик компилятора
fortran 77. для проверки характеристик, не перечисленных в этом разделе,
используйте макросы ac_try_compile (see section проверка синтаксиса)
или ac_try_run (see section проверка поведения во время выполнения), убедившись, что перед
этим вы установили fortran 77 текущим языком.
ac_lang_fortran77 (see section выбор языка).
- macro: ac_f77_library_ldflags
-
определяет ключи командной строки компоновщика (например, `-l' и
`-l') для внутренних библиотек fortran 77 и библиотек времени
исполнения, которые требуются для правильной компоновки программ на
fortran 77 или разделяемых библиотек. выходная переменная
flibs
устанавливается равной этим флагам.
этот макрос предназначен для использования в ситуациях, когда необходимо
смешать исходный код, например на c++ и fortran 77, в одну программу или
разделяемую библиотеку (see section `смешивание кода fortran 77 с кодом на c и c++' in gnu automake).
например, если объектные файлы от компиляторов c++ и fortran 77 должны
быть скомпонованы вместе, то для компоновки должен использоваться
компилятор/компоновщик c++, поскольку специфические для c++ вещи,
такие как вызовы
глобальных конструкторов, подстановке шаблонов, разрешении обработки
исключений, и т. п., нуждаются в специальных действиях во время компоновки.
однако в этих случаях должны быть подключены и внутренние библиотеки
fortran 77, а также библиотеки времени исполнения, а
компилятор/компоновщик c++ просто не знает, какие библиотеки fortran 77
должны быть добавлены. для определения библиотек fortran 77 и был создан
макрос ac_f77_library_ldflags .
@anchor{system services}
следующие макросы проверяют наличие сервисов операционной системы или ее
возможности.
- macro: ac_cygwin
-
проверяет наличие среды cygwin. если она присутствует, то переменная
среды
cygwin получает значение `yes'. в противном случае
переменная cygwin получает пустое значение.
- macro: ac_exeext
-
определяет переменную подстановки
exeext , основанную на
расширении файла, выдаваемого компилятором, после исключения файлов с
расширениями .c, .o и .obj. для unix обычным значением является пустая
строка, а для win32 --- `.exe' и `.exe'.
- macro: ac_objext
-
определяет переменную подстановки
objext , основанную на выводе
компилятора, после исключения файлов с расширением .c. обычно имеет
значение `.o' в unix, и `.obj' на системах win32.
- macro: ac_mingw32
-
проверяет наличие среды компилятора mingw32. если она присутствует, то
переменная
mingw32 получает значение `yes'. в противном
случае переменная mingw32 получает пустое значение.
- macro: ac_path_x
-
этот макрос пробует определить расположение заголовочных файлов и
библиотек x window system. если пользователь задал ключи командной
строки `--x-includes=dir' и `--x-libraries=dir',
то используются заданные каталоги. если один из ключей или оба не
заданы, то пропущенные значения получают запуском
xmkmf для
простого `imakefile' и разбора полученного файла
`makefile'. если произошел сбой (например, если xmkmf
отсутствует), то производится поиск в нескольких каталогах, где часто
располагаются эти файлы. если один из этих способов был удачен, то
переменные командного процессора x_includes и x_libraries
устанавливаются равными найденным каталогам (в том случае, если эти
каталоги не входят в пути, в которых компилятор по умолчанию производит
поиск).
если оба этих метода дают сбой, или пользователь задал ключ командной
строки `--without-x', то переменная командного процессора no_x
получает значение `yes'; в противном случае она получает пустое
значение.
- macro: ac_path_xtra
-
расширенная версия
ac_path_x . она добавляет к выходной переменной
x_cflags ключи компилятора c, которые необходимы x, а также флаги
x для компоновщика к переменной x_libs . если x не доступна, то
добавляется `-dx_display_missing' к x_cflags .
этот макрос также выполняет проверки специальных библиотек, в которых
нуждаются некоторые системы для того, чтобы скомпилировать программу
для x.
он добавляет все, что необходимо для таких систем, к выходной
переменной x_extra_libs . он также проверяет наличие специальных
библиотек x11r6, которые необходимо скомпоновать до использования
`-lx11', и добавляет найденные библиотеки к выходной переменной
x_pre_libs .
- macro: ac_sys_interpreter
-
проверяет, поддерживает ли система начало скриптов со строки в форме
`#! /bin/csh' для выбора интерпретатора, который будет
использоваться для данного скрипта. после запуска этого макроса код
командного процессора в
configure.in может проверить переменную interpval ; она будет
равна `yes', если система поддерживает `#!', и `no' в
противном случае.
- macro: ac_sys_long_file_names
-
если система поддерживает имена файлов длиннее 14 символов, то будет
определена переменная
have_long_file_names .
- macro: ac_sys_restartable_syscalls
-
если система автоматически перезапускает системный вызов, который был
прерван сигналом, то определяется переменная
have_restartable_syscalls .
@anchor{unix variants}
следующие макросы проверяют наличие конкретных операционных систем, что
может потребовать специальной обработки в программах из-за
исключительных странностей в их заголовочных файлах или библиотеках. эти
макросы являются бородавками (наростами); они будут заменены на более
систематизированные, разбитые на предоставляемые ими функции или
устанавливаемые ими параметры среды.
- macro: ac_aix
-
на aix определяет переменную
_all_source . позволяет использовать
некоторые функции bsd. должен вызываться до макросов,
запускающих компилятор c.
- macro: ac_dynix_seq
-
на dynix/ptx (sequent unix) добавляет `-lseq' к выходной
переменной
libs . этот макрос является устаревшим; используйте
вместо него ac_func_getmntent .
- macro: ac_irix_sun
-
на irix (silicon graphics unix) добавляет `-lsun' к выходной
переменной
libs . этот макрос является устаревшим. если вы
используете его для проверки наличия getmntent , то вместо него
используйте макрос ac_func_getmntent . если вы использовали его
для nis-версий функций работы с паролями и группами, то вместо него
используйте `ac_check_lib(sun, getpwnam)'.
- macro: ac_isc_posix
-
на posix-версии isc unix определяет переменную
_posix_source и
добавляет `-posix' (для компилятора gnu c) или `-xp' (для
других компиляторов c) к выходной переменной cc . это позволяет
использовать возможности posix. макрос должен быть вызван после вызова
ac_prog_cc и до вызова любых других макросов, которые запускают
компилятор c.
- macro: ac_minix
-
на minix определяет переменные
_minix и _posix_source и
определяет _posix_1_source со значением 2. это позволяет
использовать возможности posix. должен вызываться до вызова других
макросов, запускающих компилятор c.
- macro: ac_sco_intl
-
на sco unix добавляет `-lintl' к выходной переменной
libs .
этот макрос является устаревшим; вместо него используйте макрос
ac_func_strftime .
- macro: ac_xenix_dir
-
на xenix добавляет `-lx' к выходной переменной
libs . также,
если используется `dirent.h', то к переменной libs добавляется
`-ldir'. этот макрос является устаревшим; вместо него используйте
ac_header_dirent .
go to the first, previous, next, last section, table of contents.
|