summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorRicardo Wurmus <ricardo.wurmus@mdc-berlin.de>2015-11-25 15:57:37 +0100
committerRicardo Wurmus <ricardo.wurmus@mdc-berlin.de>2015-12-14 14:06:29 +0100
commitc2c4e5b2ee7d3e9412822e87bd5aaedbfa40f9bd (patch)
tree30ca9b851b3c8fa4093884a42ad675f087d20726 /gnu
parente1c63590efef7cf383994253b07e81d3e27f3a54 (diff)
downloadguix-c2c4e5b2ee7d3e9412822e87bd5aaedbfa40f9bd.tar.gz
gnu: Add ruby-nokogumbo.
* gnu/packages/ruby.scm (ruby-nokogumbo): New variable.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/packages/ruby.scm64
1 files changed, 64 insertions, 0 deletions
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index f4c9c0afcc..d10dc04a4d 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -39,6 +39,7 @@
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages web)
   #:use-module (guix build-system ruby))
 
 (define-public ruby
@@ -2302,6 +2303,69 @@ multibyte strings, internationalization, time zones, and testing.")
     (home-page "https://github.com/rgrove/crass/")
     (license license:expat)))
 
+(define-public ruby-nokogumbo
+  (package
+    (name "ruby-nokogumbo")
+    (version "1.4.6")
+    (source (origin
+              ;; We use the git reference, because there's no Rakefile in the
+              ;; published gem and the tarball on Github is outdated.
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rubys/nokogumbo.git")
+                    (commit "d56f954d20a")))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "0bnppjy96xiadrsrc9dp8y6wvdwnkfa930n7acrp0mqm4qywl2wl"))))
+    (build-system ruby-build-system)
+    (arguments
+     `(#:modules ((guix build ruby-build-system)
+                  (guix build utils)
+                  (ice-9 rdelim))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'build-gemspec
+          (lambda _
+            (substitute* "Rakefile"
+              ;; Build Makefile even without a copy of gumbo-parser sources
+              (("'gumbo-parser/src',") "")
+              ;; We don't bundle gumbo-parser sources
+              (("'gumbo-parser/src/\\*',") "")
+              (("'gumbo-parser/visualc/include/\\*',") "")
+              ;; The definition of SOURCES will be cut in gemspec, and
+              ;; "FileList" will be undefined.
+              (("SOURCES \\+ FileList\\[")
+               "['ext/nokogumboc/extconf.rb', 'ext/nokogumboc/nokogumbo.c', "))
+
+            ;; Copy the Rakefile and cut out the gemspec.
+            (copy-file "Rakefile" ".gemspec")
+            (with-atomic-file-replacement ".gemspec"
+              (lambda (in out)
+                (let loop ((line (read-line in 'concat))
+                           (skipping? #t))
+                  (if (eof-object? line)
+                      #t
+                      (let ((skip-next? (if skipping?
+                                            (not (string-prefix? "SPEC =" line))
+                                            (string-prefix? "end" line))))
+                        (when (or (not skipping?)
+                                  (and skipping? (not skip-next?)))
+                          (format #t "~a" line)
+                          (display line out))
+                        (loop (read-line in 'concat) skip-next?))))))
+            #t)))))
+    (inputs
+     `(("gumbo-parser" ,gumbo-parser)))
+    (propagated-inputs
+     `(("ruby-nokogiri" ,ruby-nokogiri)))
+    (synopsis "Ruby bindings to the Gumbo HTML5 parser")
+    (description
+     "Nokogumbo allows a Ruby program to invoke the Gumbo HTML5 parser and
+access the result as a Nokogiri parsed document.")
+    (home-page "https://github.com/rubys/nokogumbo/")
+    (license license:asl2.0)))
+
 (define-public ruby-ox
   (package
     (name "ruby-ox")