Subject: [bug#49970] [PATCH] gnu: Add librealsense.

From: Liliana Marie Prikler <[email-masked]>
Date: Sat, 18 Sep 2021 14:02:54 +0200

Hi Petr,

Am Samstag, den 18.09.2021, 11:47 +0000 schrieb phodina:
> Hi Liliana,
> 
> thanks for the comment! My appology for the licence.
> --8<---------------cut here---------------start------------->8---
> * gnu/packages/video.scm (librealsense): New variable.
> * gnu/packages/patches/librealsense-remove-network-
> connectivity.patch: New file.
Looking at this patch, it only seems to disable some warnings, which
frankly we can choose to ignore.  Is this really required to build
librealsense?

> diff --git a/gnu/packages/patches/librealsense-remove-network-
> connectivity.patch b/gnu/packages/patches/librealsense-remove-
> network-connectivity.patch
> new file mode 100644
> index 0000000000..73926587ff
> --- /dev/null
> +++ b/gnu/packages/patches/librealsense-remove-network-
> connectivity.patch
> @@ -0,0 +1,68 @@
> +From cfc87289d7636f439e2b91d88e35430949b29c0f Mon Sep 17 00:00:00
> 2001
> +From: Petr Hodina <[email-masked]>
> +Date: Sat, 31 Jul 2021 05:58:40 +0200
> +Subject: [PATCH] Remove network connectivity
> +
> +
> +diff --git a/CMakeLists.txt b/CMakeLists.txt
> +index 0c15d9510..a4d891444 100644
> +--- a/CMakeLists.txt
> ++++ b/CMakeLists.txt
> +@@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.1.0)
> + project(librealsense2 LANGUAGES CXX C)
> +
> + include(CMake/lrs_options.cmake)
> +-include(CMake/connectivity_check.cmake)
> +
> + #Deprecation message, should be removed in future releases
> + if(${FORCE_LIBUVC} OR ${FORCE_WINUSB_UVC} OR
> ${ANDROID_USB_HOST_UVC})
> +@@ -12,14 +11,12 @@ if(${FORCE_LIBUVC} OR ${FORCE_WINUSB_UVC} OR
> ${ANDROID_USB_HOST_UVC})
> + endif()
> +
> + # Checking Internet connection, as TM2 needs to download the FW
> from amazon cloud
> +-if(BUILD_WITH_TM2 AND NOT INTERNET_CONNECTION)
> +-    message(WARNING "No internet connection, disabling
> BUILD_WITH_TM2")
> ++if(BUILD_WITH_TM2)
> +     set(BUILD_WITH_TM2 OFF)
> + endif()
> +
> + # Checking Internet connection, as DEPTH CAM needs to download the
> FW from amazon cloud
> +-if(IMPORT_DEPTH_CAM_FW AND NOT INTERNET_CONNECTION)
> +-    message(WARNING "No internet connection, disabling
> IMPORT_DEPTH_CAM_FW")
> ++if(IMPORT_DEPTH_CAM_FW)
> +     set(IMPORT_DEPTH_CAM_FW OFF)
> + endif()
> +
> +diff --git a/common/fw/CMakeLists.txt b/common/fw/CMakeLists.txt
> +index 32b1dd29a..9961e4d1d 100644
> +--- a/common/fw/CMakeLists.txt
> ++++ b/common/fw/CMakeLists.txt
> +@@ -6,8 +6,6 @@ project(fw)
> +
> + file(READ "firmware-version.h" ver)
> +
> +-message(STATUS "Fetching recommended firmwares:")
> +-
> + set(REALSENSE_FIRMWARE_URL "https://librealsense.intel.com" CACHE
> STRING
> +     "URL to download firmware binaries from")
> +
> +@@ -51,16 +49,6 @@ set_target_properties (${PROJECT_NAME} PROPERTIES
> FOLDER Resources)
> +
> + function(target_binary url version sha1 symbol ext)
> +   set(binary "${CMAKE_CURRENT_BINARY_DIR}/${symbol}-
> ${version}${ext}")
> +-  message(STATUS "${url}/${symbol}-${version}${ext}")
> +-  file(DOWNLOAD "${url}/${symbol}-${version}${ext}" "${binary}"
> +-       EXPECTED_HASH SHA1=${sha1}
> +-       STATUS status)
> +-  list(GET status 0 error_code)
> +-  if (NOT ${error_code} EQUAL 0)
> +-    message(FATAL_ERROR "Download firmwnare (${status}) - ${url}")
> +-  else()
> +-    message(STATUS "Download firmware ${status} for ${symbol}-
> ${version}${ext}")
> +-  endif()
> +   string(TOUPPER ${symbol} SYMBOL)
> +   string(REPLACE "." "," version_commas ${version})
> +   string(REPLACE "\\" "\\\\" binary_escaped "${binary}")
> +--
> +2.32.0
> +
> diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
> index 1b9179c6a8..ee783338f4 100644
> --- a/gnu/packages/video.scm
> +++ b/gnu/packages/video.scm
> @@ -53,6 +53,7 @@
>  ;;; Copyright © 2021 Maxim Cournoyer <[email-masked]>
>  ;;; Copyright © 2020 Hartmut Goebel <[email-masked]>
>  ;;; Copyright © 2021 Raghav Gururajan <[email-masked]>
> +;;; Copyright © 2021 Petr Hodina <[email-masked]>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -145,6 +146,7 @@
>    #:use-module (gnu packages mp3)
>    #:use-module (gnu packages ncurses)
>    #:use-module (gnu packages networking)
> +  #:use-module (gnu packages ninja)
>    #:use-module (gnu packages ocr)
>    #:use-module (gnu packages pcre)
>    #:use-module (gnu packages perl)
> @@ -577,6 +579,54 @@ other software.")
>        ;; Library.
>        license:lgpl3+))))
> 
> +(define-public librealsense
> + (package
> +  (name "librealsense")
> +  (version "2.47.0")
> +  (source (origin
> +           (method git-fetch)
> +           (uri (git-reference
> +                 (url "
> https://github.com/IntelRealSense/librealsense")
> +                 (commit (string-append "v" version))))
> +           (patches
> +            (search-patches "librealsense-remove-network-
> connectivity.patch"))
> +           (file-name (git-file-name name version))
> +           (modules '((guix build utils)))
> +            (sha256
> +             (base32
> +              "1jshhcnvbaa3xm5jr1s5m6z62wn1cspb7wkfdc1w88kp9j02ss8w"
> ))))
> +  (build-system cmake-build-system)
> +  (arguments
> +       `(#:tests? #f ; tests require camera hardware
> +         #:configure-flags (list "-DBUILD_EXAMPLES=ON"
> +                                 "-DBUILD_GRAPHICAL_EXAMPLES=ON"
> +                                 "-DINTERNET_CONNECTION=OFF"
> +                                 "-DCHECK_FOR_UPDATES=OFF")
> +         #:phases
> +           (modify-phases %standard-phases
> +            ;; more convenient than manually invoking
> setup_udev_rules.sh
> +            ;; and substituting the path in the script
> +            (add-after 'unpack 'copy-udev-rules
> +              (lambda* (#:key outputs #:allow-other-keys)
> +               (let ((out (string-append (assoc-ref outputs "out")
> +                            "/lib/udev/rules.d")))
> +               (mkdir-p (string-append out))
> +               (copy-file "config/99-realsense-libusb.rules"
> +                          (string-append out
> +                           "/99-realsense-libusb.rules"))))))))
> +  (native-inputs `(("pkg-config" ,pkg-config)
> +                   ("ninja" ,ninja)))
> +  (inputs `(("glfw" ,glfw)
> +            ("gtk+" ,gtk+)
> +            ("libusb" ,libusb)
> +            ("glu" ,glu)))
> +  (synopsis "Intel RealSense SDK")
> +  (description "Intel RealSense SDK 2.0 is a cross-platform library
> for
> +Intel RealSense depth cameras (D400 & L500 series and the SR300) and
> the
> +T265 tracking camera.")
> +  (home-page "https://github.com/IntelRealSense/librealsense")
> +  (license license:asl2.0)))
> +
>  (define-public tslib
>    (package
>      (name "tslib")
librealsense also seems to bundle a bunch of software in its third-
party directory.  How much of that could we unbundle?