Subject: [bug#43654] [PATCH] Add perl-opengl

From: Andreas Enge <[email-masked]>
Date: Tue, 6 Oct 2020 00:47:00 +0200

On Tue, Oct 06, 2020 at 12:35:43AM +0200, Andreas Enge wrote:
> But it is already tomorrow, time to stop.

Did I mention that Guix is addictive?

Here is a patch that compiles and can run the examples in the subdirectory
of the same name.

If you feel like it, you could replace "cdr" by "match", and maybe test
if all of the inputs are actually needed.

Andreas

>From c6e00eac49ce859a53c1b00a6165c009f778885d Mon Sep 17 00:00:00 2001
From: Andreas Enge <[email-masked]>
Date: Tue, 6 Oct 2020 00:43:45 +0200
Subject: [PATCH] gnu: Add perl-opengl.

* gnu/packages/perl.scm (perl-opengl): New variable.

Co-authored-by: Malte Frank Gerdes <[email-masked]>
---
 gnu/packages/perl.scm | 67 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 65 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index e093a63770..24de203741 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <[email-masked]>
-;;; Copyright © 2013, 2019 Andreas Enge <[email-masked]>
+;;; Copyright © 2013, 2019, 2020 Andreas Enge <[email-masked]>
 ;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <[email-masked]>
 ;;; Copyright © 2015, 2016, 2017, 2019, 2020 Eric Bavier <[email-masked]>
 ;;; Copyright © 2015 Eric Dvorsak <[email-masked]>
@@ -27,6 +27,7 @@
 ;;; Copyright © 2020 Vincent Legoll <[email-masked]>
 ;;; Copyright © 2020 Paul Garlick <[email-masked]>
 ;;; Copyright © 2020 Nicolas Goaziou <[email-masked]>
+;;; Copyright © 2020 Malte Frank Gerdes <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,7 +75,8 @@
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages video)
-  #:use-module (gnu packages web))
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xorg))
 
 ;;;
 ;;; Please: Try to add new module packages in alphabetic order.
@@ -7870,6 +7872,67 @@ technology to store hierarchical information such as links to other
 documents within a single file.")
     (license (package-license perl))))
 
+(define-public perl-opengl
+  (package
+    (name "perl-opengl")
+    (version "0.70")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/C/CH/CHM/OpenGL-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1q3lz168q081iwl9jg21fbzhp9la79gav9mv6nmh2jab83s2l3mj"))))
+    (build-system perl-build-system)
+    (inputs `(("mesa" ,mesa) ; TODO: needed?
+              ("glu" ,glu) ; TODO: needed?
+              ("freeglut" ,freeglut) ; TODO: needed?
+              ("libxi" ,libxi)
+              ("libxmu" ,libxmu)))
+    (arguments
+     '(#:tests? #f ; test.pl fails with our empty glversion.txt, while
+                   ; the package still seems to work on the examples
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'glversion
+           ;; Building utils/glversion.txt fails, and is probably
+           ;; dependent on the graphics card in the build system.
+           ;; Replace it by a content-free file; while this breaks
+           ;; the tests, the examples in the examples/ subdirectory
+           ;; can be run.
+           (lambda _
+             (substitute* "Makefile.PL"
+               (("unlink") "# unlink") ; prevent utils/glversion.txt
+                                       ; from being deleted once...
+               (("\\.\"\\$make_ver clean\"") "")) ; ...and twice...
+             (substitute* "utils/Makefile"
+               (("all: glversion.txt") "all: ")) ; ...and thrice.
+             (call-with-output-file "utils/glversion.txt"
+               (lambda (port)
+                 (display (string-append "FREEGLUT=\nGLUT=\nVERSION=\n"
+                                         "VENDOR=\nRENDERER=\n"
+                                         "EXTENSIONS=\n")
+                          port)))
+             #t))
+         (add-before 'configure 'fix-library-flags
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "Makefile.PL"
+               (("-L/usr/local/freeglut/lib")
+                (string-concatenate
+                 (map (lambda (input)
+                        (string-append "-L" (cdr input) "/lib\n"))
+                      inputs))))
+             #t)))))
+    (home-page "https://metacpan.org/release/OpenGL")
+    (synopsis
+      "Perl bindings to the OpenGL API, GLU, and GLUT/FreeGLUT")
+    (description "The package provides Perl bindings to OpenGL, GLU
+and FreeGLUT.")
+    (license (package-license perl))))
+
 (define-public perl-package-anon
   (package
     (name "perl-package-anon")
-- 
2.28.0