about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilipp Middendorf <middendorf@plapadoo.de>2018-03-08 10:38:26 +0100
committerPhilipp Middendorf <middendorf@plapadoo.de>2018-05-21 09:50:08 +0200
commitad399afd6f3af6e21924919f136e776ae1b42d3a (patch)
tree72998a08d345d183bc25acb91e334761d84598e8
parent80bfd2f371d64d0d81c0820166f98f49a5501988 (diff)
downloadnixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.tar
nixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.tar.gz
nixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.tar.bz2
nixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.tar.lz
nixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.tar.xz
nixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.tar.zst
nixlib-ad399afd6f3af6e21924919f136e776ae1b42d3a.zip
pythonPackages.pysdl2: init at 0.9.6
-rw-r--r--pkgs/development/python-modules/pysdl2/PySDL2-dll.patch119
-rw-r--r--pkgs/development/python-modules/pysdl2/default.nix41
-rw-r--r--pkgs/top-level/python-packages.nix2
3 files changed, 162 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/pysdl2/PySDL2-dll.patch b/pkgs/development/python-modules/pysdl2/PySDL2-dll.patch
new file mode 100644
index 000000000000..ca723a0e5739
--- /dev/null
+++ b/pkgs/development/python-modules/pysdl2/PySDL2-dll.patch
@@ -0,0 +1,119 @@
+diff -ru PySDL2-0.9.6-old/sdl2/dll.py PySDL2-0.9.6/sdl2/dll.py
+--- PySDL2-0.9.6-old/sdl2/dll.py	2018-03-08 10:18:37.583471745 +0100
++++ PySDL2-0.9.6/sdl2/dll.py	2018-03-08 10:20:06.705517520 +0100
+@@ -45,29 +45,31 @@
+     """Function wrapper around the different DLL functions. Do not use or

+     instantiate this one directly from your user code.

+     """

+-    def __init__(self, libinfo, libnames, path=None):

+-        self._dll = None

+-        foundlibs = _findlib(libnames, path)

+-        dllmsg = "PYSDL2_DLL_PATH: %s" % (os.getenv("PYSDL2_DLL_PATH") or "unset")

+-        if len(foundlibs) == 0:

+-            raise RuntimeError("could not find any library for %s (%s)" %

+-                               (libinfo, dllmsg))

+-        for libfile in foundlibs:

+-            try:

+-                self._dll = CDLL(libfile)

+-                self._libfile = libfile

+-                break

+-            except Exception as exc:

+-                # Could not load the DLL, move to the next, but inform the user

+-                # about something weird going on - this may become noisy, but

+-                # is better than confusing the users with the RuntimeError below

+-                warnings.warn(repr(exc), DLLWarning)

+-        if self._dll is None:

+-            raise RuntimeError("found %s, but it's not usable for the library %s" %

+-                               (foundlibs, libinfo))

+-        if path is not None and sys.platform in ("win32",) and \

+-            path in self._libfile:

+-            os.environ["PATH"] = "%s;%s" % (path, os.environ["PATH"])

++    def __init__(self, libfile):

++        self._dll = CDLL(libfile)

++        self._libfile = libfile

++        # self._dll = None

++        # foundlibs = _findlib(libnames, path)

++        # dllmsg = "PYSDL2_DLL_PATH: %s" % (os.getenv("PYSDL2_DLL_PATH") or "unset")

++        # if len(foundlibs) == 0:

++        #     raise RuntimeError("could not find any library for %s (%s)" %

++        #                        (libinfo, dllmsg))

++        # for libfile in foundlibs:

++        #     try:

++        #         self._dll = CDLL(libfile)

++        #         self._libfile = libfile

++        #         break

++        #     except Exception as exc:

++        #         # Could not load the DLL, move to the next, but inform the user

++        #         # about something weird going on - this may become noisy, but

++        #         # is better than confusing the users with the RuntimeError below

++        #         warnings.warn(repr(exc), DLLWarning)

++        # if self._dll is None:

++        #     raise RuntimeError("found %s, but it's not usable for the library %s" %

++        #                        (foundlibs, libinfo))

++        # if path is not None and sys.platform in ("win32",) and \

++        #     path in self._libfile:

++        #     os.environ["PATH"] = "%s;%s" % (path, os.environ["PATH"])

+ 

+     def bind_function(self, funcname, args=None, returns=None, optfunc=None):

+         """Binds the passed argument and return value types to the specified

+@@ -110,7 +112,7 @@
+     return

+ 

+ try:

+-    dll = DLL("SDL2", ["SDL2", "SDL2-2.0"], os.getenv("PYSDL2_DLL_PATH"))

++    dll = DLL("SDL2")

+ except RuntimeError as exc:

+     raise ImportError(exc)

+ 

+diff -ru PySDL2-0.9.6-old/sdl2/sdlgfx.py PySDL2-0.9.6/sdl2/sdlgfx.py
+--- PySDL2-0.9.6-old/sdl2/sdlgfx.py	2018-03-08 10:18:37.585471769 +0100
++++ PySDL2-0.9.6/sdl2/sdlgfx.py	2018-03-08 10:20:06.705517520 +0100
+@@ -34,8 +34,7 @@
+            ]

+ 

+ try:

+-    dll = DLL("SDL2_gfx", ["SDL2_gfx", "SDL2_gfx-1.0"],

+-              os.getenv("PYSDL2_DLL_PATH"))

++    dll = DLL("SDL2_gfx")

+ except RuntimeError as exc:

+     raise ImportError(exc)

+ 

+diff -ru PySDL2-0.9.6-old/sdl2/sdlimage.py PySDL2-0.9.6/sdl2/sdlimage.py
+--- PySDL2-0.9.6-old/sdl2/sdlimage.py	2018-03-08 10:18:37.585471769 +0100
++++ PySDL2-0.9.6/sdl2/sdlimage.py	2018-03-08 10:20:06.705517520 +0100
+@@ -26,8 +26,7 @@
+            ]

+ 

+ try:

+-    dll = DLL("SDL2_image", ["SDL2_image", "SDL2_image-2.0"],

+-              os.getenv("PYSDL2_DLL_PATH"))

++    dll = DLL("SDL2_image")

+ except RuntimeError as exc:

+     raise ImportError(exc)

+ 

+diff -ru PySDL2-0.9.6-old/sdl2/sdlmixer.py PySDL2-0.9.6/sdl2/sdlmixer.py
+--- PySDL2-0.9.6-old/sdl2/sdlmixer.py	2018-03-08 10:18:37.585471769 +0100
++++ PySDL2-0.9.6/sdl2/sdlmixer.py	2018-03-08 10:20:27.415758478 +0100
+@@ -50,8 +50,7 @@
+           ]

+ 

+ try:

+-    dll = DLL("SDL2_mixer", ["SDL2_mixer", "SDL2_mixer-2.0"],

+-              os.getenv("PYSDL2_DLL_PATH"))

++    dll = DLL("SDL2_mixer")

+ except RuntimeError as exc:

+     raise ImportError(exc)

+ 

+diff -ru PySDL2-0.9.6-old/sdl2/sdlttf.py PySDL2-0.9.6/sdl2/sdlttf.py
+--- PySDL2-0.9.6-old/sdl2/sdlttf.py	2018-03-08 10:18:37.585471769 +0100
++++ PySDL2-0.9.6/sdl2/sdlttf.py	2018-03-08 10:20:06.705517520 +0100
+@@ -38,8 +38,7 @@
+           ]

+ 

+ try:

+-    dll = DLL("SDL2_ttf", ["SDL2_ttf", "SDL2_ttf-2.0"],

+-              os.getenv("PYSDL2_DLL_PATH"))

++    dll = DLL("SDL2_ttf")

+ except RuntimeError as exc:

+     raise ImportError(exc)

+ 

diff --git a/pkgs/development/python-modules/pysdl2/default.nix b/pkgs/development/python-modules/pysdl2/default.nix
new file mode 100644
index 000000000000..6681b1b199ad
--- /dev/null
+++ b/pkgs/development/python-modules/pysdl2/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchPypi, buildPythonPackage, fetchurl, SDL2, SDL2_ttf, SDL2_image, SDL2_gfx, SDL2_mixer, pyopengl }:
+
+buildPythonPackage rec {
+  pname = "PySDL2";
+  version = "0.9.6";
+  # The tests use OpenGL using find_library, which would have to be
+  # patched; also they seem to actually open X windows and test stuff
+  # like "screensaver disabling", which would have to be cleverly
+  # sandboxed. Disable for now.
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08r1v9wdq8pzds4g3sng2xgh1hlzfs2z7qgy5a6b0xrs96swlamm";
+  };
+
+  # Deliberately not in propagated build inputs; users can decide
+  # which library they want to include.
+  buildInputs = [ SDL2_ttf SDL2_image SDL2_gfx SDL2_mixer ];
+  propagatedBuildInputs = [ SDL2 ];
+  patches = [ ./PySDL2-dll.patch ];
+  postPatch = ''
+    substituteInPlace sdl2/dll.py --replace \
+      "DLL(\"SDL2\")" "DLL('${SDL2}/lib/libSDL2${stdenv.hostPlatform.extensions.sharedLibrary}')"
+    substituteInPlace sdl2/sdlttf.py --replace \
+      "DLL(\"SDL2_ttf\")" "DLL('${SDL2_ttf}/lib/libSDL2_ttf${stdenv.hostPlatform.extensions.sharedLibrary}')"
+    substituteInPlace sdl2/sdlimage.py --replace \
+      "DLL(\"SDL2_image\")" "DLL('${SDL2_image}/lib/libSDL2_image${stdenv.hostPlatform.extensions.sharedLibrary}')"
+    substituteInPlace sdl2/sdlgfx.py --replace \
+     "DLL(\"SDL2_gfx\")" "DLL('${SDL2_gfx}/lib/libSDL2_gfx${stdenv.hostPlatform.extensions.sharedLibrary}')"
+    substituteInPlace sdl2/sdlmixer.py --replace \
+     "DLL(\"SDL2_mixer\")" "DLL('${SDL2_mixer}/lib/libSDL2_mixer${stdenv.hostPlatform.extensions.sharedLibrary}')"
+  '';
+
+  meta = {
+    description = "A wrapper around the SDL2 library and as such similar to the discontinued PySDL project";
+    homepage = https://github.com/marcusva/py-sdl2;
+    license = lib.licenses.publicDomain;
+    maintainers = with lib.maintainers; [ pmiddend ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 3be39ded656e..204a49e63b48 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -18194,6 +18194,8 @@ EOF
   pyowm = callPackage ../development/python-modules/pyowm { };
 
   prometheus_client = callPackage ../development/python-modules/prometheus_client { };
+
+  pysdl2 = callPackage ../development/python-modules/pysdl2 { };
 });
 
 in fix' (extends overrides packages)