diff mbox series

[bug#41294] gnu: Add libfreenect.

Message ID zgYthp30GnrnAddRXlGZx4viwqwoXH-IAl4YyIpaZPVi9RGq33qbQ6Sg1r3Kg4QnVYCmwY0xpoxJVyv8xhARPY-cHsbdsoA1gfKKr9k-VL0=@elenq.tech
State Accepted
Headers show
Series [bug#41294] gnu: Add libfreenect. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job

Commit Message

Ekaitz Zarraga May 17, 2020, 12:15 p.m. UTC
Hi,
I came up with this. It's just a diff because I'd like to improve something.

There's the same lambda sent to all the packages that need to disable sources compilation but I'm not able to create it in a function that I send later to all those.

How can I do that? I'm getting `Unknown object` errors.

I tried to create a new function with `define*` with the same body the lambda has. Quasiquote the `arguments` and unquote the function there.
Nothing. There's some kind of weird magic I'm not getting.


+library")))

Comments

宋文武 May 19, 2020, 1:26 p.m. UTC | #1
Ekaitz Zarraga <ekaitz@elenq.tech> writes:

> Hi,
> I came up with this. It's just a diff because I'd like to improve something.
>
> There's the same lambda sent to all the packages that need to disable
> sources compilation but I'm not able to create it in a function that I
> send later to all those.
>
> How can I do that? I'm getting `Unknown object` errors.
>
> I tried to create a new function with `define*` with the same body the
> lambda has. Quasiquote the `arguments` and unquote the function there.
> Nothing. There's some kind of weird magic I'm not getting.
>

Hello, I don't know the whole detail too, but to build a package, guix likely:

- Load and eval the package module, to get the package object.  The
  'arguments' field is a list.

- Convert this package object to a derivation, and write it in store as
  a file (/gnu/store/*.drv).  Where 'arguments' being part of the
  builder, serialize as string to the file, it dosen't do complex things
  for procedure bindings, only write their string descriptions...  So
  when the builder file is loaded, you get `Unknown object` errors.


Here, to avoid duplicating the code, you can:

1. Unquote list value into `arguments`. (eg: 'asdf-substitutions' in lisp.scm)

2. Use `(package-arguments libfreenect-examples)` with
`substitute-keyword-arguments` to reuse arguments, but modify
`configure-flags` etc. (eg: qtx11extras)


The build system can use 'imported-modules' to make a set of guile
modules (which can contains useful procedures, etc.) available to the
builder, but thas's overkill to be used here...


>
> diff --git a/gnu/packages/openkinect.scm b/gnu/packages/openkinect.scm
> new file mode 100644
> index 0000000000..1aebb34384
> --- /dev/null
> +++ b/gnu/packages/openkinect.scm
> @@ -0,0 +1,137 @@
> +(define-module (gnu packages openkinect)
> +  #:use-module (guix packages)
> +  #:use-module (guix git-download)
> +  #:use-module (guix build-system cmake)
> +  #:use-module ((guix licenses) #:prefix license:)
> +  #:use-module (gnu packages pkg-config)
> +  #:use-module (gnu packages libusb)
> +  #:use-module (gnu packages python)
> +  #:use-module (gnu packages python-xyz)
> +  #:use-module (gnu packages gl)
> +  #:use-module (gnu packages pkg-config)
> +  #:use-module (gnu packages image-processing))
> +
> +(define-public libfreenect
> +  (let ((version "0.6.1"))
> +    (package
> +      (name "libfreenect")
> +      (version version)
> +      (source (origin
> +                (method git-fetch)
> +                (uri (git-reference
> +                      (url "https://github.com/OpenKinect/libfreenect")
> +                      (commit (string-append "v" version))))
> +                (sha256
> +                 (base32 "0was1va167rqshmpn382h36yyprpfi9cwillb6ylppmnfdrfrhrr"))))
> +      (build-system cmake-build-system)
> +      (arguments
> +       '(#:tests? #f ; Project has not tests
"has not tests" sounds wrong be me, maybe: "package has no tests".

Otherwise, look good to me!
diff mbox series

Patch

diff --git a/gnu/packages/openkinect.scm b/gnu/packages/openkinect.scm
new file mode 100644
index 0000000000..1aebb34384
--- /dev/null
+++ b/gnu/packages/openkinect.scm
@@ -0,0 +1,137 @@ 
+(define-module (gnu packages openkinect)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages image-processing))
+
+(define-public libfreenect
+  (let ((version "0.6.1"))
+    (package
+      (name "libfreenect")
+      (version version)
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/OpenKinect/libfreenect")
+                      (commit (string-append "v" version))))
+                (sha256
+                 (base32 "0was1va167rqshmpn382h36yyprpfi9cwillb6ylppmnfdrfrhrr"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:tests? #f ; Project has not tests
+         #:configure-flags
+         '("-DBUILD_FAKENECT=ON"
+           "-DBUILD_CPP=ON"
+           "-DBUILD_EXAMPLES=OFF" ; Available in libfreenect-examples
+           "-DBUILD_CV=OFF"       ; Available in libfreenect-cv
+           "-DBUILD_PYTHON=OFF"   ; Available in libfreenect-python
+           "-DBUILD_C_SYNC=ON")
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-udev-rules
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (rules-out (string-append out "/lib/udev/rules.d")))
+                 (install-file "../source/platform/linux/udev/51-kinect.rules"
+                               (string-append rules-out "51-kinect.rules"))
+                 #t))))))
+      (native-inputs
+       `(("pkg-config" ,pkg-config)))
+      (inputs
+       `(("libusb" ,libusb)))
+      (synopsis "Drivers and libraries for the Xbox Kinect device")
+      (description "libfreenect is a userspace driver for the Microsoft Kinect.
+It supports: RGB and Depth Images, Motors, Accelerometer, LED and Audio.")
+      (home-page "https://openkinect.org/")
+      (license license:gpl2+))))
+
+
+
+(define-public libfreenect-examples
+  (package
+    (inherit libfreenect)
+    (name "libfreenect-examples")
+    (inputs
+     `(("libfreenect" ,libfreenect)
+       ("glut" ,freeglut)))
+    (arguments
+     `(#:tests? #f ; Project has not tests
+       #:configure-flags '("-DBUILD_EXAMPLES=ON"
+                           "-DBUILD_FAKENECT=OFF"
+                           "-DBUILD_CPP=OFF"
+                           "-DBUILD_C_SYNC=OFF"
+                           "-DBUILD_CV=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         ;; Sources are already compiled in libfreenect input
+         (add-after 'unpack 'disable-sources
+                    (lambda* (#:key outputs #:allow-other-keys)
+                             (substitute* "CMakeLists.txt"
+                               ((".*libusb.*") "")
+                               (("add_subdirectory \\(src\\)") "")
+                               ((".*libfreenectConfig.cmake.*") "")))
+                    ))))
+    (synopsis "Examples for libfreenect, the Xbox Kinect device library")))
+
+(define-public libfreenect-cv
+  (package
+    (inherit libfreenect)
+    (name "libfreenect-cv")
+    (inputs
+     `(("libfreenect" ,libfreenect)
+       ("opencv" ,opencv)))
+    (arguments
+     '(#:tests? #f ; Project has not tests
+       #:configure-flags '("-DBUILD_EXAMPLES=OFF"
+                           "-DBUILD_FAKENECT=OFF"
+                           "-DBUILD_CPP=OFF"
+                           "-DBUILD_C_SYNC=OFF"
+                           "-DBUILD_CV=ON")
+       #:phases
+       (modify-phases %standard-phases
+         ;; Sources are already compiled in libfreenect input
+         (add-after 'unpack 'disable-sources
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               ((".*libusb.*") "")
+               (("add_subdirectory \\(src\\)") "")
+               ((".*libfreenectConfig.cmake.*") "")))))))
+    (synopsis "OpenCV wrapper for libfreenect, the Xbox Kinect device
+library")))
+
+(define-public libfreenect-python
+  (package
+    (inherit libfreenect)
+    (name "libfreenect-python")
+    (native-inputs
+     `(("python-cython" ,python-cython)))
+    (inputs
+     `(("libfreenect" ,libfreenect)))
+    (propagated-inputs
+     `(("python" ,python)
+       ("python-numpy" ,python-numpy)))
+    (arguments
+     '(#:tests? #f ; Project has not tests
+       #:configure-flags '("-DBUILD_EXAMPLES=OFF"
+                           "-DBUILD_FAKENECT=OFF"
+                           "-DBUILD_CPP=OFF"
+                           "-DBUILD_C_SYNC=OFF"
+                           "-DBUILD_CV=OFF"
+                           "-DBUILD_PYTHON3=ON")
+       #:phases
+       (modify-phases %standard-phases
+         ;; Sources are already compiled in libfreenect input
+         (add-after 'unpack 'disable-sources
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               ((".*libusb.*") "")
+               (("add_subdirectory \\(src\\)") "")
+               ((".*libfreenectConfig.cmake.*") "")))))))
+    (synopsis "Python wrapper for libfreenect, the Xbox Kinect device