]> git.sesse.net Git - vlc/commitdiff
python-ctypes: try to detect plugin path on win32 / macosx
authorOlivier Aubert <olivier.aubert@liris.cnrs.fr>
Tue, 8 Sep 2009 13:47:14 +0000 (15:47 +0200)
committerOlivier Aubert <olivier.aubert@liris.cnrs.fr>
Fri, 11 Sep 2009 07:56:43 +0000 (09:56 +0200)
bindings/python-ctypes/header.py
bindings/python-ctypes/override.py

index cc951192fa3eb2e55c6c27ce9c77b1f13e32612c..7cd29c1fe3af405047bf9a4d985206ed470fcf22 100755 (executable)
@@ -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.
index 729f5002cbd93458f2d3f5a7e371cf6173317c92..1a3968463d3ae140c5dcb5b065eddc8496eec24b 100644 (file)
@@ -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)