ax_isc_bind10.m4 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. dnl @synopsis AX_ISC_BIND10
  2. dnl
  3. dnl @summary figure out how to build C++ programs using ISC BIND 10 libraries
  4. dnl
  5. dnl If no path to the installed BIND 10 header files or libraries is given
  6. dnl via the --with-bind10-include or --with-bind10-lib option, the macro
  7. dnl searchs under /usr/local/{include, lib}, /usr/pkg/{include, lib},
  8. dnl /opt/{include, lib}, /opt/local/{include, lib} directories, respectively.
  9. dnl
  10. dnl This macro calls:
  11. dnl
  12. dnl AC_SUBST(BIND10_CPPFLAGS)
  13. dnl AC_SUBST(BIND10_LDFLAGS)
  14. dnl AC_SUBST(BIND10_COMMON_LIB)
  15. dnl AC_SUBST(BIND10_DNS_LIB)
  16. dnl
  17. dnl If this macro finds CPPFLAGS, LDFLAGS or COMMON_LIB unavailable, it treats
  18. dnl that as a fatal error.
  19. dnl Checks for other BIND 10 module libraries are option, as not all
  20. dnl applications need all libraries. The main configure.ac can handle any
  21. dnl missing library as fatal by checking whether the corresponding
  22. dnl BIND10_xxx_LIB is defined.
  23. dnl
  24. dnl In addition, it sets the BIND10_RPATH variable to a usable linker option
  25. dnl to embed the path to the BIND 10 library to the programs that are to be
  26. dnl linked with the library. If the developer wants to use the option,
  27. dnl it can be used as follows:
  28. dnl if test "x$BIND10_RPATH" != "x"; then
  29. dnl LDFLAGS="$LDFLAGS $BIND10_RPATH"
  30. dnl fi
  31. AC_DEFUN([AX_ISC_BIND10], [
  32. AC_REQUIRE([AX_BOOST_INCLUDE])
  33. AC_REQUIRE([AX_ISC_RPATH])
  34. AC_LANG_SAVE
  35. AC_LANG([C++])
  36. # Check for BIND10 common headers
  37. AC_ARG_WITH(bind10-include,
  38. AS_HELP_STRING([--with-bind10-include=PATH],
  39. [specify a path to BIND 10 header files]),
  40. bind10_inc_path="$withval", bind10_inc_path="no")
  41. # If not specified, try some common paths.
  42. if test "$bind10_inc_path" = "no"; then
  43. for d in /usr/local /usr/pkg /opt /opt/local
  44. do
  45. if test -f $d/include/util/buffer.h; then
  46. bind10_inc_path=$d
  47. break
  48. fi
  49. done
  50. fi
  51. CPPFLAGS_SAVED="$CPPFLAGS"
  52. CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" # boost headers will be used in buffer.h
  53. if test "${bind10_inc_path}" != "no"; then
  54. BIND10_CPPFLAGS="-I${bind10_inc_path}"
  55. CPPFLAGS="$CPPFLAGS $BIND10_CPPFLAGS"
  56. fi
  57. AC_CHECK_HEADERS([util/buffer.h],,
  58. AC_MSG_ERROR([Missing a commonly used BIND 10 header file]))
  59. CPPFLAGS="$CPPFLAGS_SAVED"
  60. AC_SUBST(BIND10_CPPFLAGS)
  61. # Check for BIND10 libraries
  62. CPPFLAGS_SAVED="$CPPFLAGS"
  63. CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS $BIND10_CPPFLAGS"
  64. AC_ARG_WITH(bind10-lib,
  65. AS_HELP_STRING([--with-bind10-lib=PATH],
  66. [specify a path to BIND 10 library files]),
  67. bind10_lib_path="$withval", bind10_lib_path="no")
  68. if test $bind10_lib_path != "no"; then
  69. bind10_lib_dirs=$bind10_lib_path
  70. else
  71. # If not specified, try some common paths.
  72. bind10_lib_dirs="/usr/local/lib /usr/pkg/lib /opt/lib /opt/local/lib"
  73. fi
  74. # make sure we have buildable libraries
  75. AC_MSG_CHECKING([for BIND 10 common library])
  76. BIND10_COMMON_LIB="-lb10-util -lb10-exceptions"
  77. LDFLAGS_SAVED="$LDFLAGS"
  78. LDFLAGS_CHECK_COMMON="$LDFLAGS $BIND10_LDFLAGS"
  79. LIBS_SAVED="$LIBS"
  80. LIBS="$LIBS $BIND10_COMMON_LIB"
  81. for d in $bind10_lib_dirs
  82. do
  83. LDFLAGS="$LDFLAGS_CHECK_COMMON -L$d"
  84. AC_TRY_LINK([
  85. #include <util/buffer.h>
  86. ],[
  87. isc::util::OutputBuffer buffer(0);
  88. ], [BIND10_LDFLAGS="-L${d}"
  89. if test "x$ISC_RPATH_FLAG" != "x"; then
  90. BIND10_RPATH="${ISC_RPATH_FLAG}${d}"
  91. fi
  92. ])
  93. if test "x$BIND10_LDFLAGS" != "x"; then
  94. break
  95. fi
  96. done
  97. if test "x$BIND10_LDFLAGS" != "x"; then
  98. AC_MSG_RESULT(yes)
  99. else
  100. AC_MSG_RESULT(no)
  101. AC_MSG_ERROR([unable to find required BIND 10 libraries])
  102. fi
  103. # restore LIBS once at this point
  104. LIBS="$LIBS_SAVED"
  105. AC_SUBST(BIND10_LDFLAGS)
  106. AC_SUBST(BIND10_COMMON_LIB)
  107. # Check per-module BIND 10 libraries
  108. # DNS library
  109. AC_MSG_CHECKING([for BIND 10 DNS library])
  110. LIBS="$LIBS $BIND10_COMMON_LIB -lb10-dns++"
  111. AC_TRY_LINK([
  112. #include <dns/rrtype.h>
  113. ],[
  114. isc::dns::RRType rrtype(1);
  115. ], [BIND10_DNS_LIB="-lb10-dns++"
  116. AC_MSG_RESULT(yes)],
  117. [AC_MSG_RESULT(no)])
  118. LIBS="$LIBS_SAVED"
  119. AC_SUBST(BIND10_DNS_LIB)
  120. # Restore other flags
  121. CPPFLAGS="$CPPFLAGS_SAVED"
  122. LDFLAGS="$LDFLAGS_SAVED"
  123. AC_LANG_RESTORE
  124. ])dnl AX_ISC_BIND10