Macro: ac_caolan_func_which_gethostbyname_r

Back to the Main Page. | Download the M4 Source.

# ac_caolan_func_which_gethostbyname_r

Synopsis

  `AC_caolan_FUNC_WHICH_GETHOSTBYNAME_R`

Version

  1.1.1.1 (2001/07/26) Miscellaneous @ ac-archive-0.5.39

Author

  Caolan McNamara <caolan@skynet.ie>

Description

  Provides a test to determine the correct way to call gethostbyname_r:

  - defines HAVE_FUNC_GETHOSTBYNAME_R_6 if it needs 6 arguments (e.g linux)
  - defines HAVE_FUNC_GETHOSTBYNAME_R_5 if it needs 5 arguments (e.g. solaris)
  - defines HAVE_FUNC_GETHOSTBYNAME_R_3 if it needs 3 arguments (e.g. osf/1)

  If used in conjunction in gethostname.c the api demonstrated in test.c can be used regardless of which gethostbyname_r exists. These example files found at <http://www.csn.ul.ie/~caolan/publink/gethostbyname_r>.

  Based on David Arnold's autoconf suggestion in the threads faq.

M4 Source Code

      AC_DEFUN(AC_caolan_FUNC_WHICH_GETHOSTBYNAME_R,
      [AC_CACHE_CHECK(for which type of gethostbyname_r, ac_cv_func_which_gethostname_r, [
      AC_CHECK_FUNC(gethostbyname_r, [
              AC_TRY_COMPILE([
      #               include <netdb.h>
              ],      [

              char *name;
              struct hostent *he;
              struct hostent_data data;
              (void) gethostbyname_r(name, he, &data);

                      ],ac_cv_func_which_gethostname_r=three,
                              [
      dnl                     ac_cv_func_which_gethostname_r=no
        AC_TRY_COMPILE([
      #   include <netdb.h>
        ], [
              char *name;
              struct hostent *he, *res;
              char buffer[2048];
              int buflen = 2048;
              int h_errnop;
              (void) gethostbyname_r(name, he, buffer, buflen, &res, &h_errnop)
        ],ac_cv_func_which_gethostname_r=six,

        [
      dnl  ac_cv_func_which_gethostname_r=no
        AC_TRY_COMPILE([
      #   include <netdb.h>
        ], [
                              char *name;
                              struct hostent *he;
                              char buffer[2048];
                              int buflen = 2048;
                              int h_errnop;
                              (void) gethostbyname_r(name, he, buffer, buflen, &h_errnop)
        ],ac_cv_func_which_gethostname_r=five,ac_cv_func_which_gethostname_r=no)

        ]

        )
                              ]
                      )]
              ,ac_cv_func_which_gethostname_r=no)])

      if test $ac_cv_func_which_gethostname_r = six; then
        AC_DEFINE(HAVE_FUNC_GETHOSTBYNAME_R_6)
      elif test $ac_cv_func_which_gethostname_r = five; then
        AC_DEFINE(HAVE_FUNC_GETHOSTBYNAME_R_5)
      elif test $ac_cv_func_which_gethostname_r = three; then
        AC_DEFINE(HAVE_FUNC_GETHOSTBYNAME_R_3)

      fi

      ])