aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages zwave)
  #:use-module (guix packages)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix git-download)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system node)
  #:use-module (gnu packages)
  #:use-module (gnu packages base)
  #:use-module (gnu packages node-xyz)
  #:use-module (gnu packages libusb)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages python)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages xml))

(define-public open-zwave
  (package
    (name "open-zwave")
    (version "1.6")
    (source (origin
              (method git-fetch)
              (uri (git-reference
                    (url "https://github.com/OpenZWave/open-zwave/")
                    (commit (string-append "v" version))))
              (file-name (git-file-name name version))
              (sha256
               (base32
                "0xgs4mmr0480c269wx9xkk67ikjzxkh8xcssrdx0f5xcl1lyd333"))
              (patches (search-patches "open-zwave-hidapi.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin
                  ;; Set RUNPATH on the 'MinOZW' executable.
                  (substitute* "cpp/examples/MinOZW/Makefile"
                    (("\\$\\(LDFLAGS\\)")
                     "$(LDFLAGS) -Wl,-rpath=$(PREFIX)/lib"))

                  ;; XXX: There's a bundled TinyXML under cpp/tinyxml.  Keep
                  ;; it because using our own TinyXML leads to double-free
                  ;; down the road.

                  ;; Delete the bundled HIDAPI.
                  (delete-file-recursively "cpp/hidapi")
                  #t))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (modify-phases %standard-phases
                  (delete 'configure))            ;no 'configure' script

       #:make-flags (list "BUILD=debug"
                          (string-append "PREFIX="
                                         (assoc-ref %outputs "out"))
                          (string-append "pkgconfigdir="
                                         (assoc-ref %outputs "out")
                                         "/lib/pkgconfig"))

       ;; "make check" and "make fulltest" are only concerned with checking
       ;; the device XML database and it's not entirely clear what to get from
       ;; them.
       #:tests? #f))
    (native-inputs (list which pkg-config perl ;for tests
                         perl-xml-simple))
    (inputs (list hidapi eudev))
    (home-page "http://www.openzwave.net/")
    (synopsis "Access Z-Wave devices from C++ programs")
    (description
     "OpenZWave (or OZW) is a C++ library that interfaces with selected Z-Wave
PC controllers.  It allows developers to create applications that manipulate
and respond to devices on a Z-Wave network, without requiring in-depth
knowledge of the Z-Wave protocol.")
    (license license:lgpl3+)))

(define-public node-openzwave-shared
  (package
    (name "node-openzwave-shared")
    (version "1.7.2")
    (source
     (origin
       (method git-fetch)
       (uri (git-reference
             (url "https://github.com/OpenZWave/node-openzwave-shared")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
        (base32
         "1bqqy12dzqj05j9wsh50dmn84dddmhz0gjzvd3y20z4hpy1v8rsc"))))
    (inputs
     (list open-zwave node-nan))
    (native-inputs
     (list which python pkg-config))
    (build-system node-build-system)
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         (add-before 'build 'patch-compiler
           (lambda _
             (substitute* "binding.gyp"
               (("std=c\\+\\+11")
                "std=c++17"))))
         (replace 'build
           ;; For some reason, `npm install` doesn't build
           ;; the addon automatically, so we do it explicitly here.
           ;; We go through `npx` so the npmrc file sets the
           ;; configuration up properly.
           (lambda* (#:key native-inputs inputs #:allow-other-keys)
             (invoke (search-input-file (or native-inputs inputs) "/bin/npx")
                     "--call"
                     (string-append
                      (search-input-file
                       (or native-inputs inputs)
                       "/lib/node_modules/npm/bin/node-gyp-bin/node-gyp")
                      " rebuild")))))))
    (home-page "https://github.com/OpenZWave/node-openzwave-shared")
    (synopsis "Node.js bindings for OpenZWave")
    (description
     "With the @code{node-openzwave-shared} package, you can easily control
and manage your Z-Wave devices (lights, dimmers, blinds, you name it) from
within Node.js applications.  This library also supports secure
devices (e.g. door locks) that require encryption.  All widely used Node.js
versions are supported with the help of @code{node-nan}.

This library is currently able to:
@itemize @bullet
@item
scan a Z-Wave network and report on connected devices;
@item
write values to Z-Wave nodes;
@item
monitor the network for changes;
@item
heal nodes and/or the network; and
@item
perform management tasks: add or remove nodes, replace failed nodes,
manage their group associations, etc.
@end itemize")
    (license license:isc)))
tstrap.scm?id=ac19950507e941b6263f62f4ee4e8934c1b1598e'>gnu: bootstrap: Cache the 'bootstrap-executable' origins....This reduces the number of lookups in the 'add-data-to-store' cache from 2705 to 2685 (hit rate: 10% to 9%) when running: GUIX_PROFILING=add-data-to-store-cache guix build libreoffice -nd * gnu/packages/bootstrap.scm (raw-build)[->store]: Use 'lower-object' instead of 'origin->derivation'. This allows the origin-to-derivation mapping to be cached. Ludovic Courtès 2019-10-27gnu: bootstrap: 'bootstrap-origin' preserves eq?-ness when no changes are made....This reduces the number of lookups in the 'add-data-to-store' cache from 2743 to 2705 (hit rate: 11% to 10%) when running GUIX_PROFILING=add-data-to-store-cache guix build libreoffice -nd The execution time of "guix build libreoffice -nd" goes from 1.80s to 1.78s. * gnu/packages/bootstrap.scm (bootstrap-origin): Return SOURCE unchanged when its has no patches and no snippet. Ludovic Courtès 2019-08-27gnu: bootstrap: Update to the 20190815 bootstrap binaries....These new bootstrap binaries were built using Guix at commit 9e6256ba0f32ab12d61c914a3fed879dac881762, tagged as "bootstrap-20190815". * gnu/packages/bootstrap.scm (%bootstrap-linux-libre-headers): Update the download URL. (%bootstrap-mescc-tools, %bootstrap-mes): Update the download URL and hash. Mark H Weaver 2019-08-27gnu: bootstrap: Add ftp.gnu.org to '%bootstrap-base-urls'....* gnu/packages/bootstrap.scm (%bootstrap-base-urls): Add ftp.gnu.org/gnu/guix/bootstrap. Ludovic Courtès 2019-08-22Merge branch 'master' into core-updatesMark H Weaver 2019-08-14gnu: mingw: Add x86_64 support....This patch parameterizes previously hard-coded instances of i686-w64-mingw32, adding support for x86_64-w64-mingw32. * gnu/packages/mingw.scm (make-mingw-w64): New procedure. (mingw-w64-i686, mingw-w64-x86_64): New variables. (%mingw-triplet): Remove. (mingw-w64): Update to point to 'mingw-w64-i686'. * gnu/packages/cross-base.scm (cross-gcc): Use 'libc' keyword argument if specified, instead of treating it as a boolean. (native-libc): Return the correct mingw-w64 depending on machine specified in target. * gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add "x86_64-mingw". * gnu/build/cross-toolchain.scm (set-cross-path/mingw): Replace hardcoded 'i686-w64-mingw32' instances with 'target' keyword argument. (cross-gcc-build-phases): Update accordingly; use 'target-mingw?' implementation of target checking and add commentary. * gnu/ci.scm (%cross-targets): Add "x86_64-w64-mingw32". Carl Dong 2019-07-17Merge branch 'master' into core-updatesLudovic Courtès 2019-07-15gnu: guile-bootstrap: Use the new 'derivation' calling convention....* gnu/packages/bootstrap.scm (raw-build): In 'derivation' call, distinguish #:inputs from #:sources, passing a list of <derivation-input> as #:inputs. Ludovic Courtès 2019-06-14packages: Remove 'search-bootstrap-binary'....* gnu/packages.scm (%bootstrap-binaries-path, search-bootstrap-binary): Remove. * gnu/packages/bootstrap.scm (bootstrap-executable): Export. * guix/tests.scm (bootstrap-binary-file, search-bootstrap-binary): Export. * tests/derivations.scm: Remove (gnu packages) import. * tests/grafts.scm: Likewise. * tests/guix-daemon.sh: Likewise. Ludovic Courtès 2019-06-14tests: Make builds less expensive....The switch to the reduced bootstrap broke build time assumptions made by tests, notably the assumption that GNU-MAKE-BOOT0 was cheap to build. This commit adjusts this to make these tests cheaper. * gnu/packages/bootstrap.scm (%bootstrap-inputs-for-tests): New variable. * guix/tests.scm (gnu-make-for-tests): New variable. * tests/guix-environment.sh: Use GNU-MAKE-FOR-TESTS instead of GNU-MAKE-BOOT0. Remove test with FINDUTILS-BOOT0. * tests/guix-package-net.sh (boot_make): Use GNU-MAKE-FOR-TESTS. * tests/packages.scm ("GNU Make, bootstrap"): Likewise. * tests/profiles.scm ("profile-derivation relative symlinks, two entries"): Likewise. * tests/union.scm (%bootstrap-inputs): Remove. ("union-build"): Use %BOOTSTRAP-INPUTS-FOR-TESTS instead of %BOOTSTRAP-INPUTS. Ludovic Courtès 2019-06-14gnu: bootstrap: Download the bootstrap bash, mkdir, tar, and xz binaries....* gnu/packages/bootstrap.scm (%bootstrap-executables): New variable. (bootstrap-executable-url, bootstrap-executable): New procedure. (raw-build)[->store]: Use 'run-with-store' and 'origin->derivation'. Add calls to 'derivation->output-path', and remove the list of references passed to 'add-text-to-store' for BUILDER. Augment the list of #:inputs passed to 'derivation'. (package-from-tarball): Use 'bootstrap-executable' instead of 'search-bootstrap-binary'. (%bootstrap-glibc, %bootstrap-gcc, %bootstrap-mescc-tools) (%bootstrap-mes): Likewise. * guix/scripts/environment.scm (environment-bash): Use 'bootstrap-executable' instead of 'search-bootstrap-binary'. (guix-environment): Adjust CONTAINER? case accordingly. * po/guix/POTFILES.in: Add gnu/packages/bootstrap.scm. Ludovic Courtès 2019-06-13Merge branch 'master' into core-updatesLudovic Courtès 2019-05-29gnu: Add basic support for riscv64-linux-gnu targets....* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add "riscv64-linux". * gnu/packages/linux.scm (system->linux-architecture): Add "riscv" prefix. Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> Carl Dong 2019-02-06Merge branch 'master' into core-updatesRicardo Wurmus 2019-01-07gnu: Add dummy linker for arm-elf....* gnu/packages/bootstrap.scm (glibc-dynamic-linker): Add case for arm-elf. Danny Milosavljevic 2018-12-25gnu: bootstrap: Add missing 'supported-systems', remove extra 'match'....Previously evaluation would fail for armhf, aarch64, and mips64el. * gnu/packages/bootstrap.scm (%bootstrap-mescc-tools)[supported-systems]: New field. (%bootstrap-mes)[supported-systems]: New field. [inputs]: Remove 'match' form on %current-system, which would fail on non-Intel platforms. Ludovic Courtès 2018-12-20bootstrap: srfi-43: Remove....* gnu/packages/bootstrap.scm (%bootstrap-inputs): Remove srfi-43. (srfi-43): Remove. Jan Nieuwenhuizen 2018-12-20bootstrap: bootstrap-mes: Update....Built with ef809e3ac036eccc5f9c9edd8fb661d14ae15f2f bootstrap: Add mes-boot0; decouple mes-boot from Mes. * gnu/packages/bootstrap.scm (%bootstrap-mes): Update. Jan Nieuwenhuizen 2018-12-16bootstrap: bootstrap-mes: Update....Built with 464baaf7359a5c0192ade7e435f7384a335679e6 gnu: mes: Update to a155a0a9a2d941b15c1b98e5cce787de40a8dacd. * gnu/packages/bootstrap.scm (%bootstrap-mes): Update. Jan Nieuwenhuizen 2018-12-11bootstrap: Switch to official bootstrap urls....Built with 4ae7dc7b9af64794081b1913740b97acd89c91bc gnu: Remove duplicate linux-libre-headers package from bootstrap inputs. * gnu/packages/bootstrap.scm (%bootstrap-linux-libre-headers): Switch to official bootstrap urls. (%bootstrap-mescc-tools): Likewise. (%bootstrap-mes): Likewise. Jan Nieuwenhuizen 2018-11-18bootstrap: Replace %mescc-tools-seed with %bootstrap-mescc-tools....* gnu/packages/bootstrap.scm (%mescc-tools-seed): Remove. (%bootstrap-inputs): Replace %mescc-tools-seed with %bootstrap-mescc-tools. * gnu/packages/commencement.scm (mes-boot): Likewise. (tcc-boot0): Likewise. (mescc-tools-boot): Remove. Jan Nieuwenhuizen 2018-11-18bootstrap: Update %bootstrap-mes....Built with b00a95be28b7c663cf8f82ef03b385d32ca51ae9 bootstrap: Add %bootstrap-mescc-tools. * gnu/packages/bootstrap.scm (%bootstrap-mes): Update. Jan Nieuwenhuizen 2018-11-18bootstrap: Add %bootstrap-mescc-tools....Built with a647da364ac494b409114a52e48dc0dab03cbf4f bootstrap: Add %mes-minimal. * gnu/packages/bootstrap.scm (%bootstrap-mescc-tools): New variable. Jan Nieuwenhuizen 2018-10-23bootstrap: Build with %bootstrap-mes....* gnu/packages/bootstrap.scm (%tinycc-seed): Remove. (%bootstrap-inputs): Use %bootstrap-mes instead of %mes-seed and %tinycc-seed. * gnu/packages/commencement.scm (mescc-tools-boot, mes-boot, tcc-boot0): Build with %bootstrap-mes instead of %mes-seed and %tinycc-seed. Jan Nieuwenhuizen 2018-10-23bootstrap: Add %bootstrap-mes....Built with 668ffe1e4e67e22268c9565993c6d9d7a86ae72a bootstrap: Move use-modules to top of builder. Todo: host these on ftp.gnu.org/pub/guix/... * gnu/packages/bootstrap.scm (%bootstrap-mes): New variable. Jan Nieuwenhuizen 2018-10-21bootstrap: Move use-modules to top of builder....* gnu/packages/bootstrap.scm (package-from-tarball): Move use-modules to top of builder. (%bootstrap-glibc): Likewise. (%bootstrap-gcc): Likewise. Jan Nieuwenhuizen 2018-10-07gnu: %tinycc-seed: Update for mes 0.18....* gnu/packages/bootstrap.scm (%tinycc-seed): Update for mes 0.18. Jan Nieuwenhuizen 2018-10-07gnu: %mes-seed: Update to 0.18....* gnu/packages/bootstrap.scm (%mes-seed): Update to 0.18. Jan Nieuwenhuizen 2018-10-07gnu: %mescc-tools-seed: Update to 0.5.2....* gnu/packages/bootstrap.scm (%mescc-tools-seed): Update to 0.5.2. Jan Nieuwenhuizen 2018-09-23bootstrap: Reduced Binary Seed bootstrap for x86_64 too....* gnu/packages/bootstrap.scm (%bootstrap-inputs): Replace %bootstrap-libc, %bootstrap-gcc, and %bootstrap-binutils with Mes seeds for x86_64 too. * gnu/packages/commencement.scm (tcc-boot0, tcc-boot, gcc-mesboot1, gcc-mesboot1-wrapper, m4-mesboot, %bootstrap-inputs+toolchain, libstdc++-boot0, gcc-boot0, bison-boot0): For x86_64-linux, use i686-linux glibc-dynamic-linker and Mes bootstrap settings. (gcc-boot0-intermediate-wrapped): New variable, extract from static-bash-for-glibc. (static-bash-for-glibc): Use it. (gcc-final): Copy gmp&co phase from gcc-boot0, inherit other arguments from gcc; avoid i686-linux impersonation from gcc-boot0. * doc/guix.texi (Bootstrapping, Reduced Binary Seed Bootstrap): Note x86_64-linux also as Reduced Binary Seed bootstrap. Jan Nieuwenhuizen 2018-09-23bootstrap: Replace GNU toolchain seeds with Mes for i686-linux....* gnu/packages/bootstrap.scm (%bootstrap-inputs)[i686-linux]: Replace %bootstrap-gcc, %bootstrap-binutils, %bootstrap-glibc with %mescc-tools-seed, %mes-seed, %srfi-43 and %tinycc-seed. * gnu/packages/make-bootstrap.scm (%bootstrap-tarballs)[i686-linux]: Replace gcc-tarball, binutils-tarball, glibc-tarball with %mescc-tools-seed, %mes-seed, %srfi-43 and %tinycc-seed. * gnu/packages/commencement.scm (%bootstrap-inputs+toolchain)[i686-linux]: Add glibc-mesboot, binutils-mesboot, gcc-wrapper, gcc-mesboot. (file-boot0)[i686-linux]: Disable strip-binaries?, validate-runpath?. (libstdc++-boot0)[i686-linux]: Add libtool install workarourd: copy libstdc++.so.0.0.20 from gcc-mesboot. (gcc-boot0)[i686-linux]: Add libtool install workaround: touch libcc1.so.0.0.0, libcc1plugin.so.0.0.0. (perl-boot0): Disable validate-runpath?. (bison-boot0)[i686-linux]: Do not use ranlib -D. Jan Nieuwenhuizen 2018-09-23bootstrap: Add Mes bootstrap seeds....* gnu/packages/bootstrap.scm (%mescc-tools-seed, %mes-seed, %tinycc-seed, %srfi-43): New variable. Jan Nieuwenhuizen 2018-09-23guix: package-from-tarball: Allow PROGRAM-TO-TEST to be #f....* gnu/packages/bootstrap.scm (package-from-tarball): Allow PROGRAM-TO-TEST to be #f. Jan Nieuwenhuizen 2018-09-22bootstrap: %bootstrap-inputs: Wrap input lists into thunks....* gnu/packages/bootstrap.scm (%bootstrap-inputs): Change to procedure. Update users; prepares for Mes bootstrap. * gnu/packages/commencement.scm (%boot0-inputs, %boot1-inputs, %boot2-inputs, %boot3-inputs, %boot4-inputs, %boot5-inputs, %boot-6-inputs): Change to procedure. Update users. * tests/builders.scm (%bootstrap-inputs, %bootstrap-search-paths): Make a procedure, filter on package?. Update users. Jan Nieuwenhuizen