gnu: RHash: Download tarball from SourceForge instead of a git checkout.
[jackhill/guix/guix.git] / gnu / packages / curl.scm
CommitLineData
6b9105e5 1;;; GNU Guix --- Functional package management for GNU
8cab7580 2;;; Copyright © 2013, 2014, 2015 Andreas Enge <andreas@enge.fr>
74d72608 3;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
a55e2b22 4;;; Copyright © 2015 Tomáš Čech <sleep_walker@suse.cz>
9d9847e1 5;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
af8f7eb4 6;;; Copyright © 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
f5fa1a77 7;;; Copyright © 2017, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
8a1716fe 8;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
1300e4ee 9;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
5e3010a2 10;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
f30d5f7f 11;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
a76a3430 12;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
6b9105e5
AE
13;;;
14;;; This file is part of GNU Guix.
15;;;
16;;; GNU Guix is free software; you can redistribute it and/or modify it
17;;; under the terms of the GNU General Public License as published by
18;;; the Free Software Foundation; either version 3 of the License, or (at
19;;; your option) any later version.
20;;;
21;;; GNU Guix is distributed in the hope that it will be useful, but
22;;; WITHOUT ANY WARRANTY; without even the implied warranty of
23;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24;;; GNU General Public License for more details.
25;;;
26;;; You should have received a copy of the GNU General Public License
27;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
28
29(define-module (gnu packages curl)
b5b73a82 30 #:use-module ((guix licenses) #:prefix license:)
6b9105e5
AE
31 #:use-module (guix packages)
32 #:use-module (guix download)
8de9d532 33 #:use-module (guix git-download)
79d95250 34 #:use-module (guix utils)
6b9105e5 35 #:use-module (guix build-system gnu)
8de9d532 36 #:use-module (guix build-system go)
b6b29c77 37 #:use-module (gnu packages)
6b9105e5 38 #:use-module (gnu packages compression)
8de9d532 39 #:use-module (gnu packages golang)
6b9105e5 40 #:use-module (gnu packages groff)
5e3010a2 41 #:use-module (gnu packages guile)
828d3765 42 #:use-module (gnu packages kerberos)
6b9105e5
AE
43 #:use-module (gnu packages libidn)
44 #:use-module (gnu packages openldap)
45 #:use-module (gnu packages perl)
46 #:use-module (gnu packages pkg-config)
c0e57fb8 47 #:use-module (gnu packages python)
1300e4ee
TGR
48 #:use-module (gnu packages tls)
49 #:use-module (gnu packages web))
6b9105e5
AE
50
51(define-public curl
52 (package
53 (name "curl")
343139da 54 (version "7.68.0")
6b9105e5
AE
55 (source (origin
56 (method url-fetch)
6588c283 57 (uri (string-append "https://curl.haxx.se/download/curl-"
e0afc09d 58 version ".tar.xz"))
6b9105e5
AE
59 (sha256
60 (base32
a76a3430
JK
61 "0nh3j90w6b97wqcgxjfq55qhkz9s38955fbhwzv2fsi7483j895p"))
62 (patches (search-patches "curl-use-ssl-cert-env.patch"))))
6b9105e5 63 (build-system gnu-build-system)
9d9847e1
LC
64 (outputs '("out"
65 "doc")) ;1.2 MiB of man3 pages
6b9105e5 66 (inputs `(("gnutls" ,gnutls)
6b9105e5 67 ("libidn" ,libidn)
6b9105e5 68 ("openldap" ,openldap)
828d3765 69 ("mit-krb5" ,mit-krb5)
6076496b 70 ("nghttp2" ,nghttp2 "lib")
6b9105e5 71 ("zlib" ,zlib)))
c4c4cc05
JD
72 (native-inputs
73 `(("perl" ,perl)
c0e57fb8 74 ("pkg-config" ,pkg-config)
53ffc043 75 ("python" ,python-wrapper)))
dc138d6d 76 (native-search-paths
6ab31af7 77 ;; These variables are introduced by curl-use-ssl-cert-env.patch.
dc138d6d 78 (list (search-path-specification
a76a3430
JK
79 (variable "SSL_CERT_DIR")
80 (separator #f) ;single entry
81 (files '("etc/ssl/certs")))
82 (search-path-specification
83 (variable "SSL_CERT_FILE")
84 (file-type 'regular)
85 (separator #f) ;single entry
86 (files '("etc/ssl/certs/ca-certificates.crt")))
87 ;; Note: This search path is respected by the `curl` command-line
88 ;; tool only. Patching libcurl to read it too would bring no
89 ;; advantages and require maintaining a more complex patch.
90 (search-path-specification
dc138d6d
MB
91 (variable "CURL_CA_BUNDLE")
92 (file-type 'regular)
93 (separator #f) ;single entry
94 (files '("etc/ssl/certs/ca-certificates.crt")))))
6b9105e5 95 (arguments
f5fa1a77
MB
96 `(#:disallowed-references ("doc")
97 #:configure-flags (list "--with-gnutls"
828d3765
MB
98 (string-append "--with-gssapi="
99 (assoc-ref %build-inputs "mit-krb5"))
100 "--disable-static")
c0e57fb8 101 #:phases
5625adfc 102 (modify-phases %standard-phases
f5fa1a77
MB
103 (add-after 'unpack 'do-not-record-configure-flags
104 (lambda _
105 ;; Do not save the configure options to avoid unnecessary references.
106 (substitute* "curl-config.in"
107 (("@CONFIGURE_OPTIONS@")
108 "\"not available\""))
109 #t))
9d9847e1
LC
110 (add-after
111 'install 'move-man3-pages
112 (lambda* (#:key outputs #:allow-other-keys)
113 ;; Move section 3 man pages to "doc".
114 (let ((out (assoc-ref outputs "out"))
115 (doc (assoc-ref outputs "doc")))
116 (mkdir-p (string-append doc "/share/man"))
117 (rename-file (string-append out "/share/man/man3")
118 (string-append doc "/share/man/man3"))
119 #t)))
5625adfc
LC
120 (replace
121 'check
122 (lambda _
123 (substitute* "tests/runtests.pl"
124 (("/bin/sh") (which "sh")))
186de634 125
5625adfc 126 ;; XXX FIXME: Test #1510 seems to work on some machines and not
59e80445 127 ;; others, possibly based on the kernel version. It works on Guix System
5625adfc
LC
128 ;; on x86_64 with linux-libre-4.1, but fails on Hydra for both i686
129 ;; and x86_64 with the following error:
130 ;;
131 ;; test 1510...[HTTP GET connection cache limit (CURLOPT_MAXCONNECTS)]
132 ;;
133 ;; 1510: output (log/stderr1510) FAILED:
a124bbd2
SB
134 ;; --- log/check-expected 2015-06-27 07:45:53.166720834 +0000
135 ;; +++ log/check-generated 2015-06-27 07:45:53.166720834 +0000
5625adfc
LC
136 ;; @@ -1,5 +1,5 @@
137 ;; * Connection #0 to host server1.example.com left intact[LF]
138 ;; * Connection #1 to host server2.example.com left intact[LF]
139 ;; * Connection #2 to host server3.example.com left intact[LF]
140 ;; -* Closing connection 0[LF]
141 ;; +* Closing connection 1[LF]
142 ;; * Connection #3 to host server4.example.com left intact[LF]
143 (delete-file "tests/data/test1510")
d2e3caba 144
5625adfc
LC
145 ;; The top-level "make check" does "make -C tests quiet-test", which
146 ;; is too quiet. Use the "test" target instead, which is more
147 ;; verbose.
fac441b3 148 (invoke "make" "-C" "tests" "test"))))))
35b9e423 149 (synopsis "Command line tool for transferring data with URL syntax")
6b9105e5
AE
150 (description
151 "curl is a command line tool for transferring data with URL syntax,
152supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP,
153LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP.
7c125ce0
AK
154curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP
155form based upload, proxies, cookies, file transfer resume, user+password
156authentication (Basic, Digest, NTLM, Negotiate, kerberos...), proxy
157tunneling, and so on.")
166191b3 158 (license (license:non-copyleft "file://COPYING"
7c125ce0 159 "See COPYING in the distribution."))
14251e30 160 (home-page "https://curl.haxx.se/")))
e1444afa 161
8de9d532
LF
162(define-public kurly
163 (package
164 (name "kurly")
ea6937ad 165 (version "1.2.2")
8de9d532
LF
166 (source (origin
167 (method git-fetch)
168 (uri (git-reference
ea6937ad 169 (url "https://gitlab.com/davidjpeacock/kurly.git")
8de9d532 170 (commit (string-append "v" version))))
c2c04cde 171 (file-name (git-file-name name version))
8de9d532
LF
172 (sha256
173 (base32
ea6937ad 174 "003jv2k45hg2svhjpy5253ccd250vi2r17x2zhm51iw54kgwxipm"))))
8de9d532
LF
175 (build-system go-build-system)
176 (arguments
ea6937ad 177 `(#:import-path "gitlab.com/davidjpeacock/kurly"
4880fddd
LF
178 #:install-source? #f
179 #:phases
180 (modify-phases %standard-phases
fdcbe78b
TGR
181 (add-after 'install 'install-documentation
182 (lambda* (#:key import-path outputs #:allow-other-keys)
183 (let* ((source (string-append "src/" import-path))
184 (out (assoc-ref outputs "out"))
185 (doc (string-append out "/share/doc/" ,name "-" ,version))
186 (man (string-append out "/share/man/man1")))
187 (with-directory-excursion source
188 (install-file "README.md" doc)
189 (mkdir-p man)
ea6937ad 190 (copy-file "doc/kurly.man"
fdcbe78b 191 (string-append man "/kurly.1")))
4880fddd 192 #t))))))
8de9d532
LF
193 (inputs
194 `(("go-github-com-alsm-ioprogress" ,go-github-com-alsm-ioprogress)
195 ("go-github-com-aki237-nscjar" ,go-github-com-aki237-nscjar)
ea6937ad 196 ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)))
8de9d532
LF
197 (synopsis "Command-line HTTP client")
198 (description "kurly is an alternative to the @code{curl} program written in
199Go. kurly is designed to operate in a similar manner to curl, with select
200features. Notably, kurly is not aiming for feature parity, but common flags and
201mechanisms particularly within the HTTP(S) realm are to be expected. kurly does
202not offer a replacement for libcurl.")
ea6937ad 203 (home-page "https://gitlab.com/davidjpeacock/kurly")
8de9d532 204 (license license:asl2.0)))
5e3010a2
RJ
205
206(define-public guile-curl
207 (package
208 (name "guile-curl")
f30d5f7f 209 (version "0.6")
5e3010a2
RJ
210 (source (origin
211 (method url-fetch)
f30d5f7f
RW
212 (uri (string-append "http://www.lonelycactus.com/tarball/"
213 "guile_curl-" version ".tar.gz"))
5e3010a2
RJ
214 (sha256
215 (base32
f30d5f7f 216 "1pxdhnk288ky6gkpad8i60m0p6404rdvls43lr1b5d3csrklyc70"))))
5e3010a2
RJ
217 (build-system gnu-build-system)
218 (arguments
219 `(#:configure-flags (list (string-append
220 "--with-guilesitedir="
221 (assoc-ref %outputs "out")
222 "/share/guile/site/2.2")
223 (string-append
224 "-with-guileextensiondir="
225 (assoc-ref %outputs "out")
226 "/lib/guile/2.2/extensions"))
227 #:phases
228 (modify-phases %standard-phases
229 (add-after 'install 'patch-extension-path
230 (lambda* (#:key outputs #:allow-other-keys)
231 (let* ((out (assoc-ref outputs "out"))
232 (curl.scm (string-append
233 out "/share/guile/site/2.2/curl.scm"))
234 (curl.go (string-append
235 out "/lib/guile/2.2/site-ccache/curl.go"))
236 (ext (string-append out "/lib/guile/2.2/"
237 "extensions/libguile-curl")))
238 (substitute* curl.scm (("libguile-curl") ext))
239 ;; The build system does not actually compile the Scheme module.
240 ;; So we can compile it and put it in the right place in one go.
d28e5ad2 241 (invoke "guild" "compile" curl.scm "-o" curl.go)))))))
5e3010a2
RJ
242 (native-inputs `(("pkg-config" ,pkg-config)))
243 (inputs
244 `(("curl" ,curl)
245 ("guile" ,guile-2.2)))
246 (home-page "http://www.lonelycactus.com/guile-curl.html")
247 (synopsis "Curl bindings for Guile")
248 (description "@code{guile-curl} is a project that has procedures that allow
249Guile to do client-side URL transfers, like requesting documents from HTTP or
250FTP servers. It is based on the curl library.")
251 (license license:gpl3+)))