xref: /OK3568_Linux_fs/buildroot/package/python-rpi-gpio/0001-fix-build-with-gcc-10.x.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1Description: This patch fixes the "multiple definition of" errors with gcc10
2
3Signed-off-by: Michael Fischer <mf@go-sys.de>
4
5diff -purN python-rpi-gpio.org/source/common.c python-rpi-gpio/source/common.c
6--- python-rpi-gpio.org/source/common.c	2019-07-21 14:41:22.000000000 +0200
7+++ python-rpi-gpio/source/common.c	2020-08-07 09:31:33.948575964 +0200
8@@ -28,6 +28,9 @@
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 };
10 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 };
11 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 };
12+const int (*pin_to_gpio)[41];
13+int gpio_direction[54];
14+rpi_info rpiinfo;
15 int setup_error = 0;
16 int module_setup = 0;
17
18diff -purN python-rpi-gpio.org/source/common.h python-rpi-gpio/source/common.h
19--- python-rpi-gpio.org/source/common.h	2019-07-21 14:41:22.000000000 +0200
20+++ python-rpi-gpio/source/common.h	2020-08-07 09:31:33.948575964 +0200
21@@ -30,14 +30,14 @@ SOFTWARE.
22 #define I2C          42
23 #define PWM          43
24
25-int gpio_mode;
26-const int pin_to_gpio_rev1[41];
27-const int pin_to_gpio_rev2[41];
28-const int pin_to_gpio_rev3[41];
29-const int (*pin_to_gpio)[41];
30-int gpio_direction[54];
31-rpi_info rpiinfo;
32-int setup_error;
33-int module_setup;
34+extern int gpio_mode;
35+extern const int pin_to_gpio_rev1[41];
36+extern const int pin_to_gpio_rev2[41];
37+extern const int pin_to_gpio_rev3[41];
38+extern const int (*pin_to_gpio)[41];
39+extern int gpio_direction[54];
40+extern rpi_info rpiinfo;
41+extern int setup_error;
42+extern int module_setup;
43 int check_gpio_priv(void);
44 int get_gpio_number(int channel, unsigned int *gpio);
45diff -purN python-rpi-gpio.org/source/constants.c python-rpi-gpio/source/constants.c
46--- python-rpi-gpio.org/source/constants.c	2019-07-21 14:41:22.000000000 +0200
47+++ python-rpi-gpio/source/constants.c	2020-08-07 09:32:15.522196618 +0200
48@@ -21,6 +21,7 @@
49 */
50
51 #include "Python.h"
52+#define CONSTANTS_C
53 #include "constants.h"
54 #include "common.h"
55 #include "c_gpio.h"
56diff -purN python-rpi-gpio.org/source/constants.h python-rpi-gpio/source/constants.h
57--- python-rpi-gpio.org/source/constants.h	2019-07-21 14:41:22.000000000 +0200
58+++ python-rpi-gpio/source/constants.h	2020-08-07 09:32:15.522196618 +0200
59@@ -23,22 +23,28 @@ SOFTWARE.
60 #define PY_PUD_CONST_OFFSET 20
61 #define PY_EVENT_CONST_OFFSET 30
62
63-PyObject *high;
64-PyObject *low;
65-PyObject *input;
66-PyObject *output;
67-PyObject *pwm;
68-PyObject *serial;
69-PyObject *i2c;
70-PyObject *spi;
71-PyObject *unknown;
72-PyObject *board;
73-PyObject *bcm;
74-PyObject *pud_off;
75-PyObject *pud_up;
76-PyObject *pud_down;
77-PyObject *rising_edge;
78-PyObject *falling_edge;
79-PyObject *both_edge;
80+#ifdef CONSTANTS_C
81+#define MAYBE_EXTERN
82+#else
83+#define MAYBE_EXTERN extern
84+#endif
85+
86+MAYBE_EXTERN PyObject *high;
87+MAYBE_EXTERN PyObject *low;
88+MAYBE_EXTERN PyObject *input;
89+MAYBE_EXTERN PyObject *output;
90+MAYBE_EXTERN PyObject *pwm;
91+MAYBE_EXTERN PyObject *serial;
92+MAYBE_EXTERN PyObject *i2c;
93+MAYBE_EXTERN PyObject *spi;
94+MAYBE_EXTERN PyObject *unknown;
95+MAYBE_EXTERN PyObject *board;
96+MAYBE_EXTERN PyObject *bcm;
97+MAYBE_EXTERN PyObject *pud_off;
98+MAYBE_EXTERN PyObject *pud_up;
99+MAYBE_EXTERN PyObject *pud_down;
100+MAYBE_EXTERN PyObject *rising_edge;
101+MAYBE_EXTERN PyObject *falling_edge;
102+MAYBE_EXTERN PyObject *both_edge;
103
104 void define_constants(PyObject *module);
105diff -purN python-rpi-gpio.org/source/event_gpio.c python-rpi-gpio/source/event_gpio.c
106--- python-rpi-gpio.org/source/event_gpio.c	2019-07-21 14:41:22.000000000 +0200
107+++ python-rpi-gpio/source/event_gpio.c	2020-08-07 09:42:05.564483136 +0200
108@@ -57,7 +57,7 @@ struct callback
109 };
110 struct callback *callbacks = NULL;
111
112-pthread_t threads;
113+static pthread_t threads;
114 int event_occurred[54] = { 0 };
115 int thread_running = 0;
116 int epfd_thread = -1;
117diff -purN python-rpi-gpio.org/source/py_pwm.h python-rpi-gpio/source/py_pwm.h
118--- python-rpi-gpio.org/source/py_pwm.h	2019-07-21 14:41:22.000000000 +0200
119+++ python-rpi-gpio/source/py_pwm.h	2020-08-07 09:38:49.445646807 +0200
120@@ -20,5 +20,5 @@ OUT OF OR IN CONNECTION WITH THE SOFTWAR
121 SOFTWARE.
122 */
123
124-PyTypeObject PWMType;
125+extern PyTypeObject PWMType;
126 PyTypeObject *PWM_init_PWMType(void);
127diff -purN python-rpi-gpio.org/source/soft_pwm.c python-rpi-gpio/source/soft_pwm.c
128--- python-rpi-gpio.org/source/soft_pwm.c	2019-07-21 14:41:22.000000000 +0200
129+++ python-rpi-gpio/source/soft_pwm.c	2020-08-07 09:42:40.753160437 +0200
130@@ -25,7 +25,7 @@ SOFTWARE.
131 #include <time.h>
132 #include "c_gpio.h"
133 #include "soft_pwm.h"
134-pthread_t threads;
135+static pthread_t threads;
136
137 struct pwm
138 {
139diff -purN python-rpi-gpio.org/source/soft_pwm.h python-rpi-gpio/source/soft_pwm.h
140--- python-rpi-gpio.org/source/soft_pwm.h	2019-07-21 14:41:22.000000000 +0200
141+++ python-rpi-gpio/source/soft_pwm.h	2020-08-07 09:39:25.916811352 +0200
142@@ -26,4 +26,4 @@ void pwm_set_duty_cycle(unsigned int gpi
143 void pwm_set_frequency(unsigned int gpio, float freq);
144 void pwm_start(unsigned int gpio);
145 void pwm_stop(unsigned int gpio);
146-int pwm_exists(unsigned int gpio);
147+extern int pwm_exists(unsigned int gpio);
148