about summary refs log tree commit diff
path: root/pkgs/applications/office/gnucash/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/office/gnucash/default.nix')
-rw-r--r--pkgs/applications/office/gnucash/default.nix263
1 files changed, 185 insertions, 78 deletions
diff --git a/pkgs/applications/office/gnucash/default.nix b/pkgs/applications/office/gnucash/default.nix
index c3e205500e13c..a9d532a27c24a 100644
--- a/pkgs/applications/office/gnucash/default.nix
+++ b/pkgs/applications/office/gnucash/default.nix
@@ -1,106 +1,213 @@
-{ fetchurl, lib, stdenv, pkg-config, makeWrapper, cmake, gtest
-, boost, icu, libxml2, libxslt, gettext, swig, isocodes, gtk3, glibcLocales
-, webkitgtk, dconf, hicolor-icon-theme, libofx, aqbanking, gwenhywfar, libdbi
-, libdbiDrivers, guile, perl, perlPackages
+{ lib
+, stdenv
+, fetchurl
+, aqbanking
+, boost
+, cmake
+, gettext
+, glib
+, glibcLocales
+, gtest
+, guile
+, gwenhywfar
+, icu
+, libdbi
+, libdbiDrivers
+, libofx
+, libxml2
+, libxslt
+, makeWrapper
+, perlPackages
+, pkg-config
+, swig
+, webkitgtk
+, wrapGAppsHook
 }:
 
-let
-
-  # Enable gnc-fq-* to run in command line.
-  perlWrapper = stdenv.mkDerivation {
-    name = perl.name + "-wrapper-for-gnucash";
-    nativeBuildInputs = [ makeWrapper ];
-    buildInputs = [ perl ] ++ (with perlPackages; [ FinanceQuote DateManip ]);
-    dontUnpack = true;
-
-    installPhase = ''
-      mkdir -p $out/bin
-      for script in ${perl}/bin/*; do
-        makeWrapper $script $out''${script#${perl}} \
-          --prefix "PERL5LIB" ":" "$PERL5LIB"
-      done
-    '';
-  };
-
-in
-
 stdenv.mkDerivation rec {
   pname = "gnucash";
   version = "4.9";
 
+  # raw source code doesn't work out of box; fetchFromGitHub not usable
   src = fetchurl {
-    url = "mirror://sourceforge/gnucash/${pname}-${version}.tar.bz2";
-    sha256 = "sha256-mlUcMMG3EhmfwiJ6EJr7mE177xjhOBcLvHIlxsH6ty0=";
+    url = "https://github.com/Gnucash/gnucash/releases/download/${version}/${pname}-${version}.tar.bz2";
+    hash = "sha256-mlUcMMG3EhmfwiJ6EJr7mE177xjhOBcLvHIlxsH6ty0=";
   };
 
-  nativeBuildInputs = [ pkg-config makeWrapper cmake gtest swig ];
+  nativeBuildInputs = [
+    cmake
+    gettext
+    makeWrapper
+    wrapGAppsHook
+  ];
 
   buildInputs = [
-    boost icu libxml2 libxslt gettext isocodes gtk3 glibcLocales
-    webkitgtk dconf libofx aqbanking gwenhywfar libdbi
-    libdbiDrivers guile
-    perlWrapper perl
-  ] ++ (with perlPackages; [ FinanceQuote DateManip ]);
-
-  propagatedUserEnvPkgs = [ dconf ];
-
-  # glib-2.62 deprecations
-  NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
-
-  # this patch disables test-gnc-timezone and test-gnc-datetime which fail due to nix datetime challenges
-  patches = [ ./0001-changes.patch ];
-
-  postPatch = ''
-    patchShebangs .
+    aqbanking
+    boost
+    glib
+    glibcLocales
+    gtest
+    guile
+    gwenhywfar
+    icu
+    libdbi
+    libdbiDrivers
+    libofx
+    libxml2
+    libxslt
+    pkg-config
+    swig
+    webkitgtk
+  ]
+  ++ (with perlPackages; [
+    DateManip
+    FinanceQuote
+    perl
+  ]);
+
+  patches = [
+    # this patch disables test-gnc-timezone and test-gnc-datetime which fail due to nix datetime challenges
+    ./0001-disable-date-and-time-tests.patch
+    # this patch prevents the building of gnc-fq-update, a utility which updates the GnuCash cli utils
+    ./0002-disable-gnc-fq-update.patch
+    # this patch prevents the building of gnucash-valgrind
+    ./0003-remove-valgrind.patch
+  ];
+
+  # this needs to be an environment variable and not a cmake flag to suppress
+  # guile warning
+  GUILE_AUTO_COMPILE="0";
+
+  # `make check` target does not define its prerequisites but expects them to
+  # have already been built.  The list of targets below was built through trial
+  # and error based on failing tests.
+  doCheck = true;
+  preCheck = ''
+    make \
+      test-account-object \
+      test-address \
+      test-agedver \
+      test-app-utils \
+      test-aqb \
+      test-autoclear \
+      test-backend-dbi \
+      test-business \
+      test-column-types \
+      test-commodities \
+      test-customer \
+      test-dom-converters1 \
+      test-dynload \
+      test-employee \
+      test-engine \
+      test-exp-parser \
+      test-gnc-glib-utils \
+      test-gnc-guid \
+      test-gnc-int128 \
+      test-gnc-numeric \
+      test-gnc-path-util \
+      test-gnc-rational \
+      test-group-vs-book \
+      test-guid \
+      test-import-account-matcher \
+      test-import-backend \
+      test-import-map \
+      test-import-parse \
+      test-import-pending-matches \
+      test-incompatdep \
+      test-job \
+      test-kvp-frames \
+      test-kvp-value \
+      test-link-module-tax-us \
+      test-link-ofx \
+      test-load-backend \
+      test-load-c \
+      test-load-engine \
+      test-load-example-account \
+      test-load-xml2 \
+      test-lots \
+      test-modsysver \
+      test-numeric \
+      test-object \
+      test-print-parse-amount \
+      test-qof \
+      test-qofquerycore \
+      test-qofsession \
+      test-query \
+      test-querynew \
+      test-recurrence \
+      test-resolve-file-path \
+      test-scm-query \
+      test-scm-query-string \
+      test-split-register-copy-ops \
+      test-split-vs-account \
+      test-sqlbe \
+      test-string-converters \
+      test-sx \
+      test-tokenizer \
+      test-transaction-reversal \
+      test-transaction-voiding \
+      test-userdata-dir \
+      test-userdata-dir-invalid-home \
+      test-vendor \
+      test-xml-account \
+      test-xml-commodity \
+      test-xml-pricedb \
+      test-xml-transaction \
+      test-xml2-is-file
+
+      export LD_LIBRARY_PATH="$PWD/lib:$PWD/lib/gnucash:$PWD/lib/gnucash/test:$PWD/lib/gnucash/test/future"
   '';
 
-  makeFlags = [ "GUILE_AUTO_COMPILE=0" ];
+  preFixup = ''
+    gappsWrapperArgs+=(
+      # db drivers location
+      --set GNC_DBD_DIR ${libdbiDrivers}/lib/dbd
+      # gnome settings schemas location on Nix
+      --set GSETTINGS_SCHEMA_DIR ${glib.makeSchemaPath "$out" "${pname}-${version}"}
+    )
+  '';
 
-  postInstall = ''
-    # Auto-updaters don't make sense in Nix.
-    rm $out/bin/gnc-fq-update
+  # wrapGAppsHook would wrap all binaries including the cli utils which need
+  # Perl wrapping
+  dontWrapGApps = true;
 
-    # Unnecessary in the release build.
-    rm $out/bin/gnucash-valgrind
+  # gnucash is wrapped using the args constructed for wrapGAppsHook.
+  # gnc-fq-* are cli utils written in Perl hence the extra wrapping
+  postFixup = ''
+    wrapProgram $out/bin/gnucash "''${gappsWrapperArgs[@]}"
 
-    wrapProgram "$out/bin/gnucash" \
-      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH:$out/share/gsettings-schemas/${pname}-${version}" \
-      --prefix XDG_DATA_DIRS : "${hicolor-icon-theme}/share" \
-      --prefix PERL5LIB ":" "$PERL5LIB" \
-      --set GNC_DBD_DIR ${libdbiDrivers}/lib/dbd \
-      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules"
+    for file in $out/bin/gnc-fq-check $out/bin/gnc-fq-dump $out/bin/gnc-fq-helper; do
+      wrapProgram $file \
+      --prefix PERL5LIB : "${with perlPackages; makeFullPerlPath [ DateManip FinanceQuote ]}"
+    done
   '';
 
-  /*
-  GNUcash's `make check` target does not define its prerequisites but expects them to have already been built.
-  The list of targets below was built through trial and error based on failing tests.
-  */
-  preCheck = ''
-    export LD_LIBRARY_PATH=$PWD/lib:$PWD/lib/gnucash:$PWD/lib/gnucash/test:$PWD/lib/gnucash/test/future''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
-    export NIX_CFLAGS_LINK="-lgtest -lgtest_main"
-    make test-scm-query test-split-register-copy-ops test-link-ofx test-import-backend test-import-account-matcher test-import-pending-matches test-qofquerycore test-import-map test-gnc-numeric test-gnc-rational test-gnc-int128 test-qofsession test-kvp-value test-gnc-guid test-numeric test-vendor test-job test-employee test-customer test-address test-business test-recurrence test-transaction-voiding test-transaction-reversal test-split-vs-account test-tokenizer test-aqb test-import-parse test-link-module-tax-us test-dynload test-agedver test-incompatdep test-modsysver test-load-c test-gnc-path-util test-xml2-is-file test-load-example-account test-query test-querynew test-lots test-group-vs-book test-account-object test-engine test-qof test-commodities test-object test-guid test-load-engine test-userdata-dir-invalid-home test-userdata-dir test-resolve-file-path test-gnc-glib-utils test-sqlbe test-column-types test-backend-dbi test-xml-transaction test-xml-pricedb test-xml-commodity test-xml-account test-string-converters test-load-backend test-kvp-frames test-dom-converters1 test-autoclear test-sx test-print-parse-amount gncmod-futuremodsys
-  '';
-  doCheck = true;
-
-  meta = {
-    description = "Personal and small-business financial-accounting application";
-
+  meta = with lib; {
+    homepage = "https://www.gnucash.org/";
+    description = "Free software for double entry accounting";
     longDescription = ''
       GnuCash is personal and small-business financial-accounting software,
       freely licensed under the GNU GPL and available for GNU/Linux, BSD,
-      Solaris, macOS and Microsoft Windows.
+      Solaris, Mac OS X and Microsoft Windows.
 
-      Designed to be easy to use, yet powerful and flexible, GnuCash allows
-      you to track bank accounts, stocks, income and expenses.  As quick and
+      Designed to be easy to use, yet powerful and flexible, GnuCash allows you
+      to track bank accounts, stocks, income and expenses. As quick and
       intuitive to use as a checkbook register, it is based on professional
       accounting principles to ensure balanced books and accurate reports.
-    '';
 
-    license = lib.licenses.gpl2Plus;
+      Some interesting features:
 
-    homepage = "http://www.gnucash.org/";
-
-    maintainers = [ lib.maintainers.domenkozar ];
-    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+      - Double-Entry Accounting
+      - Stock/Bond/Mutual Fund Accounts
+      - Small-Business Accounting
+      - Reports, Graphs
+      - QIF/OFX/HBCI Import, Transaction Matching
+      - Scheduled Transactions
+      - Financial Calculations
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ domenkozar AndersonTorres ];
+    platforms = platforms.unix;
   };
 }
+# TODO: investigate Darwin support