From de58332bdd815a9423ceaa4c70aab6245534a1b9 Mon Sep 17 00:00:00 2001 From: Abdirahim Musse <33973272+abmusse@users.noreply.github.com> Date: Thu, 5 Mar 2020 11:58:49 -0600 Subject: [PATCH 1/3] feat: Add AIX support --- psycopg/aix_support.c | 58 +++++++++++++++++++++++++++++++++++++++++++ psycopg/aix_support.h | 48 +++++++++++++++++++++++++++++++++++ psycopg/pqpath.c | 2 ++ setup.py | 2 +- 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 psycopg/aix_support.c create mode 100644 psycopg/aix_support.h diff --git a/psycopg/aix_support.c b/psycopg/aix_support.c new file mode 100644 index 00000000..dc83a397 --- /dev/null +++ b/psycopg/aix_support.c @@ -0,0 +1,58 @@ +/* aix_support.c - emulate functions missing on AIX + * + * Copyright (C) 2017 My Karlsson + * 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 00000000..79ef0fff --- /dev/null +++ b/psycopg/aix_support.h @@ -0,0 +1,48 @@ +/* aix_support.h - definitions for aix_support.c + * + * Copyright (C) 2017 My Karlsson + * 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" + +#if defined(__sun) && defined(__SVR4) +#include + +#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 e52ba187..52ba78b5 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 #endif diff --git a/setup.py b/setup.py index badf5d8f..6a91aba1 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', From 6de23eb793981106aab34d0f7af07b419264bd2c Mon Sep 17 00:00:00 2001 From: Abdirahim Musse <33973272+abmusse@users.noreply.github.com> Date: Thu, 12 Mar 2020 13:21:02 -0500 Subject: [PATCH 2/3] fixup! feat: Add AIX support --- psycopg/aix_support.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/psycopg/aix_support.h b/psycopg/aix_support.h index 79ef0fff..81f2bd6c 100644 --- a/psycopg/aix_support.h +++ b/psycopg/aix_support.h @@ -29,7 +29,7 @@ #include "psycopg/config.h" -#if defined(__sun) && defined(__SVR4) +#ifdef _AIX #include #ifndef timeradd From 012a20b01082850af47e54eeefc90ea100ae55de Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Mon, 6 Apr 2020 16:46:44 +1200 Subject: [PATCH 3/3] Mention AIX support in NEWS file --- NEWS | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS b/NEWS index 0968b1f2..0ada551b 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ What's new in psycopg 2.8.5 - Fixed use of `!connection_factory` and `!cursor_factory` together (:ticket:`#1019`). +- Added AIX support (:ticket:`#1061`).` What's new in psycopg 2.8.4