Merge branch 'master' into ungrafting
[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>
cb8569e1 5;;; Copyright © 2015, 2020 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>
cce8ab8d 13;;; Copyright © 2020 Dale Mellor <guix-devel-0brg6b@rdmp.org>
6b9105e5
AE
14;;;
15;;; This file is part of GNU Guix.
16;;;
17;;; GNU Guix is free software; you can redistribute it and/or modify it
18;;; under the terms of the GNU General Public License as published by
19;;; the Free Software Foundation; either version 3 of the License, or (at
20;;; your option) any later version.
21;;;
22;;; GNU Guix is distributed in the hope that it will be useful, but
23;;; WITHOUT ANY WARRANTY; without even the implied warranty of
24;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25;;; GNU General Public License for more details.
26;;;
27;;; You should have received a copy of the GNU General Public License
28;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
29
30(define-module (gnu packages curl)
b5b73a82 31 #:use-module ((guix licenses) #:prefix license:)
6b9105e5
AE
32 #:use-module (guix packages)
33 #:use-module (guix download)
8de9d532 34 #:use-module (guix git-download)
79d95250 35 #:use-module (guix utils)
cce8ab8d 36 #:use-module (guix build-system cmake)
6b9105e5 37 #:use-module (guix build-system gnu)
8de9d532 38 #:use-module (guix build-system go)
b6b29c77 39 #:use-module (gnu packages)
6b9105e5 40 #:use-module (gnu packages compression)
8de9d532 41 #:use-module (gnu packages golang)
5e3010a2 42 #:use-module (gnu packages guile)
828d3765 43 #:use-module (gnu packages kerberos)
6b9105e5
AE
44 #:use-module (gnu packages libidn)
45 #:use-module (gnu packages openldap)
46 #:use-module (gnu packages perl)
47 #:use-module (gnu packages pkg-config)
c0e57fb8 48 #:use-module (gnu packages python)
1300e4ee 49 #:use-module (gnu packages tls)
ff5733d1
MB
50 #:use-module (gnu packages web)
51 #:use-module (srfi srfi-1))
6b9105e5
AE
52
53(define-public curl
54 (package
55 (name "curl")
0fa7a2d9 56 (version "7.73.0")
1adeb744 57 (replacement curl-7.74.0)
6b9105e5 58 (source (origin
cb8569e1
LC
59 (method url-fetch)
60 (uri (string-append "https://curl.haxx.se/download/curl-"
61 version ".tar.xz"))
62 (sha256
63 (base32
0fa7a2d9 64 "12j0qaij1ppgspray8xvs2qk3h3m23wdqh27x87y1aw8xaj7qk3w"))))
6b9105e5 65 (build-system gnu-build-system)
9d9847e1
LC
66 (outputs '("out"
67 "doc")) ;1.2 MiB of man3 pages
6b9105e5 68 (inputs `(("gnutls" ,gnutls)
6b9105e5 69 ("libidn" ,libidn)
6b9105e5 70 ("openldap" ,openldap)
828d3765 71 ("mit-krb5" ,mit-krb5)
6076496b 72 ("nghttp2" ,nghttp2 "lib")
6b9105e5 73 ("zlib" ,zlib)))
c4c4cc05
JD
74 (native-inputs
75 `(("perl" ,perl)
c0e57fb8 76 ("pkg-config" ,pkg-config)
53ffc043 77 ("python" ,python-wrapper)))
dc138d6d 78 (native-search-paths
6ab31af7 79 ;; These variables are introduced by curl-use-ssl-cert-env.patch.
dc138d6d 80 (list (search-path-specification
a76a3430
JK
81 (variable "SSL_CERT_DIR")
82 (separator #f) ;single entry
83 (files '("etc/ssl/certs")))
84 (search-path-specification
85 (variable "SSL_CERT_FILE")
86 (file-type 'regular)
87 (separator #f) ;single entry
88 (files '("etc/ssl/certs/ca-certificates.crt")))
89 ;; Note: This search path is respected by the `curl` command-line
90 ;; tool only. Patching libcurl to read it too would bring no
91 ;; advantages and require maintaining a more complex patch.
92 (search-path-specification
dc138d6d
MB
93 (variable "CURL_CA_BUNDLE")
94 (file-type 'regular)
95 (separator #f) ;single entry
96 (files '("etc/ssl/certs/ca-certificates.crt")))))
6b9105e5 97 (arguments
f5fa1a77
MB
98 `(#:disallowed-references ("doc")
99 #:configure-flags (list "--with-gnutls"
828d3765
MB
100 (string-append "--with-gssapi="
101 (assoc-ref %build-inputs "mit-krb5"))
102 "--disable-static")
c0e57fb8 103 #:phases
5625adfc 104 (modify-phases %standard-phases
f5fa1a77
MB
105 (add-after 'unpack 'do-not-record-configure-flags
106 (lambda _
107 ;; Do not save the configure options to avoid unnecessary references.
108 (substitute* "curl-config.in"
109 (("@CONFIGURE_OPTIONS@")
110 "\"not available\""))
111 #t))
9d9847e1
LC
112 (add-after
113 'install 'move-man3-pages
114 (lambda* (#:key outputs #:allow-other-keys)
115 ;; Move section 3 man pages to "doc".
116 (let ((out (assoc-ref outputs "out"))
117 (doc (assoc-ref outputs "doc")))
118 (mkdir-p (string-append doc "/share/man"))
119 (rename-file (string-append out "/share/man/man3")
120 (string-append doc "/share/man/man3"))
121 #t)))
5625adfc
LC
122 (replace
123 'check
124 (lambda _
125 (substitute* "tests/runtests.pl"
126 (("/bin/sh") (which "sh")))
186de634 127
5625adfc
LC
128 ;; The top-level "make check" does "make -C tests quiet-test", which
129 ;; is too quiet. Use the "test" target instead, which is more
130 ;; verbose.
fac441b3 131 (invoke "make" "-C" "tests" "test"))))))
35b9e423 132 (synopsis "Command line tool for transferring data with URL syntax")
6b9105e5
AE
133 (description
134 "curl is a command line tool for transferring data with URL syntax,
135supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP,
136LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP.
7c125ce0
AK
137curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP
138form based upload, proxies, cookies, file transfer resume, user+password
139authentication (Basic, Digest, NTLM, Negotiate, kerberos...), proxy
140tunneling, and so on.")
166191b3 141 (license (license:non-copyleft "file://COPYING"
7c125ce0 142 "See COPYING in the distribution."))
14251e30 143 (home-page "https://curl.haxx.se/")))
e1444afa 144
ff5733d1
MB
145;; This package exists mainly to bootstrap CMake. It must not depend on
146;; anything that uses cmake-build-system.
147(define-public curl-minimal
148 (hidden-package
149 (package/inherit
150 curl
151 (name "curl-minimal")
152 (inputs (alist-delete "openldap" (package-inputs curl))))))
153
1adeb744
MB
154;; Replacement package to fix multiple security vulnerabilities.
155(define curl-7.74.0
af91d133
MB
156 (package
157 (inherit curl)
1adeb744 158 (version "7.74.0")
af91d133
MB
159 (source (origin
160 (inherit (package-source curl))
161 (uri (string-append "https://curl.haxx.se/download/curl-"
162 version ".tar.xz"))
163 (sha256
164 (base32
a7737f0e 165 "12w7gskrglg6qrmp822j37fmbr0icrcxv7rib1fy5xiw80n5z7cr"))))))
af91d133 166
8de9d532
LF
167(define-public kurly
168 (package
169 (name "kurly")
ea6937ad 170 (version "1.2.2")
8de9d532
LF
171 (source (origin
172 (method git-fetch)
173 (uri (git-reference
ea6937ad 174 (url "https://gitlab.com/davidjpeacock/kurly.git")
8de9d532 175 (commit (string-append "v" version))))
c2c04cde 176 (file-name (git-file-name name version))
8de9d532
LF
177 (sha256
178 (base32
ea6937ad 179 "003jv2k45hg2svhjpy5253ccd250vi2r17x2zhm51iw54kgwxipm"))))
8de9d532
LF
180 (build-system go-build-system)
181 (arguments
ea6937ad 182 `(#:import-path "gitlab.com/davidjpeacock/kurly"
4880fddd
LF
183 #:install-source? #f
184 #:phases
185 (modify-phases %standard-phases
fdcbe78b
TGR
186 (add-after 'install 'install-documentation
187 (lambda* (#:key import-path outputs #:allow-other-keys)
188 (let* ((source (string-append "src/" import-path))
189 (out (assoc-ref outputs "out"))
190 (doc (string-append out "/share/doc/" ,name "-" ,version))
191 (man (string-append out "/share/man/man1")))
192 (with-directory-excursion source
193 (install-file "README.md" doc)
194 (mkdir-p man)
ea6937ad 195 (copy-file "doc/kurly.man"
fdcbe78b 196 (string-append man "/kurly.1")))
4880fddd 197 #t))))))
8de9d532
LF
198 (inputs
199 `(("go-github-com-alsm-ioprogress" ,go-github-com-alsm-ioprogress)
200 ("go-github-com-aki237-nscjar" ,go-github-com-aki237-nscjar)
ea6937ad 201 ("go-github-com-urfave-cli" ,go-github-com-urfave-cli)))
8de9d532
LF
202 (synopsis "Command-line HTTP client")
203 (description "kurly is an alternative to the @code{curl} program written in
204Go. kurly is designed to operate in a similar manner to curl, with select
205features. Notably, kurly is not aiming for feature parity, but common flags and
206mechanisms particularly within the HTTP(S) realm are to be expected. kurly does
207not offer a replacement for libcurl.")
ea6937ad 208 (home-page "https://gitlab.com/davidjpeacock/kurly")
8de9d532 209 (license license:asl2.0)))
5e3010a2
RJ
210
211(define-public guile-curl
212 (package
213 (name "guile-curl")
f30d5f7f 214 (version "0.6")
5e3010a2
RJ
215 (source (origin
216 (method url-fetch)
f30d5f7f
RW
217 (uri (string-append "http://www.lonelycactus.com/tarball/"
218 "guile_curl-" version ".tar.gz"))
5e3010a2
RJ
219 (sha256
220 (base32
f30d5f7f 221 "1pxdhnk288ky6gkpad8i60m0p6404rdvls43lr1b5d3csrklyc70"))))
5e3010a2
RJ
222 (build-system gnu-build-system)
223 (arguments
224 `(#:configure-flags (list (string-append
225 "--with-guilesitedir="
226 (assoc-ref %outputs "out")
227 "/share/guile/site/2.2")
228 (string-append
229 "-with-guileextensiondir="
230 (assoc-ref %outputs "out")
231 "/lib/guile/2.2/extensions"))
232 #:phases
233 (modify-phases %standard-phases
234 (add-after 'install 'patch-extension-path
235 (lambda* (#:key outputs #:allow-other-keys)
236 (let* ((out (assoc-ref outputs "out"))
237 (curl.scm (string-append
238 out "/share/guile/site/2.2/curl.scm"))
239 (curl.go (string-append
240 out "/lib/guile/2.2/site-ccache/curl.go"))
241 (ext (string-append out "/lib/guile/2.2/"
242 "extensions/libguile-curl")))
243 (substitute* curl.scm (("libguile-curl") ext))
244 ;; The build system does not actually compile the Scheme module.
245 ;; So we can compile it and put it in the right place in one go.
d28e5ad2 246 (invoke "guild" "compile" curl.scm "-o" curl.go)))))))
5e3010a2
RJ
247 (native-inputs `(("pkg-config" ,pkg-config)))
248 (inputs
249 `(("curl" ,curl)
250 ("guile" ,guile-2.2)))
251 (home-page "http://www.lonelycactus.com/guile-curl.html")
252 (synopsis "Curl bindings for Guile")
253 (description "@code{guile-curl} is a project that has procedures that allow
254Guile to do client-side URL transfers, like requesting documents from HTTP or
255FTP servers. It is based on the curl library.")
256 (license license:gpl3+)))
cce8ab8d
DM
257
258(define-public curlpp
259 (package
260 (name "curlpp")
261 (version "0.8.1")
262 (source
263 (origin
264 (method git-fetch)
265 (uri (git-reference
b0e7b699 266 (url "https://github.com/jpbarrette/curlpp")
cce8ab8d
DM
267 (commit (string-append "v" version))))
268 (sha256
269 (base32 "1b0ylnnrhdax4kwjq64r1fk0i24n5ss6zfzf4hxwgslny01xiwrk"))
270 (file-name (git-file-name name version))))
271 (build-system cmake-build-system)
272 ;; There are no build tests to be had.
273 (arguments
274 '(#:tests? #f))
275 ;; The installed version needs the header files from the C library.
276 (propagated-inputs
277 `(("curl" ,curl)))
278 (synopsis "C++ wrapper around libcURL")
279 (description
280 "This package provides a free and easy-to-use client-side C++ URL
281transfer library, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT,
282FILE and LDAP; in particular it supports HTTPS certificates, HTTP POST, HTTP
283PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies,
284user+password authentication, file transfer resume, http proxy tunneling and
285more!")
286 (home-page "http://www.curlpp.org")
287 (license license:expat)))