{ lib , stdenv , fetchurl , perlPackages , makeWrapper , wrapGAppsHook3 , cairo , dblatex , gnumake , gobject-introspection , graphicsmagick , gsettings-desktop-schemas , gtk3 , hicolor-icon-theme , libnotify , librsvg , libxslt , netpbm , opencv , pango , perl , pkg-config , poppler , auto-multiple-choice }: stdenv.mkDerivation (finalAttrs: rec { pname = "auto-multiple-choice"; version = "1.6.0"; src = fetchurl { url = "https://download.auto-multiple-choice.net/${pname}_${version}_dist.tar.gz"; # before 1.6.0, the URL pattern used "precomp" instead of "dist". ^^^^ sha256 = "sha256-I9Xw1BN8ZSQhi5F1R3axHBKE6tnaCNk8k5tts6LoMjY="; }; # There's only the Makefile dontConfigure = true; makeFlags = [ "PERLPATH=${perl}/bin/perl" # We *need* to pass DESTDIR, as the Makefile ignores PREFIX. "DESTDIR=$(out)" # Relative paths. "BINDIR=/bin" "PERLDIR=/share/perl5" "MODSDIR=/lib" # At runtime, AMC will test for that dir before # defaulting to the "portable" strategy we use, so this test # *must* fail. *But* this variable cannot be set to anything but # "/lib" , because that name is hardcoded in the main executable # and this variable controls both both the path AMC will check at # runtime, AND the path where the actual modules will be stored at # build-time. This has been reported upstream as # https://project.auto-multiple-choice.net/issues/872 "TEXDIR=/tex/latex/" # what texlive.combine expects "TEXDOCDIR=/share/doc/texmf/" # TODO where to put this? "MAN1DIR=/share/man/man1" "DESKTOPDIR=/share/applications" "METAINFODIR=/share/metainfo" "ICONSDIR=/share/auto-multiple-choice/icons" "APPICONDIR=/share/icons/hicolor" "LOCALEDIR=/share/locale" "MODELSDIR=/share/auto-multiple-choice/models" "DOCDIR=/share/doc/auto-multiple-choice" "SHARED_MIMEINFO_DIR=/share/mime/packages" "LANG_GTKSOURCEVIEW_DIR=/share/gtksourceview-4/language-specs" # Pretend to be redhat so `install` doesn't try to chown/chgrp. "SYSTEM_TYPE=rpm" "GCC=${stdenv.cc.targetPrefix}cc" "GCC_PP=${stdenv.cc.targetPrefix}c++" ]; preFixup = '' makeWrapperArgs+=("''${gappsWrapperArgs[@]}") ''; postFixup = '' wrapProgram $out/bin/auto-multiple-choice \ ''${makeWrapperArgs[@]} \ --prefix PERL5LIB : "${with perlPackages; makeFullPerlPath [ ArchiveZip DBDSQLite Cairo CairoGObject DBI Glib GlibObjectIntrospection Gtk3 LocaleGettext OpenOfficeOODoc PerlMagick TextCSV XMLParser XMLSimple XMLWriter ]}:"$out/share/perl5 \ --prefix XDG_DATA_DIRS : "$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \ --set TEXINPUTS ":.:$out/tex/latex" ''; nativeBuildInputs = [ pkg-config makeWrapper wrapGAppsHook3 gobject-introspection ]; buildInputs = [ cairo cairo.dev dblatex gnumake graphicsmagick gsettings-desktop-schemas gtk3 hicolor-icon-theme libnotify librsvg libxslt netpbm opencv pango poppler ] ++ (with perlPackages; [ perl ArchiveZip Cairo CairoGObject DBDSQLite DBI Glib GlibObjectIntrospection Gtk3 LocaleGettext PerlMagick TextCSV XMLParser XMLSimple XMLWriter ]); passthru = { tlType = "run"; pkgs = [ finalAttrs.finalPackage ]; }; meta = with lib; { description = "Create and manage multiple choice questionnaires with automated marking."; mainProgram = "auto-multiple-choice"; longDescription = '' Create, manage and mark multiple-choice questionnaires. auto-multiple-choice features automated or manual formatting with LaTeX, shuffling of questions and answers and automated marking using Optical Mark Recognition. Questionnaires can be created using either a very simple text syntax, AMC-TXT, or LaTeX. In the latter case, your TeXLive installation must be combined with this package. This can be done in configuration.nix as follows: … environment.systemPackages = with pkgs; [ auto-multiple-choice (texlive.combine { inherit (pkgs.texlive) scheme-full; inherit auto-multiple-choice; }) ]; For usage instructions, see documentation at the project's homepage. ''; homepage = "https://www.auto-multiple-choice.net/"; changelog = "https://gitlab.com/jojo_boulix/auto-multiple-choice/-/blob/master/ChangeLog"; license = licenses.gpl2Plus; maintainers = [ maintainers.thblt ]; platforms = platforms.all; }; })