diff --git a/kivy/__init__.py b/kivy/__init__.py index 111348d1c..59abfa692 100644 --- a/kivy/__init__.py +++ b/kivy/__init__.py @@ -35,6 +35,7 @@ import shutil from getopt import getopt, GetoptError from os import environ, mkdir, pathsep from os.path import dirname, join, basename, exists, expanduser, isdir +import pkgutil from kivy.logger import Logger, LOG_LEVELS from kivy.utils import platform @@ -251,6 +252,16 @@ kivy_usermodules_dir = '' #: Kivy user extensions directory kivy_userexts_dir = '' +# if there are deps, import them so they can do their magic. +try: + import kivy.deps + for importer, modname, ispkg in pkgutil.iter_modules(kivy.deps.__path__): + if not ispkg: + continue + importer.find_module(modname).load_module(modname) +except ImportError: + pass + # Don't go further if we generate documentation if any(name in sys.argv[0] for name in ('sphinx-build', 'autobuild.py')): diff --git a/setup.py b/setup.py index 17bb381cb..5aeba6a04 100644 --- a/setup.py +++ b/setup.py @@ -41,10 +41,10 @@ MAX_CYTHON_VERSION = LooseVersion(MAX_CYTHON_STRING) CYTHON_UNSUPPORTED = () -def getoutput(cmd): +def getoutput(cmd, env=None): import subprocess p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + stderr=subprocess.PIPE, env=env) p.wait() if p.returncode: # if not returncode == 0 print('WARNING: A problem occured while running {0} (code {1})\n' @@ -58,8 +58,15 @@ def getoutput(cmd): def pkgconfig(*packages, **kw): flag_map = {'-I': 'include_dirs', '-L': 'library_dirs', '-l': 'libraries'} + lenviron = None + pconfig = join(dirname(sys.executable), 'libs', 'pkgconfig') + + if isdir(pconfig): + lenviron = environ.copy() + lenviron['PKG_CONFIG_PATH'] = '{};{}'.format( + environ.get('PKG_CONFIG_PATH', ''), pconfig) cmd = 'pkg-config --libs --cflags {}'.format(' '.join(packages)) - results = getoutput(cmd).split() + results = getoutput(cmd, lenviron).split() for token in results: ext = token[:2].decode('utf-8') flag = flag_map.get(ext) @@ -548,18 +555,21 @@ def determine_sdl2(): sdl2_path = environ.get('KIVY_SDL2_PATH', None) - if sdl2_flags and not sdl2_path: - return sdl2_flags - # no pkgconfig info, or we want to use a specific sdl2 path, so perform # manual configuration flags['libraries'] = ['SDL2', 'SDL2_ttf', 'SDL2_image', 'SDL2_mixer'] split_chr = ';' if platform == 'win32' else ':' sdl2_paths = sdl2_path.split(split_chr) if sdl2_path else [] + inc_paths = sdl2_paths + if not sdl2_paths: + sdl_inc = join(dirname(sys.executable), 'include', 'SDL2') + if isdir(sdl_inc): + sdl2_paths = [sdl_inc] + sdl2_paths.extend(['/usr/local/include/SDL2', '/usr/include/SDL2']) + flags['include_dirs'] = ( - sdl2_paths if sdl2_paths else - ['/usr/local/include/SDL2', '/usr/include/SDL2']) + sdl2_paths if sdl2_paths else sdl2_paths) flags['extra_link_args'] = [] flags['extra_compile_args'] = [] @@ -864,6 +874,7 @@ setup( 'kivy.core.text', 'kivy.core.video', 'kivy.core.window', + 'kivy.deps', 'kivy.effects', 'kivy.ext', 'kivy.graphics',