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