#macros #autoconf
#макросы #Автоконфигурация
Вопрос:
Я нахожусь в процессе преобразования из устаревшей среды сборки в ту, которая использует Autotools. У меня есть устаревший файл заголовка, который содержит большое количество значений конфигурации и который включает в себя ряд других заголовков. Я пытаюсь написать макрос, который может выбирать определенные значения из заголовка устаревшей конфигурации и записывать их в config.h
. Я смог написать приведенный ниже макрос, который проверяет, равно ли определение некоторому значению, и выполнить некоторое действие. Я хотел бы добавить шаг, который автоматически записывает определенное значение в config.h
.
AC_DEFUN([ZENO_CHECK_CONFIG],
[
AC_CHECK_HEADERS([legacy_config.h])
AS_IF([test "x$ac_cv_header_legacy_config_h" = "xyes"],
[
AC_MSG_CHECKING([for definition of $1])
AC_EGREP_CPP([test_true],
[
#include <legacy_config.h>
#if defined($1) amp;amp; $1 == $2
test_true
#endif
],
[AC_MSG_RESULT([enabled])
$3],
[AC_MSG_RESULT([disabled])
$4]
)
]
)
]
)
Ответ №1:
Просто используйте AC_DEFINE или, возможно, AC_DEFINE_UNQUOTED:
...
[AC_MSG_RESULT([enabled])
AC_DEFINE($1, $2)
$3],
[AC_MSG_RESULT([disabled])
AC_DEFINE($1, something)
$4]
...
Комментарии:
1. Это сработало бы, если бы проверка была true однако я хотел бы написать define независимо от значения.
2. Итак, что происходит, когда проверка ложна?
3. Я бы хотел записать фактическое определенное значение из заголовка устаревшей конфигурации в
config.h
независимо от проверки. Фактически просто «скопируйте» его из заголовка устаревшей конфигурации вconfig.h
.
Ответ №2:
dnl -------------------------------------------------------------------
dnl check if libmqmsgque.la was build with libconfig
dnl # 1. add include directory
CPPFLAGS="-I$abs_builddir/../../.. $CPPFLAGS"
AC_MSG_CHECKING([for NHI1 'HAVE_LIBCONFIG' in 'msgque_config.h'])
dnl # 2. compile and run small program with failure on not found
AC_RUN_IFELSE([
AC_LANG_PROGRAM([#include "msgque_config.h"], [
#ifdef HAVE_LIBCONFIG
return 0;
#else
return 1;
#endif
])
],[
AC_MSG_RESULT([found])
AC_DEFINE(HAVE_LIBCONFIG,[1],[libmqmsgque was build with libconfig])
],[
AC_MSG_RESULT([not found])
])