From f6cfac8691fba84ef994da6124fd79877e8494e3 Mon Sep 17 00:00:00 2001 From: Olivier Aubert Date: Tue, 8 Sep 2009 15:47:14 +0200 Subject: [PATCH] python-ctypes: try to detect plugin path on win32 / macosx --- bindings/python-ctypes/header.py | 28 +++++++++++++++++++--------- bindings/python-ctypes/override.py | 8 ++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/bindings/python-ctypes/header.py b/bindings/python-ctypes/header.py index cc951192fa..7cd29c1fe3 100755 --- a/bindings/python-ctypes/header.py +++ b/bindings/python-ctypes/header.py @@ -39,42 +39,52 @@ import sys build_date="This will be replaced by the build date" +# Used for win32 and MacOS X +detected_plugin_path=None + if sys.platform == 'linux2': dll=ctypes.CDLL('libvlc.so') elif sys.platform == 'win32': import ctypes.util import os - plugin_path=None + detected_plugin_path=None path=ctypes.util.find_library('libvlc.dll') if path is None: # Try to use registry settings import _winreg - plugin_path_found = None + detected_plugin_path_found = None subkey, name = 'Software\\VideoLAN\\VLC','InstallDir' for hkey in _winreg.HKEY_LOCAL_MACHINE, _winreg.HKEY_CURRENT_USER: try: reg = _winreg.OpenKey(hkey, subkey) - plugin_path_found, type_id = _winreg.QueryValueEx(reg, name) + detected_plugin_path_found, type_id = _winreg.QueryValueEx(reg, name) _winreg.CloseKey(reg) break except _winreg.error: pass - if plugin_path_found: - plugin_path = plugin_path_found + if detected_plugin_path_found: + detected_plugin_path = detected_plugin_path_found else: # Try a standard location. p='c:\\Program Files\\VideoLAN\\VLC\\libvlc.dll' if os.path.exists(p): - plugin_path=os.path.dirname(p) - os.chdir(plugin_path) + detected_plugin_path=os.path.dirname(p) + os.chdir(detected_plugin_path) # If chdir failed, this will not work and raise an exception path='libvlc.dll' else: - plugin_path=os.path.dirname(path) + detected_plugin_path=os.path.dirname(path) dll=ctypes.CDLL(path) elif sys.platform == 'darwin': # FIXME: should find a means to configure path - dll=ctypes.CDLL('/Applications/VLC.app/Contents/MacOS/lib/libvlc.2.dylib') + d='/Applications/VLC.app' + import os + if os.path.exists(d): + dll=ctypes.CDLL(d+'/Contents/MacOS/lib/libvlc.2.dylib') + detected_plugin_path=d+'/Contents/MacOS/modules' + else: + # Hope some default path is set... + dll=ctypes.CDLL('libvlc.2.dylib') # # Generated enum types. diff --git a/bindings/python-ctypes/override.py b/bindings/python-ctypes/override.py index 729f5002cb..1a3968463d 100644 --- a/bindings/python-ctypes/override.py +++ b/bindings/python-ctypes/override.py @@ -24,6 +24,10 @@ class Instance: if p and isinstance(p[0], MediaControl): return p[0].get_instance() else: + if not p and detected_plugin_path is not None: + # No parameters passed. Under win32 and MacOS, specify + # the detected_plugin_path if present. + p=[ 'vlc', '--plugin-path='+ detected_plugin_path ] e=VLCException() return libvlc_new(len(p), p, e) @@ -74,6 +78,10 @@ class MediaControl: e=MediaControlException() return mediacontrol_new_from_instance(p[0], e) else: + if not p and detected_plugin_path is not None: + # No parameters passed. Under win32 and MacOS, specify + # the detected_plugin_path if present. + p=[ 'vlc', '--plugin-path='+ detected_plugin_path ] e=MediaControlException() return mediacontrol_new(len(p), p, e) -- 2.39.2