13

I am making a project that uses Autoconf. I have the following in configure.ac:

AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])

When I run configure, it says it cannot find this header file:

checking boost/foreach.hpp usability... no
checking boost/foreach.hpp presence... no
checking for boost/foreach.hpp... no
configure: error: You need the Boost libraries.

This is strange, because I have Boost. If I remove the check, the code compiles, and I have Boost installed:

$ find /usr/include -name foreach.hpp
/usr/include/boost/foreach.hpp
/usr/include/boost/test/utils/foreach.hpp

Note that I did exactly the same with SDL, and it works.

AC_CHECK_HEADERS([SDL/SDL.h], [],
    [AC_MSG_ERROR(You need the SDL development library.)])

...

checking SDL/SDL.h usability... yes
checking SDL/SDL.h presence... yes
checking for SDL/SDL.h... yes
petersohn
  • 11,292
  • 13
  • 61
  • 98
  • Check config.log to see exactly why it failed. academicRobot is probably correct that it is trying to compile with a C compiler. – William Pursell Jun 22 '10 at 04:43

3 Answers3

17

AC_CHECK_HEADERS actually does a a compile check, not an existence check. So you have to set C++ support for compilation tests in order for boost headers to compile (default is C, docs here):

AC_LANG_PUSH([C++])
AC_CHECK_HEADERS([boost/foreach.hpp], [],
    [AC_MSG_ERROR(You need the Boost libraries.)])
AC_LANG_POP([C++])
academicRobot
  • 6,097
  • 1
  • 31
  • 29
9

You may be interested in github.com/tsuna/boost.m4, which is a drop-in set of Autoconf macros for checking for Boost headers and libraries, as well as the minimum Boost version.

John Kugelman
  • 349,597
  • 67
  • 533
  • 578
Rhys Ulerich
  • 1,242
  • 1
  • 12
  • 28
9

There's also a collection of Boost autoconf macros at the GNU Autoconf Archive. You'll probably need at least AX_BOOST_BASE. Other macros for the other Boost libs are there also.

ldav1s
  • 15,885
  • 2
  • 53
  • 56