[1/2] gnu: Add teensy-loader-cli.

Message ID 1464535684-5751-1-git-send-email-h.goebel@crazy-compilers.com
State New
Headers

Commit Message

Hartmut Goebel May 29, 2016, 3:28 p.m. UTC
  * gnu/packages/flashing-tools.scm (teensy-loader-cli): New variable.
---
 gnu/packages/flashing-tools.scm | 50 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
  

Comments

Ludovic Courtès June 1, 2016, 8:16 p.m. UTC | #1
Hi!

Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:

> * gnu/packages/flashing-tools.scm (teensy-loader-cli): New variable.

[...]

> +  ;; The repo does not tag versions nor does it use releases, but a commit
> +  ;; message says "Importing 2.1", while the sourcce still says "2.0". So pin
> +  ;; to a fixed commit.

No tags either?

> +  (let* ((commit "f289b7a2e5627")

Better use the full SHA1.

> +         ;; Mind the version substitute below when changing this
> +         (versionx (string-append "2.1-1." (string-take commit 7))))
> +  (package
> +    (name "teensy-loader-cli")
> +    (version versionx)

AFAICS, ‘versionx’ is not needed.  You can directly write:

  (package
    (name "teensy-loader-cli")
    (version (string-append …))
    …)

> +       (patches (search-patches "teensy-loader-cli-usage.patch"))))

You forgot to include the patch.  :-)

There’s a .elf file in the source:

--8<---------------cut here---------------start------------->8---
$ file rebootor/rebootor.elf 
rebootor/rebootor.elf: ELF 32-bit LSB executable, Atmel AVR 8-bit,— version 1 (SYSV), statically linked, not stripped
--8<---------------cut here---------------end--------------->8---

… and a bunch of .hex files with no corresponding source, AFAICS.

Could you remove them in a ‘snippet’?

Other than that LGTM.

Could you send an updated patch?

Thank you!

Ludo’.
  
David Thompson June 1, 2016, 8:24 p.m. UTC | #2
The Teensy's bootloader is nonfree AFAIK, so be careful here.

- Dave
  
Hartmut Goebel June 2, 2016, 8:34 a.m. UTC | #3
Am 01.06.2016 um 22:16 schrieb Ludovic Courtès:
>
>> +  ;; The repo does not tag versions nor does it use releases, but a commit
>> +  ;; message says "Importing 2.1", while the sourcce still says "2.0". So pin
>> +  ;; to a fixed commit.
> No tags either?

„The repo does not tag versions“ :-)

>> +  (let* ((commit "f289b7a2e5627")
> Better use the full SHA1.

Will do.

>
>> +         ;; Mind the version substitute below when changing this
>> +         (versionx (string-append "2.1-1." (string-take commit 7))))
>> +  (package
>> +    (name "teensy-loader-cli")
>> +    (version versionx)
> AFAICS, ‘versionx’ is not needed.  You can directly write:

This is a preparation for using the version in the usage message (see a
few lines below).

>
> You forgot to include the patch.  :-)

That's what I've send the updated patch for :-)


> There’s a .elf file in the source:
> … and a bunch of .hex files with no corresponding source, AFAICS.

Yes, these are examples for flashable files contained in the original
source. But these are not put into the package.

> Could you remove them in a ‘snippet’?

May I ask, why this is necessary?
  
Hartmut Goebel June 2, 2016, 8:41 a.m. UTC | #4
Am 01.06.2016 um 22:24 schrieb Thompson, David:
> The Teensy's bootloader is nonfree AFAIK, so be careful here.

The bootloader is not included in the source at all.
  
Ludovic Courtès June 3, 2016, 8:31 a.m. UTC | #5
Hartmut Goebel <h.goebel@crazy-compilers.com> skribis:

> Am 01.06.2016 um 22:16 schrieb Ludovic Courtès:

[...]

>> There’s a .elf file in the source:
>> … and a bunch of .hex files with no corresponding source, AFAICS.
>
> Yes, these are examples for flashable files contained in the original
> source. But these are not put into the package.
>
>> Could you remove them in a ‘snippet’?
>
> May I ask, why this is necessary?

We want to guarantee a couple of things:

  1. That everything is built from source; this is apparently the case
     but removing those binaries makes it obvious.

  2. That the source as returned by ‘guix build -S’ is exclusively
     source code.

Thanks,
Ludo’.
  
Hartmut Goebel June 3, 2016, 2:39 p.m. UTC | #6
Am 03.06.2016 um 10:31 schrieb Ludovic Courtès:
> We want to guarantee a couple of things:
>
>   1. That everything is built from source; this is apparently the case
>      but removing those binaries makes it obvious.
>
>   2. That the source as returned by ‘guix build -S’ is exclusively
>      source code.

Thanks for the explanation. In also explains why using a "snippet" in
the source section is the correct way (beside of keeping the source small).
  

Patch

diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index 9f9f1b9..1822934 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -1,6 +1,7 @@ 
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -130,3 +131,52 @@  technique (ISP).")
 Atmel (8051, AVR, XMEGA & AVR32) chips with a USB bootloader supporting
 ISP.")
     (license gpl2+)))
+
+(define-public teensy-loader-cli
+  ;; The repo does not tag versions nor does it use releases, but a commit
+  ;; message says "Importing 2.1", while the sourcce still says "2.0". So pin
+  ;; to a fixed commit.
+  (let* ((commit "f289b7a2e5627")
+         ;; Mind the version substitute below when changing this
+         (versionx (string-append "2.1-1." (string-take commit 7))))
+  (package
+    (name "teensy-loader-cli")
+    (version versionx)
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/PaulStoffregen/"
+                           "teensy_loader_cli/archive/" commit ".tar.gz"))
+       (sha256 (base32 "17wqc2q4fa473cy7f5m2yiyb9nq0qw7xal2kzrxzaikgm9rabsw8"))
+       (file-name (string-append "teensy-loader-cli-" version ".tar.gz" ))
+       (patches (search-patches "teensy-loader-cli-usage.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ;; Makefile has no test target
+       #:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'fix-version
+           (lambda _
+             (substitute* "teensy_loader_cli.c"
+               (("Teensy Loader, Command Line, Version 2.0\\\\n")
+                ;; TODO: find a way to pass version from above
+                (string-append "Teensy Loader, Command Line, Version 2.1-1\\n")))))
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (rename-file "teensy_loader_cli" "teensy-loader-cli")
+               (install-file "teensy-loader-cli" bin)))))))
+    (inputs
+     `(("libusb-compat" ,libusb-compat)))
+    (synopsis "Command line firmware uploader for teensy development boards")
+    (description "The Teensy Loader program communicates with your
+Teensy board when the HalfKay bootloader is running, so you can
+download new programs and run them.
+
+You'll need to add the udev-rules to make the teensy update available
+for non-root users.")
+    (home-page "https://www.pjrc.com/teensy/loader_cli.html")
+    (license gpl3))))