summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2020-04-06 16:49:42 +1200
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2020-04-06 16:49:42 +1200
commitf2852a520a26d88fb248c0563e73af43110a13a8 (patch)
treeb548ddfea98d2572d16e19c20541a95ec4c86b18
parentfbba461052ae6ebc43167ab69ad91cadb7914c83 (diff)
parent012a20b01082850af47e54eeefc90ea100ae55de (diff)
downloadpsycopg2-f2852a520a26d88fb248c0563e73af43110a13a8.tar.gz
Merge branch 'add-aix-support'
-rw-r--r--NEWS1
-rw-r--r--psycopg/aix_support.c58
-rw-r--r--psycopg/aix_support.h48
-rw-r--r--psycopg/pqpath.c2
-rw-r--r--setup.py2
5 files changed, 110 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 4cab5cf..a1c56d0 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,7 @@ What's new in psycopg 2.8.5
`~psycopg2.extras.LoggingConnection` (:ticket:`#1026`).
- `~psycopg2.extensions.Column` objects in `cursor.description` can be sliced
(:ticket:`#1034`).
+- Added AIX support (:ticket:`#1061`).
- Fixed `~copy.copy()` of `~psycopg2.extras.DictCursor` rows (:ticket:`#1073`).
diff --git a/psycopg/aix_support.c b/psycopg/aix_support.c
new file mode 100644
index 0000000..dc83a39
--- /dev/null
+++ b/psycopg/aix_support.c
@@ -0,0 +1,58 @@
+/* aix_support.c - emulate functions missing on AIX
+ *
+ * Copyright (C) 2017 My Karlsson <mk@acc.umu.se>
+ * Copyright (c) 2018, Joyent, Inc.
+ * Copyright (C) 2020 The Psycopg Team
+ *
+ * This file is part of psycopg.
+ *
+ * psycopg2 is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link this program with the OpenSSL library (or with
+ * modified versions of OpenSSL that use the same license as OpenSSL),
+ * and distribute linked combinations including the two.
+ *
+ * You must obey the GNU Lesser General Public License in all respects for
+ * all of the code used other than OpenSSL.
+ *
+ * psycopg2 is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ */
+
+#define PSYCOPG_MODULE
+#include "psycopg/psycopg.h"
+#include "psycopg/aix_support.h"
+
+#if defined(_AIX)
+/* timeradd is missing on AIX */
+#ifndef timeradd
+void
+timeradd(struct timeval *a, struct timeval *b, struct timeval *c)
+{
+ c->tv_sec = a->tv_sec + b->tv_sec;
+ c->tv_usec = a->tv_usec + b->tv_usec;
+ if (c->tv_usec >= 1000000) {
+ c->tv_usec -= 1000000;
+ c->tv_sec += 1;
+ }
+}
+
+/* timersub is missing on AIX */
+void
+timersub(struct timeval *a, struct timeval *b, struct timeval *c)
+{
+ c->tv_sec = a->tv_sec - b->tv_sec;
+ c->tv_usec = a->tv_usec - b->tv_usec;
+ if (c->tv_usec < 0) {
+ c->tv_usec += 1000000;
+ c->tv_sec -= 1;
+ }
+}
+#endif /* timeradd */
+#endif /* defined(_AIX)*/
diff --git a/psycopg/aix_support.h b/psycopg/aix_support.h
new file mode 100644
index 0000000..81f2bd6
--- /dev/null
+++ b/psycopg/aix_support.h
@@ -0,0 +1,48 @@
+/* aix_support.h - definitions for aix_support.c
+ *
+ * Copyright (C) 2017 My Karlsson <mk@acc.umu.se>
+ * Copyright (c) 2018-2019, Joyent, Inc.
+ * Copyright (C) 2020 The Psycopg Team
+ *
+ * This file is part of psycopg.
+ *
+ * psycopg2 is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * In addition, as a special exception, the copyright holders give
+ * permission to link this program with the OpenSSL library (or with
+ * modified versions of OpenSSL that use the same license as OpenSSL),
+ * and distribute linked combinations including the two.
+ *
+ * You must obey the GNU Lesser General Public License in all respects for
+ * all of the code used other than OpenSSL.
+ *
+ * psycopg2 is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ */
+#ifndef PSYCOPG_AIX_SUPPORT_H
+#define PSYCOPG_AIX_SUPPORT_H
+
+#include "psycopg/config.h"
+
+#ifdef _AIX
+#include <sys/time.h>
+
+#ifndef timeradd
+extern HIDDEN void timeradd(struct timeval *a, struct timeval *b, struct timeval *c);
+extern HIDDEN void timersub(struct timeval *a, struct timeval *b, struct timeval *c);
+#endif
+
+#ifndef timercmp
+#define timercmp(a, b, cmp) \
+ (((a)->tv_sec == (b)->tv_sec) ? \
+ ((a)->tv_usec cmp (b)->tv_usec) : \
+ ((a)->tv_sec cmp (b)->tv_sec))
+#endif
+#endif
+
+#endif /* !defined(PSYCOPG_AIX_SUPPORT_H) */
diff --git a/psycopg/pqpath.c b/psycopg/pqpath.c
index e52ba18..52ba78b 100644
--- a/psycopg/pqpath.c
+++ b/psycopg/pqpath.c
@@ -54,6 +54,8 @@
#include "win32_support.h"
#elif defined(__sun) && defined(__SVR4)
#include "solaris_support.h"
+#elif defined(_AIX)
+#include "aix_support.h"
#else
#include <sys/time.h>
#endif
diff --git a/setup.py b/setup.py
index badf5d8..6a91aba 100644
--- a/setup.py
+++ b/setup.py
@@ -483,7 +483,7 @@ data_files = []
sources = [
'psycopgmodule.c',
'green.c', 'pqpath.c', 'utils.c', 'bytes_format.c',
- 'libpq_support.c', 'win32_support.c', 'solaris_support.c',
+ 'libpq_support.c', 'win32_support.c', 'solaris_support.c', 'aix_support.c',
'connection_int.c', 'connection_type.c',
'cursor_int.c', 'cursor_type.c', 'column_type.c',