summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Felt <aixtools@users.noreply.github.com>2017-12-30 22:39:20 +0100
committerAntoine Pitrou <pitrou@free.fr>2017-12-30 22:39:20 +0100
commit0d3ccb4395cccb11a50289c84c9a0dbbac03c647 (patch)
tree605efdb3abe3c0e95259f660b28facbfccc00d55
parent0c36bed1c46d07ef91d3e02e69e974e4f3ecd31a (diff)
downloadcpython-git-0d3ccb4395cccb11a50289c84c9a0dbbac03c647.tar.gz
bpo-32399: Starting with AIX6.1 there is support in libc.a for uuid (RFC4122) (#4974)
Starting with AIX6.1 there is support in libc.a for uuid (RFC4122) This patch provides the changes needed for this integration with the OS. On AIX the base function is uuid_create() rather than uuid_generate_time() The AIX uuid_t typedef is more aligned to the UUID field based definition while the Linux typedef that is more aligned with UUID bytes (or perhaps UUID bytes_le) definitions.
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2017-12-22-13-38-17.bpo-32399.wlH12z.rst1
-rw-r--r--Modules/_uuidmodule.c23
-rwxr-xr-xconfigure46
-rw-r--r--configure.ac15
-rw-r--r--pyconfig.h.in9
5 files changed, 88 insertions, 6 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2017-12-22-13-38-17.bpo-32399.wlH12z.rst b/Misc/NEWS.d/next/Core and Builtins/2017-12-22-13-38-17.bpo-32399.wlH12z.rst
new file mode 100644
index 0000000000..ab18f268c8
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2017-12-22-13-38-17.bpo-32399.wlH12z.rst
@@ -0,0 +1 @@
+Add AIX uuid library support for RFC4122 using uuid_create() in libc.a
diff --git a/Modules/_uuidmodule.c b/Modules/_uuidmodule.c
index d4bc3c7b0d..1b37511c22 100644
--- a/Modules/_uuidmodule.c
+++ b/Modules/_uuidmodule.c
@@ -1,22 +1,33 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#ifdef HAVE_UUID_UUID_H
#include <uuid/uuid.h>
+#endif
+#ifdef HAVE_UUID_H
+#include <uuid.h>
+#endif
static PyObject *
py_uuid_generate_time_safe(void)
{
+ uuid_t uuid;
#ifdef HAVE_UUID_GENERATE_TIME_SAFE
- uuid_t out;
int res;
- res = uuid_generate_time_safe(out);
- return Py_BuildValue("y#i", (const char *) out, sizeof(out), res);
+ res = uuid_generate_time_safe(uuid);
+ return Py_BuildValue("y#i", (const char *) uuid, sizeof(uuid), res);
+#elif HAVE_UUID_CREATE
+/*
+ * AIX support for uuid - RFC4122
+ */
+ unsigned32 status;
+ uuid_create(&uuid, &status);
+ return Py_BuildValue("y#i", (const char *) &uuid, sizeof(uuid), (int) status);
#else
- uuid_t out;
- uuid_generate_time(out);
- return Py_BuildValue("y#O", (const char *) out, sizeof(out), Py_None);
+ uuid_generate_time(uuid);
+ return Py_BuildValue("y#O", (const char *) uuid, sizeof(uuid), Py_None);
#endif
}
diff --git a/configure b/configure
index 2728f67b57..da2c43fe7a 100755
--- a/configure
+++ b/configure
@@ -9516,6 +9516,21 @@ _ACEOF
fi
# Dynamic linking for HP-UX
+# checks for uuid.h location
+for ac_header in uuid/uuid.h uuid.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time_safe" >&5
$as_echo_n "checking for uuid_generate_time_safe... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9546,6 +9561,37 @@ $as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 (anno 2007)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RFC4122 - uuid support on AIX" >&5
+$as_echo_n "checking for RFC4122 - uuid support on AIX... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <uuid.h>
+int
+main ()
+{
+
+#ifndef uuid_create
+void *x = uuid_create
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+$as_echo "#define HAVE_UUID_CREATE 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
# 'Real Time' functions on Solaris
# posix4 on Solaris 2.6
# pthread (first!) on Linux
diff --git a/configure.ac b/configure.ac
index 027109c65d..9a84e90e34 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2681,6 +2681,9 @@ AC_CHECK_LIB(sendfile, sendfile)
AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
+# checks for uuid.h location
+AC_CHECK_HEADERS([uuid/uuid.h uuid.h])
+
AC_MSG_CHECKING(for uuid_generate_time_safe)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <uuid/uuid.h>]], [[
#ifndef uuid_generate_time_safe
@@ -2692,6 +2695,18 @@ void *x = uuid_generate_time_safe
[AC_MSG_RESULT(no)]
)
+# AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 (anno 2007)
+AC_MSG_CHECKING(for RFC4122 - uuid support on AIX)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <uuid.h>]], [[
+#ifndef uuid_create
+void *x = uuid_create
+#endif
+]])],
+ [AC_DEFINE(HAVE_UUID_CREATE, 1, Define if uuid_create() exists. AIX support for uuid:RFC4122)
+ AC_MSG_RESULT(yes)],
+ [AC_MSG_RESULT(no)]
+)
+
# 'Real Time' functions on Solaris
# posix4 on Solaris 2.6
# pthread (first!) on Linux
diff --git a/pyconfig.h.in b/pyconfig.h.in
index d828d48af8..4cf2f035c2 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -1191,9 +1191,18 @@
/* Define to 1 if you have the <utime.h> header file. */
#undef HAVE_UTIME_H
+/* Define if uuid_create() exists. AIX support for uuid:RFC4122 */
+#undef HAVE_UUID_CREATE
+
/* Define if uuid_generate_time_safe() exists. */
#undef HAVE_UUID_GENERATE_TIME_SAFE
+/* Define to 1 if you have the <uuid.h> header file. */
+#undef HAVE_UUID_H
+
+/* Define to 1 if you have the <uuid/uuid.h> header file. */
+#undef HAVE_UUID_UUID_H
+
/* Define to 1 if you have the `wait3' function. */
#undef HAVE_WAIT3