unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
* How to build GnuCash with SQLite backend support?
@ 2017-12-05 20:56 Gary Johnson
  2017-12-06  8:59 ` Efraim Flashner
  0 siblings, 1 reply; 5+ messages in thread
From: Gary Johnson @ 2017-12-05 20:56 UTC (permalink / raw)
  To: help-guix

Hi guys,

I run Guix on top of Parabola. Recently, the GnuCash package from the
AUR got into conflict with an old version of ICU, and now it won't build
anymore. So...I decided to install GnuCash through Guix instead.

Unfortunately, although it built correctly (yay Guix!), I can no longer
open my accounts.gnucash file (in SQLite3 format). Instead, I just get a
message from GnuCash saying that no suitable backend can be found for
this format.

I then looked at the gnucash.scm file here:

  /usr/share/guile/site/2.2/gnu/packages/gnucash.scm

And I found this:

(arguments
 `(#:tests? #f ;FIXME: failing at /qof/gnc-date/qof print date dmy buff
   #:configure-flags '("--disable-dbi"
                       "--enable-aqbanking")

So I'm guessing that the "--disable-dbi" configure flag is the culprit
here. However, I'm still a novice to the structure of Guix package build
files, so I could really use some help. I tried removing the
"--disable-dbi" flag from the #:configure-flags list, and then ran:

$ guix package -f gnucash.scm

on my new copy of the gnucash.scm file. However, guix just returns
silently without doing anything. What am I doing wrong?

Thanks in advance,
  Gary

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: How to build GnuCash with SQLite backend support?
  2017-12-05 20:56 How to build GnuCash with SQLite backend support? Gary Johnson
@ 2017-12-06  8:59 ` Efraim Flashner
  2017-12-06 15:34   ` Gary Johnson
  0 siblings, 1 reply; 5+ messages in thread
From: Efraim Flashner @ 2017-12-06  8:59 UTC (permalink / raw)
  To: Gary Johnson; +Cc: help-guix

[-- Attachment #1: Type: text/plain, Size: 2045 bytes --]

On Tue, Dec 05, 2017 at 03:56:02PM -0500, Gary Johnson wrote:
> Hi guys,
> 
> I run Guix on top of Parabola. Recently, the GnuCash package from the
> AUR got into conflict with an old version of ICU, and now it won't build
> anymore. So...I decided to install GnuCash through Guix instead.
> 
> Unfortunately, although it built correctly (yay Guix!), I can no longer
> open my accounts.gnucash file (in SQLite3 format). Instead, I just get a
> message from GnuCash saying that no suitable backend can be found for
> this format.
> 
> I then looked at the gnucash.scm file here:
> 
>   /usr/share/guile/site/2.2/gnu/packages/gnucash.scm
> 
> And I found this:
> 
> (arguments
>  `(#:tests? #f ;FIXME: failing at /qof/gnc-date/qof print date dmy buff
>    #:configure-flags '("--disable-dbi"
>                        "--enable-aqbanking")
> 
> So I'm guessing that the "--disable-dbi" configure flag is the culprit
> here. However, I'm still a novice to the structure of Guix package build
> files, so I could really use some help. I tried removing the
> "--disable-dbi" flag from the #:configure-flags list, and then ran:
> 
> $ guix package -f gnucash.scm
> 
> on my new copy of the gnucash.scm file. However, guix just returns
> silently without doing anything. What am I doing wrong?
> 
> Thanks in advance,
>   Gary
> 

guix package -f my-file.scm works great when you have a file that
returns a package. In this case, gnucash.scm contains the definition of
a package and so it doesn't return anything. If it's still the package
in the guix git tree then you can just run `guix package -i gnucash', if
your copy of gnucash.scm resides outside of the git tree then you'll
need `guix package -L path-to-gnucash.scm-directory -i gnucash' in order
to install it from your custom location.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: How to build GnuCash with SQLite backend support?
  2017-12-06  8:59 ` Efraim Flashner
@ 2017-12-06 15:34   ` Gary Johnson
  0 siblings, 0 replies; 5+ messages in thread
From: Gary Johnson @ 2017-12-06 15:34 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: help-guix

Thanks Efraim,

  I made a modified copy of gnucash.scm outside of the Guix git tree (as
gnucash-with-dbi.scm) that returns the gnucash package and was able to
get it to run with:

$ guix package -f gnucash-with-dbi.scm

Of course, I then ran into this error in the configure phase:

====================================
checking dbi/dbi.h usability... no
checking dbi/dbi.h presence... no
checking for dbi/dbi.h... no
configure: error:

 Unable to find <dbi/dbi.h>. Either install the libdbi development
 package (such as libdbi0-dev), or switch off the database backend of
 gnucash by --disable-dbi.
 Note: If you install libdbi, you should also install its database
 drivers (such as libdbd-sqlite3 libdbd-mysql libdbd-pgsql).
====================================

So, yeah...I should have seen that coming. Since libdbi and
libdbd-sqlite3 are not part of Guix yet, I guess that means I need to
write package definitions for them. I guess I'll need to go cozy up with
the manual for awhile...

RTFM time,
  Gary

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: How to build GnuCash with SQLite backend support?
       [not found] <mailman.135.1512579627.1476.help-guix@gnu.org>
@ 2017-12-07  1:28 ` Gary Johnson
  2017-12-07  7:50   ` Chris Marusich
  0 siblings, 1 reply; 5+ messages in thread
From: Gary Johnson @ 2017-12-07  1:28 UTC (permalink / raw)
  To: help-guix

[-- Attachment #1: Type: text/plain, Size: 225 bytes --]

Hi again,

After spending some time with the Guix manual, I managed to write up a
new package module that defines packages for libdbi, libdbi-drivers
(just sqlite3 support for now), and gnucash-with-dbi (see attached
file).


[-- Attachment #2: gnucash-with-dbi.scm --]
[-- Type: application/octet-stream, Size: 7012 bytes --]

;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2017 Gary Johnson <lambdatronic@gmail.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 (my-packages gnucash-with-dbi)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages gnome)
  #:use-module (gnu packages gnucash)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages guile)
  #:use-module (gnu packages icu4c)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages web)
  #:use-module (gnu packages webkit)
  #:use-module (gnu packages xml))

(define-public gnucash-with-dbi
  (package
    (name "gnucash-with-dbi")
    (version "2.6.16")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "mirror://sourceforge/gnucash/gnucash%20%28stable%29/"
                          version "/gnucash-" version ".tar.bz2"))
      (sha256
       (base32
        "1088rssg9xgwi3wdfrhdcga46gby6lrd9a1fvn9zq456lscn4m9c"))
      (patches (search-patches "gnucash-price-quotes-perl.patch"))))
    (build-system gnu-build-system)
    (inputs
     `(("guile" ,guile-2.0)
       ("icu4c" ,icu4c)
       ("glib" ,glib)
       ("gtk" ,gtk+-2)
       ("goffice" ,goffice-0.8)
       ("libgnomecanvas" ,libgnomecanvas)
       ("libdbi" ,libdbi)
       ("libdbi-drivers" ,libdbi-drivers)
       ("libxml2" ,libxml2)
       ("libxslt" ,libxslt)
       ("webkitgtk" ,webkitgtk/gtk+-2)
       ("aqbanking" ,aqbanking)
       ("perl-date-manip" ,perl-date-manip)
       ("perl-finance-quote" ,perl-finance-quote)))
    (propagated-inputs
     `(("sqlite" ,sqlite)))
    (native-inputs
     `(("glib" ,glib "bin") ; glib-compile-schemas, etc.
       ("intltool" ,intltool)
       ("pkg-config" ,pkg-config)))
    (arguments
     `(#:tests? #f ;FIXME: failing at /qof/gnc-date/qof print date dmy buff
       #:configure-flags '("--enable-aqbanking")
       #:phases
       (modify-phases %standard-phases
         (add-after
          'install 'wrap-programs
          (lambda* (#:key inputs outputs #:allow-other-keys)
            (for-each (lambda (prog)
                        (wrap-program (string-append (assoc-ref outputs "out")
                                                     "/bin/" prog)
                          `("PERL5LIB" ":" prefix
                            ,(map (lambda (o)
                                    (string-append o "/lib/perl5/site_perl/"
                                                   ,(package-version perl)))
                                  (if (string=? prog "gnc-fq-helper")
                                      (list
                                       ,@(transitive-input-references
                                          'inputs
                                          (map (lambda (l)
                                                 (assoc l (inputs)))
                                               '("perl-finance-quote"
                                                 "perl-date-manip"))))
                                      (list
                                       ,@(transitive-input-references
                                          'inputs
                                          (map (lambda (l)
                                                 (assoc l (inputs)))
                                               '("perl-finance-quote")))))))))
                      '("gnucash"
                        "gnc-fq-check"
                        "gnc-fq-helper"
                        "gnc-fq-dump")))))))
    (home-page "http://www.gnucash.org/")
    (synopsis "Personal and small business financial accounting software")
    (description
     "GnuCash is personal and professional financial-accounting
software. It can be used to track bank accounts, stocks, income and
expenses, based on the double-entry accounting practice. It includes
support for QIF/OFX/HBCI import and transaction matching. It also
automates several tasks, such as financial calculations or scheduled
transactions.")
    (license license:gpl3+)))

(define-public libdbi
  (package
    (name "libdbi")
    (version "0.9.0")
    (source
     (origin
      (method url-fetch)
      (uri
       (string-append "https://versaweb.dl.sourceforge.net/project/libdbi/libdbi/libdbi-"
                      version "/libdbi-" version ".tar.gz"))
      (sha256
       (base32
        "00s5ra7hdlq25iv23nwf4h1v3kmbiyzx0v9bhggjiii4lpf6ryys"))))
    (build-system gnu-build-system)
    (home-page "http://libdbi.sourceforge.net/")
    (synopsis "Database-independent abstraction layer in C")
    (description
     "The libdbi framework implements a database-independent abstraction layer in C,
similar to the DBI/DBD layer in Perl. Writing one generic set of code,
programmers can leverage the power of multiple databases and multiple
simultaneous database connections by using this framework.")
    (license license:lgpl2.1+)))

(define-public libdbi-drivers
  (package
    (name "libdbi-drivers")
    (version "0.9.0")
    (source
     (origin
      (method url-fetch)
      (uri
       (string-append "https://versaweb.dl.sourceforge.net/project/libdbi-drivers/libdbi-drivers/libdbi-drivers-"
                      version "/libdbi-drivers-" version ".tar.gz"))
      (sha256
       (base32
        "0m680h8cc4428xin4p733azysamzgzcmv4psjvraykrsaz6ymlj3"))))
    (build-system gnu-build-system)
    (inputs
     `(("libdbi" ,libdbi)
       ("sqlite" ,sqlite)))
    (arguments
     '(#:configure-flags '("--with-sqlite3")))
    (home-page "http://libdbi-drivers.sourceforge.net/")
    (synopsis "Database-specific drivers for the libdbi framework")
    (description
     "The libdbi-drivers project provides the database-specific drivers for
the libdbi framework. The current version of libdbi-drivers will work
with any 0.9.x release of the framework. The drivers officially
supported by libdbi are MySQL, PostgreSQL, and SQLite3.")
    (license license:lgpl2.1+)))

[-- Attachment #3: Type: text/plain, Size: 1809 bytes --]


However, now I'm getting a new error when I pop this file on the
GUIX_PACKAGE_PATH and run:

$ guix package -i libdbi-drivers

==================================================
...
LOTS OF NORMAL CONFIG OUTPUT
...
checking for libdbi framework... checking dbi/dbi.h usability... yes
checking dbi/dbi.h presence... yes
checking for dbi/dbi.h... yes
checking for MySQL support... no
checking for PostgreSQL support... no
checking for SQLite support... no
checking for SQLite3 support... yes
checking sqlite3.h usability... yes
checking sqlite3.h presence... yes
checking for sqlite3.h... yes
checking for library containing sqlite3_exec... -lsqlite3
checking for Msql support... no
checking for Oracle support... no
checking for Firebird/Interbase support... no
checking for Freetds support... no
checking for Ingres support... no
checking for IBM DB2 support... no
checking for strtoll... yes
checking for atoll... yes
checking for vasprintf... yes
checking for asprintf... yes
checking for libdbi library... no
configure: error: Invalid libdbi directory - include files not found.
phase `configure' failed after 2.5 seconds
builder for `/gnu/store/nxm3ivpsngf7k9rcszry30hyjpx65iqw-libdbi-drivers-0.9.0.drv' failed with exit code 1
guix package: error: build failed: build of `/gnu/store/nxm3ivpsngf7k9rcszry30hyjpx65iqw-libdbi-drivers-0.9.0.drv' failed
==================================================

Okay, guys. What the heck am I missing here? I've clearly added the
libdbi and sqlite packages to the "inputs" list of the libdbi-drivers
package. The configure phase is detecting dbi.h and sqlite3.h just fine,
but then it can't find the libdbi library? Now I'm definitely lost. :(

I tried sticking libdbi into propagated-inputs and even into
native-inputs with exactly the same result.

Help?
  Gary

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: How to build GnuCash with SQLite backend support?
  2017-12-07  1:28 ` Gary Johnson
@ 2017-12-07  7:50   ` Chris Marusich
  0 siblings, 0 replies; 5+ messages in thread
From: Chris Marusich @ 2017-12-07  7:50 UTC (permalink / raw)
  Cc: help-guix

[-- Attachment #1: Type: text/plain, Size: 6173 bytes --]

Gary Johnson <lambdatronic@gmail.com> writes:

> Hi again,
>
> After spending some time with the Guix manual, I managed to write up a
> new package module that defines packages for libdbi, libdbi-drivers
> (just sqlite3 support for now), and gnucash-with-dbi (see attached
> file).

Awesome!  Thank you for taking the time to do this!

> However, now I'm getting a new error when I pop this file on the
> GUIX_PACKAGE_PATH and run:
>
> $ guix package -i libdbi-drivers
>
> ==================================================
> ...
> LOTS OF NORMAL CONFIG OUTPUT
> ...
> checking for libdbi framework... checking dbi/dbi.h usability... yes
> checking dbi/dbi.h presence... yes
> checking for dbi/dbi.h... yes
> checking for MySQL support... no
> checking for PostgreSQL support... no
> checking for SQLite support... no
> checking for SQLite3 support... yes
> checking sqlite3.h usability... yes
> checking sqlite3.h presence... yes
> checking for sqlite3.h... yes
> checking for library containing sqlite3_exec... -lsqlite3
> checking for Msql support... no
> checking for Oracle support... no
> checking for Firebird/Interbase support... no
> checking for Freetds support... no
> checking for Ingres support... no
> checking for IBM DB2 support... no
> checking for strtoll... yes
> checking for atoll... yes
> checking for vasprintf... yes
> checking for asprintf... yes
> checking for libdbi library... no
> configure: error: Invalid libdbi directory - include files not found.
> phase `configure' failed after 2.5 seconds
> builder for `/gnu/store/nxm3ivpsngf7k9rcszry30hyjpx65iqw-libdbi-drivers-0.9.0.drv' failed with exit code 1
> guix package: error: build failed: build of `/gnu/store/nxm3ivpsngf7k9rcszry30hyjpx65iqw-libdbi-drivers-0.9.0.drv' failed
> ==================================================
>
> Okay, guys. What the heck am I missing here? I've clearly added the
> libdbi and sqlite packages to the "inputs" list of the libdbi-drivers
> package. The configure phase is detecting dbi.h and sqlite3.h just fine,
> but then it can't find the libdbi library? Now I'm definitely lost. :(

I think the problem might lie in how the libdbi author(s) have written
their ./configure.in file.  Check out the file in the libdbi source:

--8<---------------cut here---------------start------------->8---
if test "$ac_libdbi" = "YES"; then
   AC_MSG_CHECKING(for libdbi library)
   if test "$ac_dbi_libdir" = "no"; then
           dbi_libdirs="/usr/lib /usr/local/lib /sw/lib"
           libdbi_libs="libdbi.so libdbi.a"
           AC_FIND_FILE($libdbi_libs, $dbi_libdirs, ac_dbi_libdir)
           if test "$ac_dbi_libdir" = "no"; then
                   AC_MSG_RESULT(no)
                   AC_MSG_ERROR([Invalid libdbi directory - include files not found.])
           fi
   fi

   AC_MSG_RESULT([yes: libs in $ac_dbi_libdir])
   LIBADD_LIBDBI="$LIBADD_LIBDBI -L$ac_dbi_libdir"
        
   AC_SUBST(LIBADD_LIBDBI)

   LIBDBI_LIBDIR="$ac_dbi_libdir"
   AC_SUBST(LIBDBI_LIBDIR)

fi
--8<---------------cut here---------------end--------------->8---

It looks like this expands to the following in ./configure:

--8<---------------cut here---------------start------------->8---
if test "$ac_libdbi" = "YES"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libdbi library" >&5
$as_echo_n "checking for libdbi library... " >&6; }
   if test "$ac_dbi_libdir" = "no"; then
           dbi_libdirs="/usr/lib /usr/local/lib /sw/lib"
           libdbi_libs="libdbi.so libdbi.a"

ac_dbi_libdir=no
for i in $dbi_libdirs; do
        for j in $libdbi_libs; do
                if test -r "$i/$j"; then
                        ac_dbi_libdir=$i
                        break 2
                fi
        done
done

           if test "$ac_dbi_libdir" = "no"; then
                   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
                   as_fn_error $? "Invalid libdbi directory - include files not found." "$LINENO" 5
           fi
   fi

   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: libs in $ac_dbi_libdir" >&5
$as_echo "yes: libs in $ac_dbi_libdir" >&6; }
   LIBADD_LIBDBI="$LIBADD_LIBDBI -L$ac_dbi_libdir"



   LIBDBI_LIBDIR="$ac_dbi_libdir"


fi
--8<---------------cut here---------------end--------------->8---

Note the "dbi_libdirs" variable, which contains the value "/usr/lib
/usr/local/lib /sw/lib".  My guess is that the configure step is failing
because it's trying (incorrectly) to look in those absolute directory
paths to find the files it needs.  When you build a package in Guix, the
build takes place in an isolated environment.  The builder only has
access to inputs that you explicitly declare in your package definition
(or inputs that are provided by default by the build system you choose).
Any attempt to access files outside the store will fail.

If that's the problem, then to fix it, there are at least two possible
approaches:

1) Submit a patch that somehow fixes the issue upstream.  Probably, the
   configure.in script should not assume an absolute path like this.
   I'm not too familiar with Autoconf and Automake, but I'm sure there
   must be a way to fix this upstream...  Maybe someone else knows more.

2) Patch the ./configure script by using the "substitute*" form defined
   in Guix.  This is a fine solution, too.  You can run

       grep -r 'substitute\*' ~/.config/guix/latest/gnu/packages

   to see how it's used.  You can run

       grep -r -A30 'define.*substitute\*' ~/.config/guix/latest

   to find the file where it's defined.  It isn't really documented in
   the Guix manual (yet).  You probably want to either (a) remove the
   check entirely, and hope that the build system will just find the
   libraries it needs in the build environment, or (b) explicitly set
   the dbi_libdirs variable to the path in the store that contains the
   output of the libdbi package.  Option (b) seems cleaner.

Hope that helps get you moving forward again!  Thanks for taking the
time to add packages.

-- 
Chris

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-12-07  7:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-05 20:56 How to build GnuCash with SQLite backend support? Gary Johnson
2017-12-06  8:59 ` Efraim Flashner
2017-12-06 15:34   ` Gary Johnson
     [not found] <mailman.135.1512579627.1476.help-guix@gnu.org>
2017-12-07  1:28 ` Gary Johnson
2017-12-07  7:50   ` Chris Marusich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).