diff options
Diffstat (limited to 'pkgs/applications/office/gnucash/default.nix')
-rw-r--r-- | pkgs/applications/office/gnucash/default.nix | 263 |
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 |