summaryrefslogtreecommitdiff
path: root/acinclude.m4
diff options
context:
space:
mode:
Diffstat (limited to 'acinclude.m4')
-rw-r--r--acinclude.m4138
1 files changed, 138 insertions, 0 deletions
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 000000000000..71f01544d11b
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,138 @@
+dnl @synopsis AX_FUNC_WHICH_GETSPNAM_R
+dnl
+dnl Determines which historical variant of the getspnam_r() call
+dnl (taking four or five arguments) is available on the system
+dnl and sets NEW_SHADOW_API=YES if there are five arguments.
+dnl
+dnl Originally named "AX_FUNC_WHICH_GETHOSTBYNAME_R". Rewritten
+dnl for AX_FUNC_WHICH_GETSPNAM_R
+dnl
+dnl @author Caolan McNamara <caolan@skynet.ie>
+dnl @author Daniel Richard G. <skunk@iskunk.org>
+dnl @version 2006-05-01
+dnl @license LGPL
+
+AC_DEFUN([AX_FUNC_WHICH_GETSPNAM_R], [
+
+ AC_LANG_PUSH(C)
+ AC_MSG_CHECKING([how many arguments getspnam_r() takes])
+
+ AC_CACHE_VAL(ac_cv_func_which_getspnam_r, [
+
+################################################################
+
+ac_cv_func_which_getspnam_r=unknown
+
+#
+# ONE ARGUMENT (sanity check)
+#
+
+# This should fail, as there is no variant of getspnam_r() that takes
+# a single argument. If it actually compiles, then we can assume that
+# netdb.h is not declaring the function, and the compiler is thereby
+# assuming an implicit prototype. In which case, we're out of luck.
+#
+AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <shadow.h>
+ ]],
+ [[
+ const char *name = "myname";
+ getspnam_r(name) /* ; */
+ ]]),
+ ac_cv_func_which_getspnam_r=no)
+
+#
+# FIVE ARGUMENTS
+#
+
+if test "$ac_cv_func_which_getspnam_r" = "unknown"; then
+
+AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <shadow.h>
+ ]],
+ [[
+ char buffer[[]] = { '\0' };
+ struct spwd spwdStruct;
+ const char *name = "myname";
+ getspnam_r(name, &spwdStruct, buffer, sizeof buffer, 0) /* ; */
+ ]]),
+ ac_cv_func_which_getspnam_r=five)
+
+fi
+
+#
+# FOUR ARGUMENTS
+#
+
+if test "$ac_cv_func_which_getspnam_r" = "unknown"; then
+
+AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <shadow.h>
+ ]],
+ [[
+ char buffer[[]] = { '\0' };
+ struct spwd spwdStruct;
+ const char *name = "myname";
+ getspnam_r(name, &spwdStruct, buffer, sizeof buffer) /* ; */
+ ]]),
+ ac_cv_func_which_getspnam_r=four)
+
+fi
+
+################################################################
+
+]) dnl end AC_CACHE_VAL
+
+case "$ac_cv_func_which_getspnam_r" in
+ five)
+ AC_MSG_RESULT([five])
+ NEW_SHADOW_API=YES
+ ;;
+
+ four)
+ AC_MSG_RESULT([four])
+ ;;
+
+ no)
+ AC_MSG_RESULT([cannot find function declaration in shadow.h])
+ ;;
+
+ unknown)
+ AC_MSG_RESULT([can't tell])
+ ;;
+
+ *)
+ AC_MSG_ERROR([internal error])
+ ;;
+esac
+
+AC_LANG_POP(C)
+
+]) dnl end AC_DEFUN
+
+dnl PKG_CHECK_MODULES_MACHACK is like PKG_CHECK_MODULES but sneaks in an extra
+dnl argument between the first and second, denoting a program to call instead of
+dnl pkg-config on Mac OS X (aka Darwin):
+AC_DEFUN([PKG_CHECK_MODULES_MACHACK],
+[if test "$_os" = "Darwin"; then
+ AC_MSG_CHECKING($1_CFLAGS)
+ $1_CFLAGS=`$2 --cflags`
+ AC_MSG_RESULT($$1_CFLAGS)
+ AC_MSG_CHECKING($1_LIBS)
+ $1_LIBS=`$2 --libs`
+ AC_MSG_RESULT($$1_LIBS)
+ AC_SUBST($1_CFLAGS)
+ AC_SUBST($1_LIBS)
+ else
+ PKG_CHECK_MODULES($1, $3, $4, $5, $6)
+ fi
+])