summaryrefslogtreecommitdiffstats
path: root/m4/dpkg-funcs.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/dpkg-funcs.m4')
-rw-r--r--m4/dpkg-funcs.m4216
1 files changed, 216 insertions, 0 deletions
diff --git a/m4/dpkg-funcs.m4 b/m4/dpkg-funcs.m4
new file mode 100644
index 0000000..c480c10
--- /dev/null
+++ b/m4/dpkg-funcs.m4
@@ -0,0 +1,216 @@
+# serial 1
+# Copyright © 2005 Scott James Remnant <scott@netsplit.com>
+# Copyright © 2008-2009,2015 Guillem Jover <guillem@debian.org>
+
+# DPKG_FUNC_VA_COPY
+# -----------------
+# Define HAVE_VA_COPY if we have va_copy.
+AC_DEFUN([DPKG_FUNC_VA_COPY], [
+ AC_CACHE_CHECK([for va_copy], [dpkg_cv_va_copy], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdarg.h>
+ ]], [[
+va_list v1, v2;
+va_copy(v1, v2);
+ ]])
+ ], [
+ dpkg_cv_va_copy=yes
+ ], [
+ dpkg_cv_va_copy=no
+ ])
+ ])
+ AS_IF([test "x$dpkg_cv_va_copy" = "xyes"], [
+ AC_DEFINE([HAVE_VA_COPY], [1], [Define to 1 if the 'va_copy' macro exists])
+ ])
+])# DPKG_FUNC_VA_COPY
+
+# DPKG_FUNC_FSYNC_DIR
+# -------------------
+# Define HAVE_FSYNC_DIR if we can fsync(2) directories.
+AC_DEFUN([DPKG_FUNC_FSYNC_DIR], [
+ AC_CACHE_CHECK([whether fsync works on directories], [dpkg_cv_fsync_dir], [
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <stddef.h>
+#include <dirent.h>
+#include <unistd.h>
+ ]], [[
+ int fd;
+ DIR *dir = opendir(".");
+ if (dir == NULL)
+ return 1;
+ fd = dirfd(dir);
+ if (fd < 0)
+ return 1;
+ if (fsync(fd) < 0)
+ return 1;
+ closedir(dir);
+ ]])
+ ], [
+ dpkg_cv_fsync_dir=yes
+ ], [
+ dpkg_cv_fsync_dir=no
+ ], [
+ dpkg_cv_fsync_dir=maybe
+ ])
+
+ AS_IF([test "x$dpkg_cv_fsync_dir" = "xmaybe"], [
+ AS_CASE([$host_os],
+ [aix*], [
+ # On AIX fsync(3) requires writable file descriptors, which
+ # opendir(3) does not provide, but even then fsync(3) nor
+ # fsync_range(3) always work on directories anyway.
+ dpkg_cv_fsync_dir=no
+ ], [
+ # On other systems we assume this works.
+ dpkg_cv_fsync_dir=yes
+ ]
+ )
+ ])
+ ])
+ AS_IF([test "x$dpkg_cv_fsync_dir" = "xyes"], [
+ AC_DEFINE([HAVE_FSYNC_DIR], [1],
+ [Define to 1 if the 'fsync' function works on directories])
+ ])
+])
+
+# DPKG_FUNC_C99_SNPRINTF
+# -----------------------
+# Define HAVE_C99_SNPRINTF if we have C99 snprintf family semantics
+AC_DEFUN([DPKG_FUNC_C99_SNPRINTF], [
+ AC_CACHE_CHECK([for C99 snprintf functions], [dpkg_cv_c99_snprintf], [
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+int test_vsnprintf(const char *fmt, ...)
+{
+ int n;
+ va_list args;
+
+ va_start(args, fmt);
+ n = vsnprintf(NULL, 0, fmt, args);
+ va_end(args);
+
+ return n;
+}
+ ]], [[
+ int n;
+
+ n = snprintf(NULL, 0, "format %s %d", "string", 10);
+ if (n != strlen("format string 10"))
+ return 1;
+
+ n = test_vsnprintf("format %s %d", "string", 10);
+ if (n != strlen("format string 10"))
+ return 1;
+ ]])
+ ], [
+ dpkg_cv_c99_snprintf=yes
+ ], [
+ dpkg_cv_c99_snprintf=no
+ ], [
+ dpkg_cv_c99_snprintf=maybe
+ ])
+
+ AS_IF([test "x$dpkg_cv_c99_snprintf" = "xmaybe"], [
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([[
+#define _GNU_SOURCE 1
+#include <unistd.h>
+#if !defined(_XOPEN_VERSION) || _XOPEN_VERSION < 600
+#error "snprintf() has conflicting semantics with C99 on SUSv2 and earlier"
+#endif
+ ]])
+ ], [
+ dpkg_cv_c99_snprintf=yes
+ ], [
+ dpkg_cv_c99_snprintf=no
+ ])
+ ])
+ ])
+ AS_IF([test "x$dpkg_cv_c99_snprintf" = "xyes"], [
+ AC_DEFINE([HAVE_C99_SNPRINTF], [1],
+ [Define to 1 if the 'snprintf' family is C99 conformant])
+ ])
+ AM_CONDITIONAL([HAVE_C99_SNPRINTF], [test "x$dpkg_cv_c99_snprintf" = "xyes"])
+])# DPKG_FUNC_C99_SNPRINTF
+
+# DPKG_USE_MMAP
+# -------------
+# Define USE_MMAP if mmap() is available and it was requested
+AC_DEFUN([DPKG_USE_MMAP], [
+ AC_ARG_ENABLE([mmap],
+ [AS_HELP_STRING([--enable-mmap],
+ [enable usage of unrealiable mmap if available])],
+ [], [enable_mmap=no])
+
+ AS_IF([test "x$enable_mmap" = "xyes"], [
+ AC_CHECK_FUNCS([mmap])
+ AC_DEFINE([USE_MMAP], [1], [Use unreliable mmap support])
+ ])
+])
+
+# DPKG_USE_DISK_PREALLOCATE
+# -------------------------
+# Define USE_DISK_PREALLOCATE if disk size pre-allocation is available
+# and it was requested.
+AC_DEFUN([DPKG_USE_DISK_PREALLOCATE], [
+ AC_ARG_ENABLE([disk-preallocate],
+ [AS_HELP_STRING([--enable-disk-preallocate],
+ [enable usage of disk size pre-allocation])],
+ [], [enable_disk_preallocate=no])
+
+ AS_IF([test "x$enable_disk_preallocate" = "xyes"], [
+ AC_DEFINE([USE_DISK_PREALLOCATE], [1], [Use disk size pre-allocation])
+ ])
+])
+
+# DPKG_CHECK_PROGNAME
+# -------------------
+# Check for system implementations of program name tracking.
+AC_DEFUN([DPKG_CHECK_PROGNAME], [
+ AC_MSG_CHECKING([for program_invocation_short_name])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <errno.h>
+ ]], [[
+const char *p = program_invocation_short_name;
+ ]])
+ ], [
+ AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1],
+ [Define to 1 if you have program_invocation_short_name])
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+
+ AC_MSG_CHECKING([for __progname])
+ AC_LINK_IFELSE([
+ AC_LANG_PROGRAM([[
+#include <stdio.h>
+extern char *__progname;
+ ]], [[
+printf("%s", __progname);
+ ]])
+ ], [
+ AC_DEFINE([HAVE___PROGNAME], [1], [Define to 1 if you have __progname])
+ AC_MSG_RESULT([yes])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+]) # DPKG_CHECK_PROGNAME
+
+# DPKG_CHECK_COMPAT_FUNCS(LIST)
+# -----------------------
+# Check each function and define an automake conditional
+AC_DEFUN([DPKG_CHECK_COMPAT_FUNCS], [
+ AC_CHECK_FUNCS([$1])
+ m4_foreach_w([ac_func], [$1], [
+ AM_CONDITIONAL([HAVE_]AS_TR_CPP(ac_func),
+ [test "x$ac_cv_func_[]AS_TR_SH(ac_func)" = "xyes"])
+ ])
+]) # DPKG_CHECK_COMPAT_FUNCS