prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Comprehensive list of broken recipes
  When working on https://github.com/kivy/python-for-android/pull/1401 I realised we still have some broken recipes in the tree at least for python3crystax.
  Even though we don't want to have red builds for things that were already broken, we still want to have a clear status of what's broken and what's not.
  Basically the idea is to try to compile every single recipes and add the broken ones in the ignore list (`BROKEN_RECIPES`) from #1401. That way we can track and fix them later on meanwhile keeping a green build.
  I would like to address it in this task. Basically the output of the task should be a PR making the `BROKEN_RECIPES` list comprehensive. With bonus points for creating an issue per broken recipes :smile: 
  
  
  </issue>
  <code>
  [start of ci/constants.py]
  1 from enum import Enum
  2 
  3 
  4 class TargetPython(Enum):
  5     python2 = 0
  6     python3crystax = 1
  7 
  8 
  9 # recipes that currently break the build
  10 # a recipe could be broken for a target Python and not for the other,
  11 # hence we're maintaining one list per Python target
  12 BROKEN_RECIPES_PYTHON2 = set([])
  13 BROKEN_RECIPES_PYTHON3_CRYSTAX = set([
  14     # not yet python3crystax compatible
  15     'apsw', 'atom', 'boost', 'brokenrecipe', 'cdecimal', 'cherrypy',
  16     'coverage', 'dateutil', 'enaml', 'ethash', 'kiwisolver', 'libgeos',
  17     'libnacl', 'libsodium', 'libtorrent', 'libtribler', 'libzbar', 'libzmq',
  18     'm2crypto', 'mysqldb', 'ndghttpsclient', 'pil', 'pycrypto', 'pyethereum',
  19     'pygame', 'pyleveldb', 'pyproj', 'pyzmq', 'regex', 'shapely',
  20     'simple-crypt', 'twsisted', 'vispy', 'websocket-client', 'zbar',
  21     'zeroconf', 'zope',
  22     # https://github.com/kivy/python-for-android/issues/550
  23     'audiostream',
  24     # enum34 is not compatible with Python 3.6 standard library
  25     # https://stackoverflow.com/a/45716067/185510
  26     'enum34',
  27     # https://github.com/kivy/python-for-android/issues/1398
  28     'ifaddrs',
  29     # https://github.com/kivy/python-for-android/issues/1399
  30     'libglob',
  31     # cannot find -lcrystax
  32     'cffi', 'pycryptodome', 'pymuk', 'secp256k1',
  33     # https://github.com/kivy/python-for-android/issues/1404
  34     'cryptography',
  35     # https://github.com/kivy/python-for-android/issues/1294
  36     'ffmpeg', 'ffpyplayer',
  37     # https://github.com/kivy/python-for-android/pull/1307 ?
  38     'gevent',
  39     'icu',
  40     # https://github.com/kivy/python-for-android/issues/1354
  41     'kivent_core', 'kivent_cymunk', 'kivent_particles', 'kivent_polygen',
  42     'kivy',
  43     # https://github.com/kivy/python-for-android/issues/1405
  44     'libpq', 'psycopg2',
  45     'netifaces',
  46     # https://github.com/kivy/python-for-android/issues/1315 ?
  47     'opencv',
  48     'protobuf_cpp',
  49     # most likely some setup in the Docker container, because it works in host
  50     'pyjnius', 'pyopenal',
  51     # SyntaxError: invalid syntax (Python2)
  52     'storm',
  53     'vlc',
  54 ])
  55 BROKEN_RECIPES = {
  56     TargetPython.python2: BROKEN_RECIPES_PYTHON2,
  57     TargetPython.python3crystax: BROKEN_RECIPES_PYTHON3_CRYSTAX,
  58 }
  59 # recipes that were already built will be skipped
  60 CORE_RECIPES = set([
  61     'pyjnius', 'kivy', 'openssl', 'requests', 'sqlite3', 'setuptools',
  62     'numpy', 'android', 'python2',
  63 ])
  64
  [end of ci/constants.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/ci/constants.py b/ci/constants.py
  --- a/ci/constants.py
  +++ b/ci/constants.py
  @@ -9,7 +9,57 @@
   # recipes that currently break the build
   # a recipe could be broken for a target Python and not for the other,
   # hence we're maintaining one list per Python target
  -BROKEN_RECIPES_PYTHON2 = set([])
  +BROKEN_RECIPES_PYTHON2 = set([
  +    # pythonhelpers.h:12:18: fatal error: string: No such file or directory
  +    'atom',
  +    # https://github.com/kivy/python-for-android/issues/550
  +    'audiostream',
  +    'brokenrecipe',
  +    # https://github.com/kivy/python-for-android/issues/1409
  +    'enaml',
  +    'evdev',
  +    # distutils.errors.DistutilsError
  +    # Could not find suitable distribution for Requirement.parse('cython')
  +    'ffpyplayer',
  +    'flask',
  +    'groestlcoin_hash',
  +    'hostpython3crystax',
  +    # https://github.com/kivy/python-for-android/issues/1398
  +    'ifaddrs',
  +    # https://github.com/kivy/python-for-android/issues/1354
  +    'kivent_core', 'kivent_cymunk', 'kivent_particles', 'kivent_polygen',
  +    'kiwisolver',
  +    # system dependencies autoconf, libtool
  +    'libexpat',
  +    'libgeos',
  +    # https://github.com/kivy/python-for-android/issues/1399
  +    'libglob',
  +    # system dependencies cmake and compile error
  +    'libmysqlclient',
  +    'libsecp256k1',
  +    'libtribler',
  +    # system dependencies gettext, pkg-config
  +    'libzbar',
  +    'ndghttpsclient',
  +    'm2crypto',
  +    'netifaces',
  +    'Pillow',
  +    # https://github.com/kivy/python-for-android/issues/1405
  +    'psycopg2',
  +    'pygame',
  +    # most likely some setup in the Docker container, because it works in host
  +    'pyjnius', 'pyopenal',
  +    'pyproj',
  +    'pysdl2',
  +    'pyzmq',
  +    'secp256k1',
  +    'shapely',
  +    'twisted',
  +    'vlc',
  +    'websocket-client',
  +    'zeroconf',
  +    'zope',
  +])
   BROKEN_RECIPES_PYTHON3_CRYSTAX = set([
       # not yet python3crystax compatible
       'apsw', 'atom', 'boost', 'brokenrecipe', 'cdecimal', 'cherrypy',
  @@ -39,7 +89,8 @@
       'icu',
       # https://github.com/kivy/python-for-android/issues/1354
       'kivent_core', 'kivent_cymunk', 'kivent_particles', 'kivent_polygen',
  -    'kivy',
  +    # system dependencies autoconf, libtool
  +    'libexpat',
       # https://github.com/kivy/python-for-android/issues/1405
       'libpq', 'psycopg2',
       'netifaces',
  
verification_info: {"golden_diff": "diff --git a/ci/constants.py b/ci/constants.py\n--- a/ci/constants.py\n+++ b/ci/constants.py\n@@ -9,7 +9,57 @@\n # recipes that currently break the build\n # a recipe could be broken for a target Python and not for the other,\n # hence we're maintaining one list per Python target\n-BROKEN_RECIPES_PYTHON2 = set([])\n+BROKEN_RECIPES_PYTHON2 = set([\n+    # pythonhelpers.h:12:18: fatal error: string: No such file or directory\n+    'atom',\n+    # https://github.com/kivy/python-for-android/issues/550\n+    'audiostream',\n+    'brokenrecipe',\n+    # https://github.com/kivy/python-for-android/issues/1409\n+    'enaml',\n+    'evdev',\n+    # distutils.errors.DistutilsError\n+    # Could not find suitable distribution for Requirement.parse('cython')\n+    'ffpyplayer',\n+    'flask',\n+    'groestlcoin_hash',\n+    'hostpython3crystax',\n+    # https://github.com/kivy/python-for-android/issues/1398\n+    'ifaddrs',\n+    # https://github.com/kivy/python-for-android/issues/1354\n+    'kivent_core', 'kivent_cymunk', 'kivent_particles', 'kivent_polygen',\n+    'kiwisolver',\n+    # system dependencies autoconf, libtool\n+    'libexpat',\n+    'libgeos',\n+    # https://github.com/kivy/python-for-android/issues/1399\n+    'libglob',\n+    # system dependencies cmake and compile error\n+    'libmysqlclient',\n+    'libsecp256k1',\n+    'libtribler',\n+    # system dependencies gettext, pkg-config\n+    'libzbar',\n+    'ndghttpsclient',\n+    'm2crypto',\n+    'netifaces',\n+    'Pillow',\n+    # https://github.com/kivy/python-for-android/issues/1405\n+    'psycopg2',\n+    'pygame',\n+    # most likely some setup in the Docker container, because it works in host\n+    'pyjnius', 'pyopenal',\n+    'pyproj',\n+    'pysdl2',\n+    'pyzmq',\n+    'secp256k1',\n+    'shapely',\n+    'twisted',\n+    'vlc',\n+    'websocket-client',\n+    'zeroconf',\n+    'zope',\n+])\n BROKEN_RECIPES_PYTHON3_CRYSTAX = set([\n     # not yet python3crystax compatible\n     'apsw', 'atom', 'boost', 'brokenrecipe', 'cdecimal', 'cherrypy',\n@@ -39,7 +89,8 @@\n     'icu',\n     # https://github.com/kivy/python-for-android/issues/1354\n     'kivent_core', 'kivent_cymunk', 'kivent_particles', 'kivent_polygen',\n-    'kivy',\n+    # system dependencies autoconf, libtool\n+    'libexpat',\n     # https://github.com/kivy/python-for-android/issues/1405\n     'libpq', 'psycopg2',\n     'netifaces',\n", "issue": "Comprehensive list of broken recipes\nWhen working on https://github.com/kivy/python-for-android/pull/1401 I realised we still have some broken recipes in the tree at least for python3crystax.\r\nEven though we don't want to have red builds for things that were already broken, we still want to have a clear status of what's broken and what's not.\r\nBasically the idea is to try to compile every single recipes and add the broken ones in the ignore list (`BROKEN_RECIPES`) from #1401. That way we can track and fix them later on meanwhile keeping a green build.\r\nI would like to address it in this task. Basically the output of the task should be a PR making the `BROKEN_RECIPES` list comprehensive. With bonus points for creating an issue per broken recipes :smile: \r\n\n", "before_files": [{"content": "from enum import Enum\n\n\nclass TargetPython(Enum):\n    python2 = 0\n    python3crystax = 1\n\n\n# recipes that currently break the build\n# a recipe could be broken for a target Python and not for the other,\n# hence we're maintaining one list per Python target\nBROKEN_RECIPES_PYTHON2 = set([])\nBROKEN_RECIPES_PYTHON3_CRYSTAX = set([\n    # not yet python3crystax compatible\n    'apsw', 'atom', 'boost', 'brokenrecipe', 'cdecimal', 'cherrypy',\n    'coverage', 'dateutil', 'enaml', 'ethash', 'kiwisolver', 'libgeos',\n    'libnacl', 'libsodium', 'libtorrent', 'libtribler', 'libzbar', 'libzmq',\n    'm2crypto', 'mysqldb', 'ndghttpsclient', 'pil', 'pycrypto', 'pyethereum',\n    'pygame', 'pyleveldb', 'pyproj', 'pyzmq', 'regex', 'shapely',\n    'simple-crypt', 'twsisted', 'vispy', 'websocket-client', 'zbar',\n    'zeroconf', 'zope',\n    # https://github.com/kivy/python-for-android/issues/550\n    'audiostream',\n    # enum34 is not compatible with Python 3.6 standard library\n    # https://stackoverflow.com/a/45716067/185510\n    'enum34',\n    # https://github.com/kivy/python-for-android/issues/1398\n    'ifaddrs',\n    # https://github.com/kivy/python-for-android/issues/1399\n    'libglob',\n    # cannot find -lcrystax\n    'cffi', 'pycryptodome', 'pymuk', 'secp256k1',\n    # https://github.com/kivy/python-for-android/issues/1404\n    'cryptography',\n    # https://github.com/kivy/python-for-android/issues/1294\n    'ffmpeg', 'ffpyplayer',\n    # https://github.com/kivy/python-for-android/pull/1307 ?\n    'gevent',\n    'icu',\n    # https://github.com/kivy/python-for-android/issues/1354\n    'kivent_core', 'kivent_cymunk', 'kivent_particles', 'kivent_polygen',\n    'kivy',\n    # https://github.com/kivy/python-for-android/issues/1405\n    'libpq', 'psycopg2',\n    'netifaces',\n    # https://github.com/kivy/python-for-android/issues/1315 ?\n    'opencv',\n    'protobuf_cpp',\n    # most likely some setup in the Docker container, because it works in host\n    'pyjnius', 'pyopenal',\n    # SyntaxError: invalid syntax (Python2)\n    'storm',\n    'vlc',\n])\nBROKEN_RECIPES = {\n    TargetPython.python2: BROKEN_RECIPES_PYTHON2,\n    TargetPython.python3crystax: BROKEN_RECIPES_PYTHON3_CRYSTAX,\n}\n# recipes that were already built will be skipped\nCORE_RECIPES = set([\n    'pyjnius', 'kivy', 'openssl', 'requests', 'sqlite3', 'setuptools',\n    'numpy', 'android', 'python2',\n])\n", "path": "ci/constants.py"}]}