diff --git a/pkgs/development/ruby-modules/gem-config/default.nix b/pkgs/development/ruby-modules/gem-config/default.nix index 115739bd404d..eb136d4c2435 100644 --- a/pkgs/development/ruby-modules/gem-config/default.nix +++ b/pkgs/development/ruby-modules/gem-config/default.nix @@ -24,6 +24,7 @@ , msgpack, qt59, libsodium, snappy, libossp_uuid, lxc, libpcap, xorg, gtk2, buildRubyGem , cairo, re2, rake, gobject-introspection, gdk_pixbuf, zeromq, czmq, graphicsmagick, libcxx , file, libvirt, glib, vips, taglib, libopus, linux-pam, libidn, protobuf, fribidi, harfbuzz +, bison, flex, pango, python3, patchelf , libselinux ? null, libsepol ? null }@args: @@ -245,6 +246,32 @@ in ]; }; + mathematical = attrs: { + buildInputs = [ + cmake + bison + flex + glib + pkgconfig + cairo + pango + gdk_pixbuf + libxml2 + python3 + ]; + + # The ruby build script takes care of this + dontUseCmakeConfigure = true; + + # For some reason 'mathematical.so' is missing cairo and glib in its RPATH, add them explicitly here + postFixup = lib.optionalString stdenv.isLinux '' + soPath="$out/${ruby.gemPath}/gems/mathematical-${attrs.version}/lib/mathematical/mathematical.so" + ${patchelf}/bin/patchelf \ + --set-rpath "${lib.makeLibraryPath [ glib cairo ]}:$(${patchelf}/bin/patchelf --print-rpath "$soPath")" \ + "$soPath" + ''; + }; + magic = attrs: { buildInputs = [ file ]; postInstall = '' diff --git a/pkgs/tools/typesetting/asciidoctor/Gemfile b/pkgs/tools/typesetting/asciidoctor/Gemfile index bdaf17212278..f9329a80a815 100644 --- a/pkgs/tools/typesetting/asciidoctor/Gemfile +++ b/pkgs/tools/typesetting/asciidoctor/Gemfile @@ -2,6 +2,7 @@ source 'https://rubygems.org' gem 'asciidoctor' gem 'asciidoctor-diagram' gem 'asciidoctor-pdf' +gem 'asciidoctor-epub3' gem 'asciidoctor-mathematical' gem 'coderay' gem 'pygments.rb' diff --git a/pkgs/tools/typesetting/asciidoctor/Gemfile.lock b/pkgs/tools/typesetting/asciidoctor/Gemfile.lock index 2195e224bf84..02081e117d6e 100644 --- a/pkgs/tools/typesetting/asciidoctor/Gemfile.lock +++ b/pkgs/tools/typesetting/asciidoctor/Gemfile.lock @@ -8,6 +8,11 @@ GEM asciidoctor (2.0.10) asciidoctor-diagram (1.5.18) asciidoctor (>= 1.5.0, < 3.x) + asciidoctor-epub3 (1.5.0.alpha.9) + asciidoctor (>= 1.5.0, < 3.0.0) + concurrent-ruby (~> 1.1.5) + gepub (~> 1.0.2) + thread_safe (~> 0.3.6) asciidoctor-mathematical (0.3.0) asciidoctor (~> 2.0, >= 2.0.0) mathematical (~> 1.5, >= 1.5.8) @@ -27,12 +32,18 @@ GEM concurrent-ruby (1.1.5) css_parser (1.7.0) addressable + gepub (1.0.4) + nokogiri (>= 1.8.2, < 1.11) + rubyzip (>= 1.1.1) hashery (2.1.2) i18n (1.6.0) concurrent-ruby (~> 1.0) mathematical (1.6.12) ruby-enum (~> 0.4) + mini_portile2 (2.4.0) multi_json (1.13.1) + nokogiri (1.10.3) + mini_portile2 (~> 2.4.0) pdf-core (0.7.0) pdf-reader (2.2.0) Ascii85 (~> 1.0.0) @@ -61,6 +72,7 @@ GEM ruby-enum (0.7.2) i18n ruby-rc4 (0.1.5) + rubyzip (1.2.3) safe_yaml (1.0.5) thread_safe (0.3.6) treetop (1.5.3) @@ -73,6 +85,7 @@ PLATFORMS DEPENDENCIES asciidoctor asciidoctor-diagram + asciidoctor-epub3 asciidoctor-mathematical asciidoctor-pdf coderay diff --git a/pkgs/tools/typesetting/asciidoctor/default.nix b/pkgs/tools/typesetting/asciidoctor/default.nix index 0f9bb0ef7de5..2f1c7e461545 100644 --- a/pkgs/tools/typesetting/asciidoctor/default.nix +++ b/pkgs/tools/typesetting/asciidoctor/default.nix @@ -1,59 +1,46 @@ -{ stdenv, lib, bundlerApp, ruby, bundix, mkShell - # Dependencies of the 'mathematical' package -, cmake, bison, flex, glib, pkgconfig, cairo -, pango, gdk_pixbuf, libxml2, python3, patchelf +{ lib, bundlerApp, makeWrapper, + # Optional dependencies, can be null + epubcheck, kindlegen, + # For the update shell + mkShell, bundix }: -bundlerApp rec { - inherit ruby; - pname = "asciidoctor"; - gemdir = ./.; +let + app = bundlerApp { + pname = "asciidoctor"; + gemdir = ./.; - exes = [ - "asciidoctor" - "asciidoctor-pdf" - "asciidoctor-safe" - ]; + exes = [ + "asciidoctor" + "asciidoctor-pdf" + "asciidoctor-safe" + "asciidoctor-epub3" + ]; - gemConfig = { - mathematical = attrs: { - buildInputs = [ - cmake - bison - flex - glib - pkgconfig - cairo - pango - gdk_pixbuf - libxml2 - python3 - ]; + buildInputs = [ makeWrapper ]; - # The ruby build script takes care of this - dontUseCmakeConfigure = true; - - # For some reason 'mathematical.so' is missing cairo and glib in its RPATH, add them explicitly here - postFixup = lib.optionalString stdenv.isLinux '' - soPath="$out/${ruby.gemPath}/gems/mathematical-${attrs.version}/lib/mathematical/mathematical.so" - ${patchelf}/bin/patchelf \ - --set-rpath "${lib.makeLibraryPath [ glib cairo ]}:$(${patchelf}/bin/patchelf --print-rpath "$soPath")" \ - "$soPath" + postBuild = '' + wrapProgram "$out/bin/asciidoctor-epub3" \ + ${lib.optionalString (epubcheck != null) "--set EPUBCHECK ${epubcheck}/bin/epubcheck"} \ + ${lib.optionalString (kindlegen != null) "--set KINDLEGEN ${kindlegen}/bin/kindlegen"} ''; + + passthru = { + inherit updateShell; + }; + + meta = with lib; { + description = "A faster Asciidoc processor written in Ruby"; + homepage = https://asciidoctor.org/; + license = licenses.mit; + maintainers = with maintainers; [ gpyh ]; + platforms = platforms.unix; }; }; - passthru.updateShell = mkShell { - buildInputs = (gemConfig.mathematical {}).buildInputs ++ [ - bundix - ]; + updateShell = mkShell { + inputsFrom = lib.attrValues app.gems; + buildInputs = [ bundix ]; }; - - meta = with lib; { - description = "A faster Asciidoc processor written in Ruby"; - homepage = https://asciidoctor.org/; - license = licenses.mit; - maintainers = with maintainers; [ gpyh ]; - platforms = platforms.unix; - }; -} +in + app diff --git a/pkgs/tools/typesetting/asciidoctor/gemset.nix b/pkgs/tools/typesetting/asciidoctor/gemset.nix index 3e416600822e..02700962eb28 100644 --- a/pkgs/tools/typesetting/asciidoctor/gemset.nix +++ b/pkgs/tools/typesetting/asciidoctor/gemset.nix @@ -51,6 +51,17 @@ }; version = "1.5.18"; }; + asciidoctor-epub3 = { + dependencies = ["asciidoctor" "concurrent-ruby" "gepub" "thread_safe"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "056yp0z64b1fhhkzz2kaiqsd11gpbgx2d1yjgq7cqma9c70bbxa5"; + type = "gem"; + }; + version = "1.5.0.alpha.9"; + }; asciidoctor-mathematical = { dependencies = ["asciidoctor" "mathematical" "ruby-enum"]; groups = ["default"]; @@ -104,6 +115,17 @@ }; version = "1.7.0"; }; + gepub = { + dependencies = ["nokogiri" "rubyzip"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1kg2h0mscb2hq6l3wjzq5fp5vw4552nglq8n9pawm7bzacf1gzyf"; + type = "gem"; + }; + version = "1.0.4"; + }; hashery = { groups = ["default"]; platforms = []; @@ -136,6 +158,16 @@ }; version = "1.6.12"; }; + mini_portile2 = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy"; + type = "gem"; + }; + version = "2.4.0"; + }; multi_json = { groups = ["default"]; platforms = []; @@ -146,6 +178,17 @@ }; version = "1.13.1"; }; + nokogiri = { + dependencies = ["mini_portile2"]; + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "02bjydih0j515szfv9mls195cvpyidh6ixm7dwbl3s2sbaxxk5s4"; + type = "gem"; + }; + version = "1.10.3"; + }; pdf-core = { groups = ["default"]; platforms = []; @@ -284,6 +327,16 @@ }; version = "0.1.5"; }; + rubyzip = { + groups = ["default"]; + platforms = []; + source = { + remotes = ["https://rubygems.org"]; + sha256 = "1w9gw28ly3zyqydnm8phxchf4ymyjl2r7zf7c12z8kla10cpmhlc"; + type = "gem"; + }; + version = "1.2.3"; + }; safe_yaml = { groups = ["default"]; platforms = []; diff --git a/pkgs/tools/typesetting/asciidoctor/update.sh b/pkgs/tools/typesetting/asciidoctor/update.sh index db7511330bed..1f7e5541ceec 100755 --- a/pkgs/tools/typesetting/asciidoctor/update.sh +++ b/pkgs/tools/typesetting/asciidoctor/update.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -rm gemset.nix Gemfile.lock nix-shell ../../../.. -A asciidoctor.updateShell --run ' + rm gemset.nix Gemfile.lock bundix -m --bundle-pack-path $TMPDIR/asciidoctor-ruby-bundle + rm -r .bundle ' -rm -r .bundle diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cea90ba25284..99630d59aae7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1928,7 +1928,7 @@ in enableExtraPlugins = true; }); - asciidoctor = callPackage ../tools/typesetting/asciidoctor { }; + asciidoctor = callPackage ../tools/typesetting/asciidoctor { kindlegen = null; }; asunder = callPackage ../applications/audio/asunder { };