linphone.scm 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039
  1. ;;; GNU Guix --- Functional package management for GNU
  2. ;;;
  3. ;;; Copyright © 2020, 2021 Raghav Gururajan <raghavgururajan@disroot.org>
  4. ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  5. ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
  6. ;;;
  7. ;;; This file is part of GNU Guix.
  8. ;;;
  9. ;;; GNU Guix is free software; you can redistribute it and/or modify it
  10. ;;; under the terms of the GNU General Public License as published by
  11. ;;; the Free Software Foundation; either version 3 of the License, or (at
  12. ;;; your option) any later version.
  13. ;;;
  14. ;;; GNU Guix is distributed in the hope that it will be useful, but
  15. ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
  16. ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. ;;; GNU General Public License for more details.
  18. ;;;
  19. ;;; You should have received a copy of the GNU General Public License
  20. ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
  21. (define-module (gnu packages linphone)
  22. #:use-module (gnu packages)
  23. #:use-module (gnu packages admin)
  24. #:use-module (gnu packages audio)
  25. #:use-module (gnu packages avahi)
  26. #:use-module (gnu packages base)
  27. #:use-module (gnu packages cpp)
  28. #:use-module (gnu packages compression)
  29. #:use-module (gnu packages crypto)
  30. #:use-module (gnu packages databases)
  31. #:use-module (gnu packages documentation)
  32. #:use-module (gnu packages gettext)
  33. #:use-module (gnu packages gl)
  34. #:use-module (gnu packages glib)
  35. #:use-module (gnu packages gnome)
  36. #:use-module (gnu packages gnome-xyz)
  37. #:use-module (gnu packages graphviz)
  38. #:use-module (gnu packages gtk)
  39. #:use-module (gnu packages image)
  40. #:use-module (gnu packages linux)
  41. #:use-module (gnu packages ncurses)
  42. #:use-module (gnu packages openldap)
  43. #:use-module (gnu packages perl)
  44. #:use-module (gnu packages pkg-config)
  45. #:use-module (gnu packages pulseaudio)
  46. #:use-module (gnu packages python)
  47. #:use-module (gnu packages python-xyz)
  48. #:use-module (gnu packages qt)
  49. #:use-module (gnu packages java)
  50. #:use-module (gnu packages sqlite)
  51. #:use-module (gnu packages telephony)
  52. #:use-module (gnu packages tls)
  53. #:use-module (gnu packages video)
  54. #:use-module (gnu packages xiph)
  55. #:use-module (gnu packages xml)
  56. #:use-module (gnu packages xorg)
  57. #:use-module ((guix licenses) #:prefix license:)
  58. #:use-module (guix packages)
  59. #:use-module (guix download)
  60. #:use-module (guix git-download)
  61. #:use-module (guix build-system cmake)
  62. #:use-module (guix build-system qt)
  63. #:use-module (guix build-system glib-or-gtk)
  64. #:use-module (guix build-system gnu))
  65. (define-public bcunit
  66. (let ((commit "74021cc7cb20a4e177748dd2948173e1f9c270ae")
  67. (revision "0"))
  68. (package
  69. (name "bcunit")
  70. (version (git-version "3.0.2" revision commit))
  71. (source
  72. (origin
  73. (method git-fetch)
  74. (uri (git-reference
  75. (url "git://git.linphone.org/bcunit")
  76. (commit commit)))
  77. (file-name (git-file-name name version))
  78. (sha256
  79. (base32 "0npdwvanjkfg9vrqs5yi8vh6wliv50ycdli8pzavir84nb31nq1b"))))
  80. (build-system cmake-build-system)
  81. (outputs '("out" "doc"))
  82. (arguments
  83. `(#:configure-flags (list "-DENABLE_STATIC=NO"
  84. "-DENABLE_CURSES=ON"
  85. "-DENABLE_DOC=ON"
  86. "-DENABLE_EXAMPLES=ON"
  87. "-DENABLE_TEST=ON"
  88. "-DENABLE_MEMTRACE=ON")
  89. #:phases
  90. (modify-phases %standard-phases
  91. (add-after 'unpack 'patch-source
  92. (lambda _
  93. ;; Include BCunit headers for examples.
  94. (substitute* "Examples/CMakeLists.txt"
  95. (("\\$\\{CMAKE_CURRENT_SOURCE_DIR\\}")
  96. (string-append "${CMAKE_CURRENT_SOURCE_DIR} "
  97. "${PROJECT_SOURCE_DIR}/BCUnit/Headers "
  98. "${CMAKE_BINARY_DIR}/BCUnit/Headers")))
  99. ;; Link bcunit and bcunit_tests libraries.
  100. (substitute* "BCUnit/Sources/CMakeLists.txt"
  101. (("target_include_directories\\(bcunit_test PUBLIC Test\\)")
  102. (string-append
  103. "target_include_directories(bcunit_test PUBLIC Test)\n"
  104. "target_link_libraries(bcunit_test bcunit)")))))
  105. (replace 'check
  106. (lambda _
  107. (with-directory-excursion "BCUnit/Sources/Test"
  108. (invoke "./test_bcunit"))))
  109. (add-after 'install 'move-doc
  110. (lambda* (#:key outputs #:allow-other-keys)
  111. (let ((out (assoc-ref outputs "out"))
  112. (doc (assoc-ref outputs "doc")))
  113. (for-each mkdir-p
  114. `(,(string-append doc "/share/doc")
  115. ,(string-append doc "/share/BCUnit")))
  116. (rename-file
  117. (string-append out "/share/doc/BCUnit")
  118. (string-append doc "/share/doc/BCUnit"))
  119. (rename-file
  120. (string-append out "/share/BCUnit/Examples")
  121. (string-append doc "/share/BCUnit/Examples"))))))))
  122. (inputs
  123. `(("ncurses" ,ncurses)))
  124. (synopsis "Belledonne Communications Unit Testing Framework")
  125. (description "BCUnit is a fork of the defunct project CUnit, with
  126. several fixes and patches applied. It is a unit testing framework for
  127. writing, administering, and running unit tests in C.")
  128. (home-page "https://gitlab.linphone.org/BC/public/bcunit")
  129. (license license:lgpl2.0+))))
  130. (define-public bctoolbox
  131. (package
  132. (name "bctoolbox")
  133. (version "4.4.34")
  134. (source
  135. (origin
  136. (method git-fetch)
  137. (uri (git-reference
  138. (url "https://gitlab.linphone.org/BC/public/bctoolbox.git")
  139. (commit version)))
  140. (file-name (git-file-name name version))
  141. (sha256
  142. (base32 "0bfswwvvdshaahg4jd2j10f0sci8809s4khajd0m6b059zwc7y25"))))
  143. (build-system cmake-build-system)
  144. (outputs '("out" "debug"))
  145. (arguments
  146. `(#:configure-flags '("-DENABLE_STATIC=OFF")
  147. #:phases
  148. (modify-phases %standard-phases
  149. (add-after 'unpack 'patch-cmake
  150. (lambda* (#:key inputs #:allow-other-keys)
  151. ;; Fix decaf dependency (see:
  152. ;; https://gitlab.linphone.org/BC/public/bctoolbox/-/issues/3).
  153. (let* ((decaf (assoc-ref inputs "decaf")))
  154. (substitute* (find-files "." "CMakeLists.txt")
  155. (("find_package\\(Decaf CONFIG\\)")
  156. "set(DECAF_FOUND 1)")
  157. (("\\$\\{DECAF_INCLUDE_DIRS\\}")
  158. (string-append decaf "/include/decaf"))
  159. (("\\$\\{DECAF_TARGETNAME\\}")
  160. "decaf")))))
  161. (add-after 'unpack 'skip-problematic-tests
  162. (lambda _
  163. ;; The following test relies on networking; disable it.
  164. (substitute* "tester/port.c"
  165. (("[ \t]*TEST_NO_TAG.*bctbx_addrinfo_sort_test\\)")
  166. ""))))
  167. (add-after 'unpack 'fix-installed-resource-directory-detection
  168. (lambda _
  169. ;; There's some broken logic in tester.c that checks if CWD, or
  170. ;; if its parent exist, and if so, sets the prefix where the test
  171. ;; resources are looked up to; disable it (see:
  172. ;; https://gitlab.linphone.org/BC/public/bctoolbox/-/issues/4).
  173. (substitute* "src/tester.c"
  174. (("if \\(file_exists\\(\".\"\\)\\)")
  175. "if (NULL)")
  176. (("if \\(file_exists\\(\"..\"\\)\\)")
  177. "if (NULL)"))))
  178. (replace 'check
  179. (lambda _
  180. (with-directory-excursion "tester"
  181. (invoke "./bctoolbox_tester")))))))
  182. (inputs
  183. `(("bcunit" ,bcunit)
  184. ("decaf" ,libdecaf)
  185. ("mbedtls" ,mbedtls-apache)))
  186. (synopsis "Belledonne Communications Tool Box")
  187. (description "BcToolBox is an utilities library used by Belledonne
  188. Communications software like belle-sip, mediastreamer2 and linphone.")
  189. (home-page "https://gitlab.linphone.org/BC/public/bctoolbox")
  190. (license license:gpl3+)))
  191. (define-public belr
  192. (package
  193. (name "belr")
  194. (version "4.4.34")
  195. (source
  196. (origin
  197. (method git-fetch)
  198. (uri (git-reference
  199. (url "https://gitlab.linphone.org/BC/public/belr.git")
  200. (commit version)))
  201. (file-name (git-file-name name version))
  202. (sha256
  203. (base32 "0w2canwwm0qb99whnangvaybvjzq8xg6vksqxykgr8fbx7clw03h"))))
  204. (build-system cmake-build-system)
  205. (outputs '("out" "debug" "tester"))
  206. (arguments
  207. `(#:configure-flags '("-DENABLE_STATIC=OFF")
  208. #:phases
  209. (modify-phases %standard-phases
  210. (delete 'check) ;moved after the install phase
  211. (add-after 'install 'check
  212. (lambda* (#:key outputs #:allow-other-keys)
  213. (let* ((tester (assoc-ref outputs "tester"))
  214. (belr_tester (string-append tester "/bin/belr_tester"))
  215. (tester-share (string-append tester "/share/belr_tester")))
  216. (invoke belr_tester))))
  217. (add-after 'install 'move-tester
  218. (lambda* (#:key outputs #:allow-other-keys)
  219. (let* ((out (assoc-ref outputs "out"))
  220. (tester (assoc-ref outputs "tester")))
  221. (for-each mkdir-p
  222. (list (string-append tester "/bin")
  223. (string-append tester "/share")))
  224. (rename-file
  225. (string-append out "/bin/belr_tester")
  226. (string-append tester "/bin/belr_tester"))
  227. (rename-file
  228. (string-append out "/share/belr-tester")
  229. ;; The detect_res_prefix procedure in bctoolbox's tester.c
  230. ;; resolves the resource path based on the executable path and
  231. ;; name, so have it match.
  232. (string-append tester "/share/belr_tester"))))))))
  233. (inputs
  234. `(("bctoolbox" ,bctoolbox)))
  235. (synopsis "Belledonne Communications Language Recognition Library")
  236. (description "Belr is Belledonne Communications' language recognition
  237. library, written in C++11. It parses text inputs formatted according to a
  238. language defined by an ABNF grammar, such as the protocols standardized at
  239. IETF.")
  240. (home-page "https://gitlab.linphone.org/BC/public/belr")
  241. (license license:gpl3+)))
  242. (define-public belcard
  243. (package
  244. (name "belcard")
  245. (version "4.4.34")
  246. (source
  247. (origin
  248. (method git-fetch)
  249. (uri (git-reference
  250. (url "https://gitlab.linphone.org/BC/public/belcard.git")
  251. (commit version)))
  252. (file-name (git-file-name name version))
  253. (sha256
  254. (base32 "16x2xp8d0a115132zhy1kpxkyj86ia7vrsnpjdg78fnbvmvysc8m"))))
  255. (build-system cmake-build-system)
  256. (outputs '("out" "debug" "tester"))
  257. (arguments
  258. `(#:tests? #t
  259. #:configure-flags '("-DENABLE_STATIC=OFF")
  260. #:phases
  261. (modify-phases %standard-phases
  262. (add-after 'unpack 'patch-vcard-grammar-location
  263. (lambda* (#:key outputs #:allow-other-keys)
  264. (let* ((out (assoc-ref outputs "out"))
  265. (vcard-grammar
  266. (string-append out "/share/belr/grammars/vcard_grammar")))
  267. (substitute* "include/belcard/vcard_grammar.hpp"
  268. (("define VCARD_GRAMMAR \"vcard_grammar\"")
  269. (format #f "define VCARD_GRAMMAR ~s" vcard-grammar))))))
  270. (add-after 'install 'install-tester
  271. (lambda* (#:key inputs outputs #:allow-other-keys)
  272. (let ((out (assoc-ref outputs "out"))
  273. (tester (assoc-ref outputs "tester"))
  274. (test-name (string-append ,name "_tester")))
  275. (for-each mkdir-p
  276. (list (string-append tester "/bin")
  277. (string-append tester "/share")))
  278. (rename-file (string-append out "/bin/" test-name)
  279. (string-append tester "/bin/" test-name))
  280. (rename-file (string-append out "/share/" test-name)
  281. (string-append tester "/share/" test-name)))))
  282. (delete 'check)
  283. (add-after 'install-tester 'check
  284. (lambda* (#:key inputs outputs tests? #:allow-other-keys)
  285. (when tests?
  286. (let* ((tester (assoc-ref outputs "tester"))
  287. (belcard_tester (string-append tester
  288. "/bin/belcard_tester")))
  289. (invoke belcard_tester))))))))
  290. (inputs
  291. `(("bctoolbox" ,bctoolbox)
  292. ("belr" ,belr)))
  293. (synopsis "Belledonne Communications VCard Library")
  294. (description "Belcard is a C++ library to manipulate VCard standard
  295. format.")
  296. (home-page "https://gitlab.linphone.org/BC/public/belcard")
  297. (license license:gpl3+)))
  298. (define-public bcmatroska2
  299. (package
  300. (name "bcmatroska2")
  301. (version "0.23")
  302. (source
  303. (origin
  304. (method git-fetch)
  305. (uri (git-reference
  306. (url "https://gitlab.linphone.org/BC/public/bcmatroska2.git")
  307. (commit version)))
  308. (file-name (git-file-name name version))
  309. (sha256
  310. (base32 "1avl9w18kh4dxm3g8j0bkw39bksd7bz3nfxvyibqqnz63ds8vfi2"))))
  311. (build-system cmake-build-system)
  312. (arguments
  313. `(#:tests? #f ; No test target
  314. #:configure-flags (list "-DENABLE_STATIC=NO"))) ; Not required
  315. (synopsis "Belledonne Communications Media Container")
  316. (description "BcMatroska is a free and open standard multi-media container
  317. format. It can hold an unlimited number of video, audio, picture, or subtitle
  318. tracks in one file. This project provides a convenient distribution of the
  319. Matroska multimedia container format.")
  320. (home-page "https://gitlab.linphone.org/BC/public/bcmatroska2")
  321. (license (list license:gpl2+ ;for this package (build system files)
  322. license:bsd-4 ;for Core C and LibEBML2
  323. license:lgpl2.1+)))) ;for LibMatroska2
  324. (define-public bcg729
  325. (package
  326. (name "bcg729")
  327. (version "1.1.1")
  328. (source
  329. (origin
  330. (method git-fetch)
  331. (uri (git-reference
  332. (url "git://git.linphone.org/bcg729")
  333. (commit version)))
  334. (file-name (git-file-name name version))
  335. (sha256
  336. (base32 "1hal6b3w6f8y5r1wa0xzj8sj2jjndypaxyw62q50p63garp2h739"))))
  337. (build-system cmake-build-system)
  338. (arguments
  339. `(#:configure-flags (list "-DENABLE_STATIC=NO"
  340. "-DENABLE_TESTS=YES")
  341. #:phases
  342. (modify-phases %standard-phases
  343. (add-before 'check 'copy-inputs
  344. (lambda* (#:key inputs #:allow-other-keys)
  345. (let ((test-patterns (assoc-ref inputs "test-patterns"))
  346. (dest (string-append "test/bcg729-patterns.zip")))
  347. (copy-recursively test-patterns dest))))
  348. (replace 'check
  349. (lambda _
  350. (with-directory-excursion "test"
  351. (invoke "unzip" "bcg729-patterns.zip")
  352. (for-each
  353. (lambda (test-name)
  354. (invoke "./testCampaign" "-s" test-name))
  355. (list "fixedCodebookSearch"
  356. "postProcessing"
  357. "adaptativeCodebookSearch"
  358. "computeLP"
  359. "computeAdaptativeCodebookGain"
  360. "postFilter"
  361. "decoder"
  362. "LPSynthesisFilter"
  363. "decodeLSP"
  364. ;; "encoder"
  365. ;; "LSPQuantization"
  366. "preProcessing"
  367. "decodeFixedCodeVector"
  368. "CNGdecoder"
  369. ;; "LP2LSPConversion"
  370. "gainQuantization"
  371. "findOpenLoopPitchDelay"
  372. "decodeGains"
  373. "computeWeightedSpeech"
  374. "interpolateqLSPAndConvert2LP"
  375. "decodeAdaptativeCodeVector"))))))))
  376. (native-inputs
  377. `(("perl" ,perl)
  378. ("test-patterns"
  379. ,(origin
  380. (method url-fetch)
  381. (uri (string-append "http://www.belledonne-communications.com/"
  382. "bc-downloads/bcg729-patterns.zip"))
  383. (sha256
  384. (base32 "1kivarhh3izrl9sg0szs6x6pbq2ap0y6xsraw0gbgspi4gnfihrh"))))
  385. ("unzip" ,unzip)))
  386. (synopsis "Belledonne Communications G729 Codec")
  387. (description "BcG729 is an implementation of both encoder and decoder of
  388. the ITU G729 speech codec. The library written in C 99 is fully portable and
  389. can be executed on many platforms including both ARM and x86 processors. It
  390. supports concurrent channels encoding and decoding for multi call application
  391. such as conferencing.")
  392. (home-page "https://linphone.org/technical-corner/bcg729")
  393. (license license:gpl3+)))
  394. (define-public ortp
  395. (package
  396. (name "ortp")
  397. (version "4.4.34")
  398. (source
  399. (origin
  400. (method git-fetch)
  401. (uri (git-reference
  402. (url "https://gitlab.linphone.org/BC/public/ortp.git")
  403. (commit version)))
  404. (file-name (git-file-name name version))
  405. (sha256
  406. (base32 "1r1kvjzyfvkf66in4p51wi87balzg3sw3aq6r4xr609mz86spi5m"))))
  407. (build-system cmake-build-system)
  408. (outputs '("out""tester"
  409. "doc")) ;1.5 MiB of HTML doc
  410. (arguments
  411. `(#:tests? #f ;requires networking
  412. #:configure-flags (list "-DENABLE_STATIC=NO"
  413. "-DENABLE_TESTS=YES")
  414. #:phases
  415. (modify-phases %standard-phases
  416. (add-after 'unpack 'fix-version-strings
  417. ;; See: https://gitlab.linphone.org/BC/public/ortp/-/issues/5.
  418. (lambda _
  419. (substitute* "CMakeLists.txt"
  420. (("VERSION [0-9]+\\.[0-9]+\\.[0-9]+")
  421. (string-append "VERSION " ,version))
  422. (("\\$\\{ORTP_DOC_VERSION\\}")
  423. ,version))))
  424. (add-after 'install 'separate-outputs
  425. (lambda* (#:key outputs #:allow-other-keys)
  426. (let* ((out (assoc-ref outputs "out"))
  427. (doc (assoc-ref outputs "doc"))
  428. (doc-src (string-append out "/share/doc/ortp-" ,version))
  429. (doc-dest (string-append doc "/share/doc/ortp-" ,version))
  430. (tester (assoc-ref outputs "tester")))
  431. (for-each mkdir-p (list (string-append doc "/share/doc")
  432. (string-append tester "/bin")))
  433. (rename-file doc-src doc-dest)
  434. (rename-file (string-append out "/bin")
  435. (string-append tester "/bin"))))))))
  436. (native-inputs
  437. `(("dot" ,graphviz)
  438. ("doxygen" ,doxygen)))
  439. (inputs
  440. `(("bctoolbox" ,bctoolbox)))
  441. (synopsis "Belledonne Communications RTP Library")
  442. (description "oRTP is a C library implementing the RTP protocol. It
  443. implements the RFC 3550 standard.")
  444. (home-page "https://linphone.org/technical-corner/ortp")
  445. (license license:gpl3+)))
  446. (define-public bzrtp
  447. (package
  448. (name "bzrtp")
  449. (version "4.4.34")
  450. (source
  451. (origin
  452. (method git-fetch)
  453. (uri (git-reference
  454. (url "https://gitlab.linphone.org/BC/public/bzrtp")
  455. (commit version)))
  456. (file-name (git-file-name name version))
  457. (sha256
  458. (base32 "1yjmsbqmymzl4r7sba6w4a2yld8m6hzafr6jf7sj0syhwpnc3zv6"))))
  459. (build-system cmake-build-system)
  460. (arguments
  461. `(#:configure-flags
  462. (list
  463. "-DENABLE_STATIC=NO"
  464. "-DENABLE_TESTS=YES")))
  465. (inputs
  466. `(("bctoolbox" ,bctoolbox)
  467. ("sqlite3" ,sqlite)
  468. ("xml2" ,libxml2)))
  469. (synopsis "Belledonne Communications ZRTP Library")
  470. (description "BZRTP is an implementation of ZRTP keys exchange protocol,
  471. written in C. It is fully portable and can be executed on many platforms
  472. including both ARM and x86.")
  473. (home-page "https://gitlab.linphone.org/BC/public/bzrtp")
  474. (license license:gpl3+)))
  475. (define-public belle-sip
  476. (package
  477. (name "belle-sip")
  478. (version "4.4.34")
  479. (source
  480. (origin
  481. (method git-fetch)
  482. (uri (git-reference
  483. (url "https://gitlab.linphone.org/BC/public/belle-sip.git")
  484. (commit version)))
  485. (file-name (git-file-name name version))
  486. (sha256
  487. (base32 "1kknnlczq7dpqaj1dwxvy092dzrqjy11ndkv90rqwmdryigkjk6z"))))
  488. (build-system cmake-build-system)
  489. (outputs '("out" "tester"))
  490. (arguments
  491. `(#:configure-flags (list "-DENABLE_STATIC=NO"
  492. "-DENABLE_MDNS=ON")
  493. #:phases
  494. (modify-phases %standard-phases
  495. (add-after 'unpack 'patch
  496. (lambda* (#:key inputs #:allow-other-keys)
  497. ;; Fix mDNS dependency.
  498. (let* ((avahi (assoc-ref inputs "avahi")))
  499. (substitute* (find-files "." "CMakeLists.txt")
  500. (("find_package\\(DNSSD REQUIRED\\)")
  501. "set(DNSSD_FOUND 1)")
  502. (("\\$\\{DNSSD_INCLUDE_DIRS\\}")
  503. (string-append avahi "/include/avahi-compat-libdns_sd"))
  504. (("\\$\\{DNSSD_LIBRARIES\\}")
  505. "dns_sd")))
  506. (substitute* "src/CMakeLists.txt"
  507. ;; ANTLR would use multithreaded DFA generation otherwise,
  508. ;; which would not be reproducible.
  509. (("-Xmultithreaded ") ""))))
  510. (delete 'check) ;move after install
  511. (add-after 'install 'separate-outputs
  512. (lambda* (#:key outputs #:allow-other-keys)
  513. (let* ((out (assoc-ref outputs "out"))
  514. (tester (assoc-ref outputs "tester"))
  515. (tester-name "belle_sip_tester"))
  516. (for-each mkdir-p (list (string-append tester "/bin")
  517. (string-append tester "/share")))
  518. (rename-file (string-append out "/bin")
  519. (string-append tester "/bin"))
  520. (rename-file (string-append out "/share/" tester-name)
  521. (string-append tester "/share/" tester-name)))))
  522. (add-after 'separate-outputs 'check
  523. (lambda* (#:key outputs #:allow-other-keys)
  524. (let ((tester (string-append (assoc-ref outputs "tester")
  525. "/bin/belle_sip_tester")))
  526. (for-each (lambda (suite-name)
  527. (invoke tester "--suite" suite-name))
  528. (list "Object inheritance"
  529. "SIP URI"
  530. "FAST SIP URI"
  531. "FAST SIP URI 2"
  532. "Generic uri"
  533. "Headers"
  534. "Core"
  535. "SDP"
  536. ;;"Resolver"
  537. "Message"
  538. "Authentication helper"
  539. ;;"Register"
  540. ;;"Dialog"
  541. "Refresher"
  542. ;;"HTTP stack"
  543. "Object"))))))))
  544. (inputs
  545. `(("avahi" ,avahi)
  546. ("bctoolbox" ,bctoolbox)
  547. ("zlib" ,zlib)))
  548. (synopsis "Belledonne Communications SIP Library")
  549. (description "Belle-sip is a modern library implementing SIP transport,
  550. transaction and dialog layers. It is written in C, with an object-oriented
  551. API. It also comprises a simple HTTP/HTTPS client implementation.")
  552. (home-page "https://linphone.org/technical-corner/belle-sip")
  553. (license license:gpl3+)))
  554. (define-public mediastreamer2
  555. (package
  556. (name "mediastreamer2")
  557. (version "4.4.34")
  558. (source
  559. (origin
  560. (method git-fetch)
  561. (uri (git-reference
  562. (url "https://gitlab.linphone.org/BC/public/mediastreamer2.git")
  563. (commit version)))
  564. (file-name (git-file-name name version))
  565. (sha256
  566. (base32 "0989h3d0h7qrx4kjx8gg09j8c5hvvi3h8qi1iq1dqbppwbaxbz8c"))))
  567. (outputs '("out" "doc" "tester"))
  568. (build-system cmake-build-system)
  569. (arguments
  570. `(#:configure-flags (list "-DENABLE_STATIC=NO"
  571. "-DENABLE_PCAP=YES"
  572. ;; Do not fail on compile warnings.
  573. "-DENABLE_STRICT=NO"
  574. "-DENABLE_PORTAUDIO=YES"
  575. "-DENABLE_G729B_CNG=YES")
  576. #:phases
  577. (modify-phases %standard-phases
  578. (add-after 'unpack 'fix-version
  579. (lambda _
  580. (substitute* "CMakeLists.txt"
  581. (("VERSION [0-9]+\\.[0-9]+\\.[0-9]+")
  582. (string-append "VERSION " ,version)))))
  583. (add-after 'unpack 'patch-source
  584. (lambda _
  585. (substitute* "src/otherfilters/mspcapfileplayer.c"
  586. (("O_BINARY") "L_INCR"))))
  587. (add-before 'check 'pre-check
  588. (lambda _
  589. ;; Tests require a running X server.
  590. (system "Xvfb :1 +extension GLX &")
  591. (setenv "DISPLAY" ":1")
  592. ;; Tests write to $HOME.
  593. (setenv "HOME" (getenv "TEMP"))))
  594. (delete 'check) ;move after install
  595. (add-after 'install 'separate-outputs
  596. (lambda* (#:key outputs #:allow-other-keys)
  597. (let* ((out (assoc-ref outputs "out"))
  598. (tester (assoc-ref outputs "tester"))
  599. (tester-name (string-append ,name "_tester"))
  600. (doc (assoc-ref outputs "doc"))
  601. (doc-name (string-append ,name "-" ,version)))
  602. (for-each mkdir-p
  603. (list (string-append tester "/bin")
  604. (string-append tester "/share")
  605. (string-append doc "/share/doc")))
  606. ;; Move the tester executable.
  607. (rename-file (string-append out "/bin/" tester-name)
  608. (string-append tester "/bin/" tester-name))
  609. ;; Move the tester data files.
  610. (rename-file (string-append out "/share/" tester-name)
  611. (string-append tester "/share/" tester-name))
  612. ;; Move the HTML documentation.
  613. (rename-file (string-append out "/share/doc/" doc-name)
  614. (string-append doc "/share/doc/" doc-name)))))
  615. (add-after 'separate-outputs 'check
  616. (lambda* (#:key outputs #:allow-other-keys)
  617. (let ((tester (string-append (assoc-ref outputs "tester")
  618. "/bin/mediastreamer2_tester")))
  619. (for-each (lambda (suite-name)
  620. (invoke tester "--suite" suite-name))
  621. ;; Some tests fail, due to requiring access to the
  622. ;; sound card or the network.
  623. (list "Basic Audio"
  624. ;; "Sound Card"
  625. ;; "AdaptiveAlgorithm"
  626. ;; "AudioStream"
  627. ;; "VideoStream"
  628. "H26x Tools"
  629. "Framework"
  630. ;; "Player"
  631. "TextStream"))))))))
  632. (native-inputs
  633. `(("dot" ,graphviz)
  634. ("doxygen" ,doxygen)
  635. ("python" ,python-wrapper)
  636. ("xorg-server" ,xorg-server-for-tests)))
  637. (inputs
  638. `(("alsa" ,alsa-lib)
  639. ("bcg729" ,bcg729)
  640. ("bcmatroska2" ,bcmatroska2)
  641. ("bctoolbox" ,bctoolbox)
  642. ("ffmpeg" ,ffmpeg)
  643. ("glew" ,glew)
  644. ("glu" ,glu)
  645. ("glx" ,mesa-utils)
  646. ("gsm" ,gsm)
  647. ("opengl" ,mesa)
  648. ("opus" ,opus)
  649. ("ortp" ,ortp)
  650. ("pcap" ,libpcap)
  651. ("portaudio" ,portaudio)
  652. ("pulseaudio" ,pulseaudio)
  653. ("spandsp" ,spandsp)
  654. ("speex" ,speex)
  655. ("speexdsp" ,speexdsp)
  656. ("srtp" ,libsrtp)
  657. ("theora" ,libtheora)
  658. ("turbojpeg" ,libjpeg-turbo)
  659. ("v4l" ,v4l-utils)
  660. ("vpx" ,libvpx)
  661. ("x11" ,libx11)
  662. ("xv" ,libxv)
  663. ("zrtp" ,bzrtp)))
  664. (synopsis "Belledonne Communications Streaming Engine")
  665. (description "Mediastreamer2 is a powerful and lightweight streaming engine
  666. for telephony applications. This media processing and streaming toolkit is
  667. responsible for receiving and sending all multimedia streams in Linphone,
  668. including media capture, encoding and decoding, and rendering.")
  669. (home-page "https://linphone.org/technical-corner/mediastreamer2")
  670. (license license:gpl3+)))
  671. (define-public lime
  672. (package
  673. (name "lime")
  674. (version "4.4.34")
  675. (source
  676. (origin
  677. (method git-fetch)
  678. (uri (git-reference
  679. (url "https://gitlab.linphone.org/BC/public/lime.git")
  680. (commit version)))
  681. (file-name (git-file-name name version))
  682. (sha256
  683. (base32 "14jg1zisjbzflw3scfqdbwy48wq3cp93l867vigb8l40lkc6n26z"))))
  684. (build-system cmake-build-system)
  685. (outputs '("out" "doc"))
  686. (arguments
  687. `(#:configure-flags (list "-DENABLE_STATIC=NO"
  688. "-DENABLE_C_INTERFACE=YES")
  689. #:phases
  690. (modify-phases %standard-phases
  691. (add-after 'unpack 'patch-source
  692. (lambda _
  693. ;; Disable tests that require networking.
  694. (substitute* "tester/CMakeLists.txt"
  695. (("add_test\\(?.*\"Hello World\"\\)") "")
  696. (("add_test\\(?.*\"lime\"\\)") "")
  697. (("add_test\\(?.*\"FFI\"\\)") ""))))
  698. (add-after 'build 'build-doc
  699. (lambda _
  700. (invoke "make" "doc")))
  701. (add-after 'install 'install-doc
  702. (lambda* (#:key outputs #:allow-other-keys)
  703. (let* ((doc (assoc-ref outputs "doc"))
  704. (dir (string-append doc "/share/doc"))
  705. (dest (string-append dir "/" ,name "-" ,version)))
  706. (mkdir-p dest)
  707. (copy-recursively "doc" dest)))))))
  708. (native-inputs
  709. `(("dot" ,graphviz)
  710. ("doxygen" ,doxygen)))
  711. (inputs
  712. `(("bctoolbox" ,bctoolbox)
  713. ("belle-sip" ,belle-sip)
  714. ("soci" ,soci)))
  715. (synopsis "Belledonne Communications Encryption Library")
  716. (description "LIME is an encryption library for one-to-one and group
  717. instant messaging, allowing users to exchange messages privately and
  718. asynchronously. It supports multiple devices per user and multiple users per
  719. device.")
  720. (home-page "https://linphone.org/technical-corner/lime")
  721. (license license:gpl3+)))
  722. (define-public liblinphone
  723. (package
  724. (name "liblinphone")
  725. (version "4.4.34")
  726. (source
  727. (origin
  728. (method git-fetch)
  729. (uri (git-reference
  730. (url "https://gitlab.linphone.org/BC/public/liblinphone.git")
  731. (commit version)))
  732. (file-name (git-file-name name version))
  733. (sha256
  734. (base32 "1lwabr93jw24y04pdqnw9dgg8jb3lzfplyx19f83jgp9dj8kmfq9"))))
  735. (outputs '("out" "tester"))
  736. (build-system cmake-build-system)
  737. (arguments
  738. `(#:tests? #f ; Tests require networking
  739. #:configure-flags (list "-DENABLE_STATIC=NO"
  740. "-DENABLE_DOC=NO" ;requires unpackaged javasphinx
  741. "-DENABLE_LDAP=YES")
  742. #:phases
  743. (modify-phases %standard-phases
  744. (add-after 'install 'separate-outputs
  745. (lambda* (#:key outputs #:allow-other-keys)
  746. (let* ((out (assoc-ref outputs "out"))
  747. (tester (assoc-ref outputs "tester"))
  748. (tester-name (string-append ,name "_tester")))
  749. (for-each mkdir-p
  750. (list (string-append tester "/bin")
  751. (string-append tester "/share")))
  752. (rename-file (string-append out "/bin/" tester-name)
  753. (string-append tester "/bin/" tester-name))
  754. (rename-file (string-append out "/bin/groupchat_benchmark")
  755. (string-append tester "/bin/groupchat_benchmark"))
  756. (rename-file (string-append out "/share/" tester-name)
  757. (string-append tester "/share/" tester-name))))))))
  758. (native-inputs
  759. `(("dot" ,graphviz)
  760. ("doxygen" ,doxygen)
  761. ("gettext" ,gettext-minimal)
  762. ("perl" ,perl)
  763. ("python" ,python-wrapper)
  764. ("pystache" ,python-pystache)
  765. ("six" ,python-six)
  766. ("udev" ,eudev)))
  767. (inputs
  768. `(("bctoolbox" ,bctoolbox)
  769. ("belcard" ,belcard)
  770. ("bellesip" ,belle-sip)
  771. ("belr" ,belr)
  772. ("bzrtp" ,bzrtp)
  773. ("iconv" ,libiconv)
  774. ("ldap" ,openldap)
  775. ("libxsd" ,xsd)
  776. ("lime" ,lime)
  777. ("mediastreamer2" ,mediastreamer2)
  778. ("notify" ,libnotify)
  779. ("ortp" ,ortp)
  780. ("soci" ,soci)
  781. ("sqlite" ,sqlite)
  782. ("xml2" ,libxml2)
  783. ("zlib" ,zlib)))
  784. (synopsis "Belledonne Communications Softphone Library")
  785. (description "Liblinphone is a high-level SIP library integrating
  786. all calling and instant messaging features into an unified
  787. easy-to-use API. It is the cross-platform VoIP library on which the
  788. Linphone application is based on, and that anyone can use to add audio
  789. and video calls or instant messaging capabilities to an application.")
  790. (home-page "https://linphone.org/technical-corner/liblinphone")
  791. (license license:gpl3+)))
  792. (define-public linphone-desktop
  793. (package
  794. (name "linphone-desktop")
  795. (version "4.2.5")
  796. (source
  797. (origin
  798. (method git-fetch)
  799. (uri (git-reference
  800. (url "https://gitlab.linphone.org/BC/public/linphone-desktop")
  801. (commit version)))
  802. (file-name (git-file-name name version))
  803. (sha256
  804. (base32 "1gq4l9p21rbrcksa7fbkzn9fzbbynqmn6ni6lhnvzk359sb1xvbz"))
  805. (patches (search-patches "linphone-desktop-without-sdk.patch"))))
  806. (build-system qt-build-system)
  807. (outputs '("out" "debug"))
  808. (arguments
  809. `(#:tests? #f ; No test target
  810. #:configure-flags (list "-DENABLE_UPDATE_CHECK=NO"
  811. "-DENABLE_DAEMON=YES"
  812. "-DENABLE_CONSOLE_UI=YES")
  813. #:phases
  814. (modify-phases %standard-phases
  815. (add-after 'unpack 'pre-configure
  816. (lambda _
  817. (make-file-writable "linphone-app/linphoneqt_version.cmake")
  818. (substitute* "linphone-app/linphoneqt_version.cmake"
  819. (("\\$\\{GUIX-SET-VERSION\\}") ,version))))
  820. (add-after 'install 'post-install
  821. (lambda* (#:key inputs outputs #:allow-other-keys)
  822. (let* ((out (assoc-ref outputs "out"))
  823. (liblinphone (assoc-ref inputs "liblinphone"))
  824. (grammar-dest (string-append out "/share/belr/grammars")))
  825. ;; Remove unnecessary Qt configuration file.
  826. (delete-file (string-append out "/bin/qt.conf"))
  827. ;; Not using the FHS exposes an issue where the client
  828. ;; refers to its own directories, which lacks files
  829. ;; installed by the dependencies.
  830. (symlink (string-append liblinphone "/lib")
  831. (string-append out "/lib"))
  832. (symlink (string-append liblinphone "/share/sounds")
  833. (string-append out "/share/sounds"))
  834. (symlink (string-append liblinphone "/share/linphone/rootca.pem")
  835. (string-append out "/share/linphone/rootca.pem"))
  836. (mkdir-p (dirname grammar-dest))
  837. (symlink (string-append liblinphone "/share/belr/grammars")
  838. grammar-dest)))))))
  839. (native-inputs
  840. `(("pkg-config" ,pkg-config)
  841. ("qttools" ,qttools)))
  842. (inputs
  843. `(("bctoolbox" ,bctoolbox)
  844. ("belcard" ,belcard)
  845. ("belr" ,belr)
  846. ("liblinphone" ,liblinphone)
  847. ("mediastreamer2" ,mediastreamer2)
  848. ("ortp" ,ortp)
  849. ("qtbase" ,qtbase-5)
  850. ("qtdeclarative" ,qtdeclarative)
  851. ("qtgraphicaleffects" ,qtgraphicaleffects)
  852. ("qtquickcontrols" ,qtquickcontrols)
  853. ("qtquickcontrols2" ,qtquickcontrols2)
  854. ("qtsvg" ,qtsvg)))
  855. (synopsis "Desktop client for the Linphone SIP softphone")
  856. (description "Linphone is a SIP softphone for voice and video over IP calling
  857. (VoIP) and instant messaging. Amongst its features are:
  858. @itemize
  859. @item High Definition (HD) audio and video calls
  860. @item Multiple call management (pause and resume)
  861. @item Call transfer
  862. @item Audio conferencing (merge calls into a conference call)
  863. @item Call recording and replay (audio only)
  864. @item Instant Messaging with message delivery status (IMDN)
  865. @item Picture and file sharing
  866. @item Echo cancellation
  867. @item Secure user authentication using TLS client certificates
  868. @item SRTP, zRTP and SRTP-DTLS voice and video encryption
  869. @item Telephone tone (DTMF) support using SIP INFO or RFC 4733
  870. @item Audio codecs: opus, speex, g711, g729, gsm, iLBC, g722, SILK, etc.
  871. @item Video codecs: VP8, H.264 and H.265 with resolutions up to 1080P, MPEG4
  872. @end itemize")
  873. (home-page "https://linphone.org/technical-corner/linphone")
  874. (license license:gpl3+)))
  875. (define-public linphoneqt
  876. (deprecated-package "linphoneqt" linphone-desktop))
  877. (define-public msopenh264
  878. (let ((commit "88697cc95140017760d6da408cb0efdc5e86e40a")
  879. (revision "0"))
  880. (package
  881. (name "msopenh264")
  882. (version (git-version "1.2.1" revision commit))
  883. (source
  884. (origin
  885. (method git-fetch)
  886. (uri (git-reference
  887. (url "https://gitlab.linphone.org/BC/public/msopenh264.git")
  888. (commit commit)))
  889. (file-name (git-file-name name version))
  890. (sha256
  891. (base32 "10y3b6s934f2wbsf60b3p0g6hffizjqrj5in8l4sida2fjdxlwwy"))))
  892. (build-system cmake-build-system)
  893. (arguments
  894. `(#:tests? #f ; No test target
  895. #:configure-flags
  896. (list "-DENABLE_STATIC=NO"))) ; Not required
  897. (inputs
  898. `(("bctoolbox" ,bctoolbox)
  899. ("mediastreamer2" ,mediastreamer2)
  900. ("openh264" ,openh264)
  901. ("ortp" ,ortp)))
  902. (synopsis "Media Streamer H.264 Codec")
  903. (description "MsOpenH264 is an H.264 encoder/decoder plugin for
  904. mediastreamer2 based on the openh264 library.")
  905. (home-page "https://gitlab.linphone.org/BC/public/msopenh264")
  906. (license license:gpl2+))))
  907. (define-public mssilk
  908. (let ((commit "dd0f31ee795faa7ea89e601b072dae4cd1df7e3f")
  909. (revision "0"))
  910. (package
  911. (name "mssilk")
  912. (version (git-version "1.1.1" revision commit))
  913. (source
  914. (origin
  915. (method git-fetch)
  916. (uri (git-reference
  917. (url "https://gitlab.linphone.org/BC/public/mssilk.git")
  918. (commit commit)))
  919. (file-name (git-file-name name version))
  920. (sha256
  921. (base32 "1dann5fnzqp6wjlwc6bl2k9b6rvn6bznqb3qsi1kgv9dnq44cbr0"))))
  922. (build-system cmake-build-system)
  923. (arguments
  924. `(#:tests? #f ; No test target
  925. #:configure-flags
  926. (list "-DENABLE_STATIC=NO"))) ; Not required
  927. (inputs
  928. `(("bctoolbox" ,bctoolbox)
  929. ("mediastreamer2" ,mediastreamer2)
  930. ("ortp" ,ortp)))
  931. (synopsis "Media Streamer SILK Codec")
  932. (description "MSSILK is a plugin of MediaStreamer, adding support for AMR
  933. codec. It is based on the Skype's SILK implementation.")
  934. (home-page "https://gitlab.linphone.org/BC/public/mssilk")
  935. (license license:gpl2+))))
  936. (define-public mswebrtc
  937. (let ((commit "946ca706733f36a6b4923f04e569531125462d1d")
  938. (revision "0"))
  939. (package
  940. (name "mswebrtc")
  941. (version (git-version "1.1.1" revision commit))
  942. (source
  943. (origin
  944. (method git-fetch)
  945. (uri (git-reference
  946. (url "https://gitlab.linphone.org/BC/public/mswebrtc")
  947. (commit commit)))
  948. (file-name (git-file-name name version))
  949. (sha256
  950. (base32 "1pfg9m6bpbv0f53nx72rdxhlyriax9pg4yj0gpwq8ha6lqnpwg1x"))))
  951. (build-system cmake-build-system)
  952. (arguments
  953. `(#:tests? #f ; No test target
  954. #:configure-flags
  955. (list
  956. "-DENABLE_STATIC=NO")
  957. #:phases
  958. (modify-phases %standard-phases
  959. (add-after 'unpack 'copy-inputs
  960. (lambda* (#:key inputs outputs #:allow-other-keys)
  961. (let* ((webrtc-from (assoc-ref inputs "webrtc"))
  962. (webrtc-to (string-append (getcwd) "/webrtc")))
  963. (copy-recursively webrtc-from webrtc-to))
  964. #t)))))
  965. (native-inputs
  966. `(("webrtc"
  967. ,(origin
  968. (method git-fetch)
  969. (uri
  970. (git-reference
  971. (url "https://gitlab.linphone.org/BC/public/external/webrtc")
  972. (commit "583acd27665cfadef8ab03eb85a768d308bd29dd")))
  973. (file-name
  974. (git-file-name "webrtc-for-mswebrtc" version))
  975. (sha256
  976. (base32
  977. "1maqychrgwy0z4zypa03qp726l2finw64z6cymdzhd58ql3p1lvm"))))
  978. ("python" ,python-wrapper)))
  979. (inputs
  980. `(("bctoolbox" ,bctoolbox)
  981. ("mediastreamer2" ,mediastreamer2)
  982. ("ortp" ,ortp)))
  983. (synopsis "Media Streamer WebRTC Codec")
  984. (description "MSWebRTC is a plugin of MediaStreamer, adding support for
  985. WebRTC codec. It includes features from WebRTC, such as, iSAC and AECM.")
  986. (home-page "https://gitlab.linphone.org/BC/public/mswebrtc")
  987. (license license:gpl2+))))
  988. (define-public msamr
  989. (let ((commit "5ab5c098299107048dfcbfc741f7392faef167bd")
  990. (revision "0"))
  991. (package
  992. (name "msamr")
  993. (version (git-version "1.1.3" revision commit))
  994. (source
  995. (origin
  996. (method git-fetch)
  997. (uri (git-reference
  998. (url "https://gitlab.linphone.org/BC/public/msamr")
  999. (commit commit)))
  1000. (file-name (git-file-name name version))
  1001. (sha256
  1002. (base32 "1g79lw1qi1mlw3v1b0cixmqiwjql81gz9naakb15n8pvaag9aaqm"))))
  1003. (build-system cmake-build-system)
  1004. (arguments
  1005. `(#:tests? #f ; No test target
  1006. #:configure-flags
  1007. (list "-DENABLE_STATIC=NO" ; Not required
  1008. "-DENABLE_WIDEBAND=YES")))
  1009. (inputs
  1010. `(("bctoolbox" ,bctoolbox)
  1011. ("mediastreamer2" ,mediastreamer2)
  1012. ("opencoreamr" ,opencore-amr)
  1013. ("ortp" ,ortp)
  1014. ("voamrwbenc" ,vo-amrwbenc)))
  1015. (synopsis "Media Streamer AMR Codec")
  1016. (description "MSAMR is a plugin of MediaStreamer, adding support for AMR
  1017. codec. It is based on the opencore-amr implementation.")
  1018. (home-page "https://gitlab.linphone.org/BC/public/msamr")
  1019. (license license:gpl3+))))