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);
