kumquat-buildroot/package/python-rpi-gpio/0001-fix-build-with-gcc-10.x.patch
Yann E. MORIN ae6bd1eb44 package/python-rpi-gpio: fix gcc-10 compatibility patch
Although the patch makes the package build OK, it fails at runtime
when the module is imported, because of missing symbols:

    ImportError: /usr/lib/python3.8/site-packages/RPi/_GPIO.cpython-38-aarch64-linux-gnu.so: undefined symbol: high

Fix that by making sure the symbols are declared once, but only once.

Fixes: #13166

Reported-by: Christian Stewart <christian@paral.in>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Michael Fischer <mf@go-sys.de>
Cc: Asaf Kahlon <asafka7@gmail.com>
Cc: Yegor Yefremov <yegorslists@googlemail.com>
Cc: Ian Haylock <haylocki@yahoo.co.uk>
Tested-by: Christian Stewart <christian@paral.in>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-08-23 23:29:52 +02:00

148 lines
5.3 KiB
Diff

Description: This patch fixes the "multiple definition of" errors with gcc10
Signed-off-by: Michael Fischer <mf@go-sys.de>
diff -purN python-rpi-gpio.org/source/common.c python-rpi-gpio/source/common.c
--- python-rpi-gpio.org/source/common.c 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/common.c 2020-08-07 09:31:33.948575964 +0200
@@ -28,6 +28,9 @@
const int pin_to_gpio_rev1[41] = {-1, -1, -1, 0, -1, 1, -1, 4, 14, -1, 15, 17, 18, 21, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
const int pin_to_gpio_rev2[41] = {-1, -1, -1, 2, -1, 3, -1, 4, 14, -1, 15, 17, 18, 27, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
const int pin_to_gpio_rev3[41] = {-1, -1, -1, 2, -1, 3, -1, 4, 14, -1, 15, 17, 18, 27, -1, 22, 23, -1, 24, 10, -1, 9, 25, 11, 8, -1, 7, -1, -1, 5, -1, 6, 12, 13, -1, 19, 16, 26, 20, -1, 21 };
+const int (*pin_to_gpio)[41];
+int gpio_direction[54];
+rpi_info rpiinfo;
int setup_error = 0;
int module_setup = 0;
diff -purN python-rpi-gpio.org/source/common.h python-rpi-gpio/source/common.h
--- python-rpi-gpio.org/source/common.h 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/common.h 2020-08-07 09:31:33.948575964 +0200
@@ -30,14 +30,14 @@ SOFTWARE.
#define I2C 42
#define PWM 43
-int gpio_mode;
-const int pin_to_gpio_rev1[41];
-const int pin_to_gpio_rev2[41];
-const int pin_to_gpio_rev3[41];
-const int (*pin_to_gpio)[41];
-int gpio_direction[54];
-rpi_info rpiinfo;
-int setup_error;
-int module_setup;
+extern int gpio_mode;
+extern const int pin_to_gpio_rev1[41];
+extern const int pin_to_gpio_rev2[41];
+extern const int pin_to_gpio_rev3[41];
+extern const int (*pin_to_gpio)[41];
+extern int gpio_direction[54];
+extern rpi_info rpiinfo;
+extern int setup_error;
+extern int module_setup;
int check_gpio_priv(void);
int get_gpio_number(int channel, unsigned int *gpio);
diff -purN python-rpi-gpio.org/source/constants.c python-rpi-gpio/source/constants.c
--- python-rpi-gpio.org/source/constants.c 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/constants.c 2020-08-07 09:32:15.522196618 +0200
@@ -21,6 +21,7 @@
*/
#include "Python.h"
+#define CONSTANTS_C
#include "constants.h"
#include "common.h"
#include "c_gpio.h"
diff -purN python-rpi-gpio.org/source/constants.h python-rpi-gpio/source/constants.h
--- python-rpi-gpio.org/source/constants.h 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/constants.h 2020-08-07 09:32:15.522196618 +0200
@@ -23,22 +23,28 @@ SOFTWARE.
#define PY_PUD_CONST_OFFSET 20
#define PY_EVENT_CONST_OFFSET 30
-PyObject *high;
-PyObject *low;
-PyObject *input;
-PyObject *output;
-PyObject *pwm;
-PyObject *serial;
-PyObject *i2c;
-PyObject *spi;
-PyObject *unknown;
-PyObject *board;
-PyObject *bcm;
-PyObject *pud_off;
-PyObject *pud_up;
-PyObject *pud_down;
-PyObject *rising_edge;
-PyObject *falling_edge;
-PyObject *both_edge;
+#ifdef CONSTANTS_C
+#define MAYBE_EXTERN
+#else
+#define MAYBE_EXTERN extern
+#endif
+
+MAYBE_EXTERN PyObject *high;
+MAYBE_EXTERN PyObject *low;
+MAYBE_EXTERN PyObject *input;
+MAYBE_EXTERN PyObject *output;
+MAYBE_EXTERN PyObject *pwm;
+MAYBE_EXTERN PyObject *serial;
+MAYBE_EXTERN PyObject *i2c;
+MAYBE_EXTERN PyObject *spi;
+MAYBE_EXTERN PyObject *unknown;
+MAYBE_EXTERN PyObject *board;
+MAYBE_EXTERN PyObject *bcm;
+MAYBE_EXTERN PyObject *pud_off;
+MAYBE_EXTERN PyObject *pud_up;
+MAYBE_EXTERN PyObject *pud_down;
+MAYBE_EXTERN PyObject *rising_edge;
+MAYBE_EXTERN PyObject *falling_edge;
+MAYBE_EXTERN PyObject *both_edge;
void define_constants(PyObject *module);
diff -purN python-rpi-gpio.org/source/event_gpio.c python-rpi-gpio/source/event_gpio.c
--- python-rpi-gpio.org/source/event_gpio.c 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/event_gpio.c 2020-08-07 09:42:05.564483136 +0200
@@ -57,7 +57,7 @@ struct callback
};
struct callback *callbacks = NULL;
-pthread_t threads;
+static pthread_t threads;
int event_occurred[54] = { 0 };
int thread_running = 0;
int epfd_thread = -1;
diff -purN python-rpi-gpio.org/source/py_pwm.h python-rpi-gpio/source/py_pwm.h
--- python-rpi-gpio.org/source/py_pwm.h 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/py_pwm.h 2020-08-07 09:38:49.445646807 +0200
@@ -20,5 +20,5 @@ OUT OF OR IN CONNECTION WITH THE SOFTWAR
SOFTWARE.
*/
-PyTypeObject PWMType;
+extern PyTypeObject PWMType;
PyTypeObject *PWM_init_PWMType(void);
diff -purN python-rpi-gpio.org/source/soft_pwm.c python-rpi-gpio/source/soft_pwm.c
--- python-rpi-gpio.org/source/soft_pwm.c 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/soft_pwm.c 2020-08-07 09:42:40.753160437 +0200
@@ -25,7 +25,7 @@ SOFTWARE.
#include <time.h>
#include "c_gpio.h"
#include "soft_pwm.h"
-pthread_t threads;
+static pthread_t threads;
struct pwm
{
diff -purN python-rpi-gpio.org/source/soft_pwm.h python-rpi-gpio/source/soft_pwm.h
--- python-rpi-gpio.org/source/soft_pwm.h 2019-07-21 14:41:22.000000000 +0200
+++ python-rpi-gpio/source/soft_pwm.h 2020-08-07 09:39:25.916811352 +0200
@@ -26,4 +26,4 @@ void pwm_set_duty_cycle(unsigned int gpi
void pwm_set_frequency(unsigned int gpio, float freq);
void pwm_start(unsigned int gpio);
void pwm_stop(unsigned int gpio);
-int pwm_exists(unsigned int gpio);
+extern int pwm_exists(unsigned int gpio);