diff mbox

[2/3] gnu: Add ledger.

Message ID 1462673448.1215366.601202601.6F8B62D7@webmail.messagingengine.com
State New
Headers show

Commit Message

Alex Griffin May 8, 2016, 2:10 a.m. UTC
On Sat, May 7, 2016, at 05:23 PM, Leo Famulari wrote:
> It works, at least for the basic things I tried against the examples in
> 'tests/input'. Speaking of which, it would be nice to include an example
> in the output, perhaps under 'share/doc/ledger'.

Okay, done.

> Will you make this line < 80 characters?

Done.

> What's the story with the library? Are there any programs that use it?

Not that I know of, which is why I didn't include it (well, also I
couldn't figure out how to tell cmake that I don't want it to put stuff
in "$out/lib64"). And Python users will probably prefer beancount to the
ledger module. (Beancount is a reimplementation of ledger in Python.)

> There are some GPL'd files in 'contrib/', 'lisp/', and 'python/res/'
> 
> The file 'tools/update_copyright_year' has an Expat license.
> 
> And, I think that unless we delete the bundled utfcpp, we are
> distributing it through `guix build --source ledger`, so we should
> mention its Boost license.

Is the license field for the source tarball or the package that actually
gets installed? If it's the former, I have to say that's really
unintuitive. I was aware of these extra licenses, but none of that code
gets installed after you build the package. Note that emacs-ledger-mode
uses the same source tarball and I specified its license as GPL2+.
Instead of changing the license field in this patch, I added a note
about the other files to make it clear that changing the build options
may require the license field to change too. I can change it again if
that's wrong, but it seems to me that the license field should really be
about what gets installed.

Comments

Leo Famulari May 9, 2016, 3:39 a.m. UTC | #1
On Sat, May 07, 2016 at 09:10:48PM -0500, Alex Griffin wrote:
> On Sat, May 7, 2016, at 05:23 PM, Leo Famulari wrote:
> > What's the story with the library? Are there any programs that use it?
> 
> Not that I know of, which is why I didn't include it (well, also I
> couldn't figure out how to tell cmake that I don't want it to put stuff
> in "$out/lib64"). And Python users will probably prefer beancount to the
> ledger module. (Beancount is a reimplementation of ledger in Python.)

Okay, I think it deserves a "TODO" comment where it is disabled.

> > There are some GPL'd files in 'contrib/', 'lisp/', and 'python/res/'
> > 
> > The file 'tools/update_copyright_year' has an Expat license.
> > 
> > And, I think that unless we delete the bundled utfcpp, we are
> > distributing it through `guix build --source ledger`, so we should
> > mention its Boost license.
> 
> Is the license field for the source tarball or the package that actually
> gets installed?

Good question. Can anyone answer it?

> If it's the former, I have to say that's really
> unintuitive. I was aware of these extra licenses, but none of that code
> gets installed after you build the package. Note that emacs-ledger-mode
> uses the same source tarball and I specified its license as GPL2+.
> Instead of changing the license field in this patch, I added a note
> about the other files to make it clear that changing the build options
> may require the license field to change too. I can change it again if
> that's wrong, but it seems to me that the license field should really be
> about what gets installed.

Good points. My original thought when bringing this up was that we also
distribute the source code with `guix package --source`. I don't think
we have an idiomatic way to specify a different set of licenses for the
source code and the built package.

Advice requested!
Ludovic Courtès May 9, 2016, 8:23 p.m. UTC | #2
Leo Famulari <leo@famulari.name> skribis:

> On Sat, May 07, 2016 at 09:10:48PM -0500, Alex Griffin wrote:
>> On Sat, May 7, 2016, at 05:23 PM, Leo Famulari wrote:

[...]

>> > There are some GPL'd files in 'contrib/', 'lisp/', and 'python/res/'
>> > 
>> > The file 'tools/update_copyright_year' has an Expat license.
>> > 
>> > And, I think that unless we delete the bundled utfcpp, we are
>> > distributing it through `guix build --source ledger`, so we should
>> > mention its Boost license.
>> 
>> Is the license field for the source tarball or the package that actually
>> gets installed?
>
> Good question. Can anyone answer it?

It’s meant to be for the installed package.  In practice, we’ve often
encoded the license of the source files, usually a superset of the
licenses that apply to the installed software.

When specifying a list of licenses, make sure to add a comment saying
what the list means: if it’s a combination, a license choice, etc.

We should provide ways to express these different things at some point…

>> If it's the former, I have to say that's really
>> unintuitive. I was aware of these extra licenses, but none of that code
>> gets installed after you build the package. Note that emacs-ledger-mode
>> uses the same source tarball and I specified its license as GPL2+.
>> Instead of changing the license field in this patch, I added a note
>> about the other files to make it clear that changing the build options
>> may require the license field to change too. I can change it again if
>> that's wrong, but it seems to me that the license field should really be
>> about what gets installed.
>
> Good points. My original thought when bringing this up was that we also
> distribute the source code with `guix package --source`.

Right, but the source carries its own license anyway in ‘COPYING’, file
headers, etc.

So I sympathize with what Alex wrote.

Thoughts?

Ludo’.
Leo Famulari May 9, 2016, 9:01 p.m. UTC | #3
On Mon, May 09, 2016 at 10:23:22PM +0200, Ludovic Courtès wrote:
> Leo Famulari <leo@famulari.name> skribis:
> > Good points. My original thought when bringing this up was that we also
> > distribute the source code with `guix package --source`.
> 
> Right, but the source carries its own license anyway in ‘COPYING’, file
> headers, etc.

Okay, that makes sense!
diff mbox

Patch

From b97f82dc6bed962fdc59ad674785cb7122846f4a Mon Sep 17 00:00:00 2001
From: Alex Griffin <a@ajgrf.com>
Date: Sat, 7 May 2016 12:20:47 -0500
Subject: [PATCH 2/3] gnu: Add ledger.

* gnu/packages/finance.scm (ledger): New variable.
---
 gnu/packages/finance.scm | 73 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index e9487d4..e57dfaf 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -1,6 +1,7 @@ 
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,14 +24,20 @@ 
  #:use-module (guix download)
  #:use-module (guix build utils)
  #:use-module (guix build-system gnu)
+ #:use-module (guix build-system cmake)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages databases)
+ #:use-module (gnu packages groff)
+ #:use-module (gnu packages libedit)
  #:use-module (gnu packages linux)
+ #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages protobuf)
  #:use-module (gnu packages python)
  #:use-module (gnu packages qt)
+ #:use-module (gnu packages texinfo)
  #:use-module (gnu packages tls)
+ #:use-module (gnu packages unicode)
  #:use-module (gnu packages upnp))
 
 (define-public bitcoin-core
@@ -81,3 +88,69 @@  collectively by the network.  Bitcoin Core is the reference implementation
 of the bitcoin protocol.  This package provides the Bitcoin Core command
 line client and a client based on Qt.")
     (license license:expat)))
+
+(define-public ledger
+  (package
+    (name "ledger")
+    (version "3.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/ledger/ledger/archive/v"
+                                  version
+                                  ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "12jlv3gsjhrja25q9hrwh73cdacd2l3c2yyn8qnijav9mdhnbw4h"))))
+    (build-system cmake-build-system)
+    ;; If you change the build flags you may need to change the license field
+    ;; too; see below.
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'install-examples
+           (lambda _
+             (let* ((out (assoc-ref %outputs "out"))
+                    (examples (string-append out
+                                             "/share/doc/ledger/examples")))
+               (install-file "test/input/sample.dat" examples)
+               (install-file "test/input/demo.ledger" examples))))
+         (add-after 'build 'build-doc
+           (lambda _ (zero? (system* "make" "doc")))))
+       #:configure-flags
+       `("-DBUILD_DOCS:BOOL=ON"
+         "-DBUILD_LIBRARY:BOOL=OFF"
+         ,(string-append "-DUTFCPP_INCLUDE_DIR:PATH="
+                         (assoc-ref %build-inputs "utfcpp")
+                         "/include"))))
+    (inputs `(("boost" ,boost)
+              ("gmp" ,gmp)
+              ("libedit" ,libedit)
+              ("mpfr" ,mpfr)
+              ("utfcpp" ,utfcpp)))
+    (native-inputs `(("texinfo" ,texinfo)
+                     ("groff" ,groff)))
+    (home-page "http://ledger-cli.org/")
+    (synopsis "Command-line double-entry accounting program")
+    (description
+     "Ledger is a powerful, double-entry accounting system that is
+     accessed from the UNIX command-line.  This may put off some users,
+     since there is no flashy UI, but for those who want unparalleled
+     reporting access to their data there are few alternatives.
+
+     Ledger uses text files for input.  It reads the files and generates
+     reports; there is no other database or stored state.  To use Ledger,
+     you create a file of your account names and transactions, run from
+     the command line with some options to specify input and requested
+     reports, and get output.  The output is generally plain text, though
+     you could generate a graph or html instead.  Ledger is simple in
+     concept, surprisingly rich in ability, and easy to use.")
+    ;; There are some extra licenses in files which do not presently get
+    ;; installed when you build this package.  Different versions of the GPL
+    ;; are used in the contrib, lisp, and python subdirectories. Also the file
+    ;; `tools/update_copyright_year` has an Expat license.
+    (license (list license:bsd-3
+                   license:asl2.0
+                   (license:non-copyleft
+                    "file://src/wcwidth.cc"
+                    "See src/wcwidth.cc in the distribution.")))))
-- 
2.7.4