LINUX.ORG.RU

Условный вызов AC_CHECK_HEADER


0

0

Здравствуйте!

Хочу сделать следующее: в configure скрипте, если указана опция --enable-boost проверить на присутствие хедер boost/scoped_array.hpp (а в будущем и некоторые другие) и хотелось бы, чтобы если его нет, то configure "падал".

Для начала, чтобы просто искалось:

AC_MSG_CHECKING(whether we are using boost)
AC_ARG_ENABLE(boost,
    AS_HELP_STRING([--enable-boost], [use boost library during build]),
    [enable_boost=yes],
    [enable_boost=no])
AC_MSG_RESULT($enable_boost)
if test "$enable_boost" = "yes"; then
    # TODO: configure should fails if one of needed headers not found
    AC_CHECK_HEADER([boost/scoped_array.hpp])
    AC_DEFINE([ENABLE_BOOST], [], [use boost library])
fi

С --enable-boost всё работает, ищется, а вот без опций configure не проходит:

checking whether we are using boost... no
configure: error: conditional "am__fastdepCC" was never defined.
Usually this means the macro was only invoked conditionally.

Как бы победить? Или это невозможно и хедеры нужно чекать безусловно?

В гугле искал, но там всё больше находились configure скрипты, которые выдавали эту ошибку.

Заранее спасибо за помощь.
★★★★★
Ответ на: комментарий от alex_custov

> $ ./configure 2>&1 | grep "checking dependency style of"

[c0der@xxx ~/hlint]$ ./configure 2>&1 | grep "checking dependency style of"
checking dependency style of g++... gcc3

o_O

Что-то странное... у меня gcc4.1 вообще-то:

[c0der@mxxx ~/hlint]$ gcc --version | head -1
i586-alt-linux-gcc (GCC) 4.1.2 20070626 (ALT Linux, build 4.1.2-alt1)

php-coder ★★★★★
() автор топика
Ответ на: комментарий от yura_dev

>Может запостишь куда-нибудь configure и configure.in целиком. Если это не коммерческая тайна.

Вот он: http://git.altlinux.org/people/php_coder/packages/hlint.git?p=hlint.git;a=blob;
f=configure.in;h=5bf7c8104c905d8d2ef340f78d60c80518fef09a;hb=c8661e36246950ea19b
ce2fadd0977076cfcf0eb

Если добавить после 50 строки вызов AC_CHECK_HEADER, то configure без параметров не проходит.

--- configure.in        2008-04-14 14:13:43 +0700
+++ configure.in.boost  2008-04-16 17:35:49 +0700
@@ -48,6 +48,8 @@
        [enable_boost=no])
 AC_MSG_RESULT($enable_boost)
 if test "$enable_boost" = "yes"; then
+       # TODO: configure should fails if one of needed headers not found
+       AC_CHECK_HEADER([boost/scoped_array.hpp])
        AC_DEFINE([ENABLE_BOOST], [], [use boost library])
 fi

 

php-coder ★★★★★
() автор топика
Ответ на: комментарий от php-coder

AC_PROG_CC
AC_PROG_CPP
AC_PROG_CXX

---
dependency tracking определяется исходя из gcc, если он непроверяется в configure, то могут быть проблемы (что и получилось).

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Ещё, если указать --enable-boost, то зачем-то ищет кучку стандартных хедеров и не видит бустовский:

checking boost/scoped_array.hpp usability... no
checking boost/scoped_array.hpp presence... no
checking for boost/scoped_array.hpp... no

Но хедер есть:

[c0der@xxx ~/hlint]$ ls -l /usr/include/boost/scoped_array.hpp
-rw-r--r-- 1 root root 3,0K Мар 23 22:15 /usr/include/boost/scoped_array.hpp

В config.log:

configure:4475: checking boost/scoped_array.hpp usability
configure:4492: gcc -c -g -O2  conftest.c >&5
In file included from /usr/include/boost/scoped_array.hpp:15,
                 from conftest.c:53:
/usr/include/boost/checked_delete.hpp:24: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'boost'
In file included from /usr/include/boost/config/select_stdlib_config.hpp:20,
                 from /usr/include/boost/config.hpp:40,
                 from /usr/include/boost/scoped_array.hpp:16,
                 from conftest.c:53:
/usr/include/boost/config/no_tr1/utility.hpp:21:21: error: utility: No such file or directory
In file included from /usr/include/boost/config.hpp:53,
                 from /usr/include/boost/scoped_array.hpp:16,
                 from conftest.c:53:
/usr/include/boost/config/platform/linux.hpp:14:19: error: cstdlib: No such file or directory
In file included from /usr/include/boost/config.hpp:57,
                 from /usr/include/boost/scoped_array.hpp:16,
                 from conftest.c:53:
/usr/include/boost/config/suffix.hpp:433: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'boost'
In file included from conftest.c:53:
/usr/include/boost/scoped_array.hpp:20:52: error: cstddef: No such file or directory
In file included from conftest.c:53:
/usr/include/boost/scoped_array.hpp:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'boost'
configure:4498: $? = 1


Что-то всё очень странно прям.

php-coder ★★★★★
() автор топика
Ответ на: комментарий от alex_custov

точнее, исходя не из gcc, а из вообще списка C компиляторов

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Спасибо!! После добавления AC_PROG_CPP заработало!

(Пойду ещё почитаю, что они все делают...)

Теперь бы разобраться почему не находит хедер...

php-coder ★★★★★
() автор топика
Ответ на: комментарий от php-coder

хедер есть, конечно же. А чем ты его проверяешь, C-компилятором ? :))

if test "$enable_boost" = "yes"; then
        AC_LANG_SAVE
        AC_LANG_CPLUSPLUS

        AC_CHECK_HEADER([boost/scoped_array.hpp])
        AC_DEFINE([ENABLE_BOOST], [], [use boost library])

        AC_LANG_RESTORE
fi

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

>хедер есть, конечно же. А чем ты его проверяешь, C-компилятором ? :))

Я думал, что он проверяется приплюснутым компилятором (потому как я только его проверял в AC_PROG_CXX). Видимо, оказался не прав.

Спасибо ещё раз!

Я не стал делать SAVE/RESTORE, потому что проект полностью на С++ (насколько понимаю это ничего сломать не должно). Я просто добавил после проверки компилятора AC_LANG([C++]), т.к. AC_LANG_CPLUSPLUS obsolete и все заработало!

php-coder ★★★★★
() автор топика
Ответ на: комментарий от php-coder

>(Пойду ещё почитаю, что они все делают...)

сходи ага)))

anonymous
()
Ответ на: комментарий от alex_custov

Короче, добрался. Мне не нравились макросы AC_PROG_CC и AC_PROG_CPP, прочитал их описания и понял, что мне они как бы не нужны. Захламлять configure.in вызовами всяких директив, не будучи 100% уверенным, что они нужны я не хочу.

Выяснилось, что чтобы избавиться от первоначальной ошибки (и от проблемы с поиском хедера boost/scoped_array.hpp достаточно просто указать какой язык используется, с помощью AC_LANG([C++])

Теперь всё работает.

alex_custov, спасибо!

php-coder ★★★★★
() автор топика

php_кодер, ты всегда и везде переходишь на личности

никогда, нигде и ни перед кем не извиняешься

тебе нельзя помогать -- тебя надо в дерьмо носом ткать, вырезать как аппендицит

http://lists.altlinux.org/pipermail/devel/2008-April/073509.html

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.