Алексей Махоткин

домашняя страница

Autoconf

Go to the first, previous, next, last section, table of contents.


Проверка отдельных функций

@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 и выходные переменные:

  1. Он определяет SVR4, DGUX, UMAX или UMAX4_3 на соответствующих системах.
  2. Если он находит `nlist.h’, то он определяет переменную NLIST_STRUCT.
  3. Если `struct nlist’ имеет поле `n_un’, то определяется переменная NLIST_NAME_UNION.
  4. Если компиляция `getloadavg.c’ определяет LDAV_PRIVILEGED, то программы необходимо специальным образом устанавливать на эту систему, чтобы getloadavg работала, и этот макрос определяет GETLOADAVG_PRIVILEGED.
  5. Этот макрос устанавливает выходную переменную 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.


Go to the first, previous, next, last section, table of contents.

Comments