gnu: racket: Use Git origins for Racket packages.

* gnu/packages/patches/racket-gui-tethered-launcher-backport.patch:
Adjust path.
* gnu/packages/racket.scm (racket-packages-origin)
(simple-racket-origin): New procedures.
(extend-layer): Rename to ...
(configure-layer.rkt): ... this variable.  Tweak command-line arguments.
Adapt to 'config-tethered-apps-dir'.
(racket): Stop inheriting from 'racket-minimal'.
[version]: Use '%racket-version'.
[source]: Stop using bundled tarball.
[inputs]: Remove labels. Add 'racket-minimal' and package sources.
[native-inputs]: Reduce to racket-minimal.
Untested, as cross-compilation doesn't work yet.
[arguments]: Rewrite to use G-expressions, package sources from
'inputs', an explicit 'install' phase, and the revised
'configure-layer.rkt'.

Signed-off-by: Liliana Marie Prikler <liliana.prikler@gmail.com>
This commit is contained in:
Philip McGrath 2022-02-27 16:28:59 -05:00 committed by Liliana Marie Prikler
parent 56cf53fb7b
commit 81e532ff19
No known key found for this signature in database
GPG key ID: 442A84B8C70E2F87
2 changed files with 540 additions and 180 deletions

View file

@ -7,13 +7,13 @@ Related to racket/racket#4133
(cherry picked from commit 563c68432f127729592f234ef30c31e92618b517)
---
share/pkgs/gui-lib/mred/installer.rkt | 3 ++-
gui-lib/mred/installer.rkt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gui-lib/mred/installer.rkt b/gui-lib/mred/installer.rkt
index b1691472..9ef06c53 100644
--- a/share/pkgs/gui-lib/mred/installer.rkt
+++ b/share/pkgs/gui-lib/mred/installer.rkt
--- a/gui-lib/mred/installer.rkt
+++ b/gui-lib/mred/installer.rkt
@@ -72,4 +72,5 @@
(list "-A" (path->string (find-system-path 'addon-dir)))))

View file

@ -28,7 +28,9 @@ (define-module (gnu packages racket)
#:use-module (guix gexp)
#:use-module (guix build-system gnu)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:use-module (ice-9 exceptions)
#:use-module (gnu packages)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bash)
@ -389,171 +391,505 @@ (define-public racket-bootstrap-chez-bootfiles
Chez Scheme.")
(license (list license:asl2.0)))))
(define (racket-packages-origin name origin specs)
"Extract from ORIGIN the sources for the Racket packages specified by SPECS,
a non-empty list of package specifications. In the resulting file-like
object, each package's source will be in the directory
\"/share/racket/pkgs/PKG/\", where PKG is the Racket name for the package.
The NAME will be used in the store file name for the resulting file-like
object.
(define %installer-mirrors
;; Source:
;; https://github.com/racket/racket-lang-org/blob/master/download/data.rkt#L58
;; Matthew Flatt says: "note that many are commented out"
;; INVARIANT: End with a trailing "/"!
'("https://mirror.racket-lang.org/installers/"
"https://www.cs.utah.edu/plt/installers/"
"https://plt.cs.northwestern.edu/racket-mirror/"
"https://mirror.csclub.uwaterloo.ca/racket/racket-installers/"
;; Universität Tübingen is using a self-signed HTTPS certificate:
"http://mirror.informatik.uni-tuebingen.de/mirror/racket/"
"https://racket.infogroep.be/"
))
A package specification is a list of the form:
(define %main-repo-main-distribution-pkgs
;; These are the packages developed in the main Racket Git repository
;; that are part of the main distribution.
'("at-exp-lib"
"base"
"compiler-lib"
;; NOT "compiler-test"
"compiler"
"net-doc"
"net-lib"
;; NOT "net-test"
"net"
;; NOT "plt-services"
;; NOT "racket-benchmarks"
;; NOT "racket-build-guide"
"racket-doc"
"racket-index"
"racket-lib"
;; NOT "racket-test-core"
;; NOT "racket-test-extra"
;; NOT "racket-test"
"zo-lib"))
(PKG PATH)
where PATH is the path to the package source relative to ORIGIN---possibly
\".\". As a special case, a package specification may also be a string, which
is equivalent to:
(PKG PKG)
Examples:
- \"expeditor\"
- (\"main-distribution\" \".\")
- (\"racket-lib\" \"pkgs/racket-lib\")"
(computed-file
(string-append "racket-pkg-" name "-sources")
(with-imported-modules `((guix build utils))
#~(begin
(use-modules (guix build utils))
(mkdir-p (string-append #$output "/share/racket/pkgs"))
(chdir (string-append #$output "/share/racket/pkgs"))
#$@(map (match-lambda
((? string? name)
#~(copy-recursively #$(file-append origin (string-append "/" name))
#$name))
((name ".")
#~(copy-recursively #$origin #$name))
((name path)
#~(copy-recursively #$(file-append origin (string-append "/" path))
#$name)))
specs)))))
(define (simple-racket-origin repo hash specs)
"Like 'racket-packages-origin', but specialized for packages hosted at
\"https://github.com/racket/REPO\" with sha256 checksum HASH. REPO is also
used to build the name of the resulting store item."
(racket-packages-origin
repo
(origin
(method git-fetch)
(uri (git-reference
(url (format #f "https://github.com/racket/~a" repo))
(commit %racket-commit)))
(sha256 hash)
(file-name (git-file-name (string-append "racket-" repo)
%racket-version)))
specs))
(define-public racket
(package
(inherit racket-minimal)
(name "racket")
(version %racket-version)
(source
(origin
(method url-fetch)
(uri (map (lambda (base)
(string-append base version "/racket-src.tgz"))
%installer-mirrors))
(sha256
(base32
"0dsv7br85nvh5gjfihznq9jb1dzas0f6gnv5qwc9zmb7yn75nrp5"))
(patches
;; remove in Racket 8.5
;; see https://github.com/racket/racket/issues/4133
(search-patches "racket-gui-tethered-launcher-backport.patch"))
(snippet
#~(begin
(use-modules (guix build utils)
(ice-9 match)
(ice-9 regex))
;; unbundle minimal Racket
(for-each delete-file-recursively
'("collects"
"doc"
"etc"
"README"
"src"))
;; unbundle package sources included elsewhere
(with-directory-excursion "share/pkgs"
(for-each delete-file-recursively
'#+%main-repo-main-distribution-pkgs))
;; Minimal workaround for FSDG issue:
;; see <https://github.com/racket/srfi/pull/15>.
;; We will backport a better fix once we use Git
;; origins for Racket packages.
(delete-file-recursively "share/pkgs/srfi-doc-nonfree")
(substitute* "share/pkgs/srfi/info.rkt"
(("\"srfi-doc-nonfree\"") ""))))))
(source #f)
(native-inputs (list racket-minimal)) ; XXX: conservative estimate, untested
(inputs
`(("cairo" ,cairo)
("fontconfig" ,fontconfig)
("glib" ,glib)
("glu" ,glu)
("gmp" ,gmp)
("gtk+" ,gtk+) ; propagates gdk-pixbuf+svg
("libjpeg" ,libjpeg-turbo)
("libpng" ,libpng)
("libx11" ,libx11)
("mesa" ,mesa)
("mpfr" ,mpfr)
("pango" ,pango)
("unixodbc" ,unixodbc)
("libedit" ,libedit)))
(native-inputs
`(("racket" ,racket-minimal)
("extend-layer" ,extend-layer)
("main-repo" ,%racket-origin)))
(list
cairo
fontconfig
glib
glu
gmp
gtk+ ;; propagates gdk-pixbuf+svg
libjpeg-turbo
libpng
libx11 ;; ?? wayland ??
mesa
mpfr
pango
unixodbc
libedit ;; TODO reconsider in light of expeditor and readline-gpl
racket-minimal ;; <-- TODO non-tethered layer
(simple-racket-origin
"2d" (base32 "1zzcz5qyjv7syi41vb8jkxjp1rqgj61zbsdrg0nlc4qy9qsafzgr")
'("2d" "2d-doc" "2d-lib"))
(simple-racket-origin
"algol60" (base32 "09kj6asypmc24n29w0izc9p0q8hpga2hpkchsypfwn5c8zpvihlx")
'(("algol60" ".")))
(racket-packages-origin
"racket" %racket-origin
'(("base" "pkgs/base") ;; FIXME belongs in racket-minimal
("racket-lib" "pkgs/racket-lib") ;; FIXME belongs in racket-minimal
("at-exp-lib" "pkgs/at-exp-lib")
("compiler" "pkgs/compiler")
("compiler-lib" "pkgs/compiler-lib")
("net" "pkgs/net")
("net-doc" "pkgs/net-doc")
("net-lib" "pkgs/net-lib")
("racket-doc" "pkgs/racket-doc")
("racket-index" "pkgs/racket-index")
("sandbox-lib" "pkgs/sandbox-lib")
("zo-lib" "pkgs/zo-lib")))
(simple-racket-origin
"cext-lib" (base32 "00w38jpv88fpl4pgj6ndnysvn0s21rjvj0xhznay80msan0vc341")
'("cext-lib" "dynext-lib"))
(simple-racket-origin
"class-iop" (base32 "08z57q83cr7wnh6g8ah3hdhmsmf9zp1jfs7yvxv188l3hzvygy5l")
'("class-iop-lib"))
(simple-racket-origin
"compatibility" (base32 "0bfqwscjpyi325br5pa6g62g9c8lq18a80zp5g3d2qzn3n3mi6x0")
'("compatibility" "compatibility-doc" "compatibility-lib"))
(simple-racket-origin
"contract-profile" (base32 "1xm2z8g0dpv5d9h2sg680vx1a8ix9gbsdpxxb8qv1w7akp73paj3")
'(("contract-profile" ".")))
(simple-racket-origin
"data" (base32 "10iabgrk9alaggvksnyb0hdq7f1p30pq6pq2bcakvhzpxwiv1f55")
'("data" "data-doc" "data-enumerate-lib" "data-lib"))
(simple-racket-origin
"datalog" (base32 "0n5j5gnqh7g31mvgx19ggl18hirzbvq2r189lbngmnrmbc7b73fp")
'(("datalog" ".")))
(simple-racket-origin
"db" (base32 "1n02ja0yj3mjjhmz0yv04yfhyvrsznbljn8bjviyfxnm4xf9rcc5")
'("db" "db-doc" "db-lib"))
(simple-racket-origin
"deinprogramm" (base32 "1is6fapgv6rxfjz47nh6qf3kh7y7sjdinakaxqffi46gf1al8prd")
'("deinprogramm" "deinprogramm-signature"))
(simple-racket-origin
"distributed-places" (base32 "1dajpkj9balqcpv6cdk9hwjz592h1vq8rrx5vncariiac4vbdpa0")
'("distributed-places" "distributed-places-doc" "distributed-places-lib"))
(simple-racket-origin
"draw" (base32 "1xgjfbh70hqw67z88iqqajg98d04qwbzn6im2wj47rs28jxlm9ly")
'("draw" "draw-doc" "draw-lib"))
(simple-racket-origin
"drracket" (base32 "0m3l4an3nq2ycd1h287s1az2v2zprjbzd8if2x7d5r71vaj4i00c")
'("drracket"
"drracket-plugin-lib"
"drracket-tool"
"drracket-tool-doc"
"drracket-tool-lib"
"drracket-tool-text-lib"))
(simple-racket-origin
"ds-store" (base32 "0ajr27kipp4dr1qlisaghsb3h7lhhjwrfw2r79b5myczsa1mp661")
'("ds-store" "ds-store-doc" "ds-store-lib"))
(simple-racket-origin
"eli-tester" (base32 "0icx6wn14gjm8kdmq1jppqgq87sxkras4qb5xmdr6wigxafhjqyk")
'(("eli-tester" ".")))
(simple-racket-origin
"eopl" (base32 "1fmiixj6rxsgzwvgva8lvrvv0gl49v2405mp3s0i7ipis5c4n27s")
'(("eopl" ".")))
(simple-racket-origin
"errortrace" (base32 "14m7rhaxngj36070iw15am434hm438pfgmwjfsiqhsglz4pcxhip")
'("errortrace" "errortrace-doc" "errortrace-lib"))
(simple-racket-origin
"expeditor" (base32 "07djzxs6307l51mcsk3yr2g4g47ayxa3878g7sf5xhqdr4hd9vxf")
'("expeditor" "expeditor-doc" "expeditor-lib"))
(simple-racket-origin
"frtime" (base32 "0ydz2yn8vvv6z7brwlswcyx0f31a6y6d443i89rysfvd2xkhpfd5")
'(("frtime" ".")))
(simple-racket-origin
"future-visualizer" (base32 "1758qq769m0r14xf64sl2ix2l9z340kvapar0j7s5kdg42lmvnhm")
'("future-visualizer"
"future-visualizer-pict"
"future-visualizer-typed"))
(simple-racket-origin
"games" (base32 "0kpn3izlx1ccd0pj0dnvmnrhny51b85xy418a7psj70lz8j8415d")
'(("games" ".")))
(racket-packages-origin
"gui" (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/racket/gui")
(commit %racket-commit)))
(sha256 (base32
"1x33jgrx3r32k7hgwr591z3xqv1m2r5nc4km2fnxv0ak2xa0j3gj"))
(patches
;; remove in Racket 8.5
;; see https://github.com/racket/racket/issues/4133
(search-patches "racket-gui-tethered-launcher-backport.patch"))
(file-name (git-file-name "racket-gui" %racket-version)))
'("gui" "gui-doc" "gui-lib" "tex-table"))
(simple-racket-origin
"gui-pkg-manager" (base32 "1ji9448d723nklqvycwdswj0ni28sabrncag14f9mx47did5myb5")
'("gui-pkg-manager-lib"))
(simple-racket-origin
"htdp" (base32 "0r4ykybcpr10y2db9rlza9pr0xh58nd7ac389mjcxp8g386hgihl")
'("htdp" "htdp-doc" "htdp-lib"))
(simple-racket-origin
"html" (base32 "18n1jnjgzfknc8nv8dppi85nb8q08gqdwkg6hfjk08x0p00anx2x")
'("html" "html-doc" "html-lib"))
(simple-racket-origin
"icons" (base32 "1s5a6j11fg3fdr6b7vm2q7q178d7q8b8igy73bs211r27qrd1gg7")
'(("icons" ".")))
(simple-racket-origin
"images" (base32 "0rpjxqw34bq5m08kh1ldl1mr7s9z1lyydxxcyzb292kqh9qiqvfl")
'("images" "images-doc" "images-gui-lib" "images-lib"))
(simple-racket-origin
"lazy" (base32 "176ylzgbdsbmqknpihaz519afq71pyjkv1h87j5v8jfbpbddyfsf")
'(("lazy" ".")))
(simple-racket-origin
"macro-debugger" (base32 "14hyrwbkffr61fk44l02xb47bhv5zccw0ymaa9kxld86hvyqhqbm")
'("macro-debugger" "macro-debugger-text-lib"))
(simple-racket-origin
"main-distribution" (base32 "0m2n9s32s8a4a2gn4ywrm9l8jycdm5ayi5w9kh5wchhrrw7qzq7y")
'(("main-distribution" ".")))
(simple-racket-origin
"make" (base32 "10852fj30bz5r46c3d99s37fkgy5yh44gb01j29sf3kxnhi0g2sa")
'(("make" ".")))
(simple-racket-origin
"math" (base32 "02sqbnvxvmvslk33b44fx4v93zafcvhva0cx8z21jqbl5wp217ac")
'("math" "math-doc" "math-lib"))
(simple-racket-origin
"mysterx" (base32 "11p9jzrafw0hizhl0cs4sxx7rv281185q8hryic2rpk0kzjdyr48")
'(("mysterx" ".")))
(simple-racket-origin
"mzcom" (base32 "0rc9pfj7gwm5azghqvcibz6si1x5s2v8mr2yngk7ssq9gzfbi6a4")
'(("mzcom" ".")))
(simple-racket-origin
"mzscheme" (base32 "192c52zi726h5wjamxrhivjw2waq1im0zpyxhbrkrxknm8x84bs9")
'("mzscheme" "mzscheme-doc" "mzscheme-lib"))
(racket-packages-origin
"net-cookies" (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/RenaissanceBug/racket-cookies")
(commit %racket-commit)))
(sha256 (base32
"0k0hifxhywl5c3hjcaiizc098dpyk001d981p572gly116yvjxc1"))
(file-name
(git-file-name "RenaissanceBug-racket-cookies" %racket-version)))
'("net-cookies" "net-cookies-doc" "net-cookies-lib"))
(racket-packages-origin
"optimization-coach"
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/stamourv/optimization-coach")
(commit %racket-commit)))
(sha256 (base32
"0b27sw48d7rhz0hin88c7rbr9vpg1c23sn82nd4jkmq54h6gasr1"))
(file-name
(git-file-name "stamourv-optimization-coach" %racket-version)))
'(("optimization-coach" ".")))
(simple-racket-origin
"option-contract" (base32 "026b7n5l0c3024nymshz8zp1yhn493rdzgpflzfd52hj7awafqhk")
'("option-contract" "option-contract-doc" "option-contract-lib"))
(simple-racket-origin
"parser-tools" (base32 "08pvz4zramirzm3j64hbhjm0mmh5zfy37iv4s3vmq0rj49cr8fl3")
'("parser-tools" "parser-tools-doc" "parser-tools-lib"))
(simple-racket-origin
"pconvert" (base32 "00czi0p399mmyrvxyrs5kniizpkqfxyz2ncxqi2jy79a7wk79pb1")
'("pconvert-lib"))
(simple-racket-origin
"pict" (base32 "0g1iwdr6qh1xb0crhj96830vjjnbds409xbpqn7j5sh0ksy6vr5x")
'("pict" "pict-doc" "pict-lib"))
(simple-racket-origin
"pict-snip" (base32 "081nwiy4a0n4f7xws16hqbhf0j3kz5alizndi3nnyr3chm4kng6x")
'("pict-snip" "pict-snip-doc" "pict-snip-lib"))
(simple-racket-origin
"picturing-programs" (base32 "1g6xr39hx1j03gb3d4dljm3v91xcj2gfpq3dgy5xvplzr6cmmxgr")
'(("picturing-programs" ".")))
(simple-racket-origin
"plai" (base32 "0i983sh0r0zm2ng4j44m5aw9669kh5fhp91bzpc9jm280rfcqvyl")
'("plai" "plai-doc" "plai-lib"))
(simple-racket-origin
"planet" (base32 "0r2yqrzrmdjjyr14k6hhlzc5kzrcx3583m1s02mhrcmpfw0s85w9")
'("planet" "planet-doc" "planet-lib"))
(simple-racket-origin
"plot" (base32 "07kq32si34ybcwz8idxxcrzssg8diyrp1nfgkcj0mmvr45321zm7")
'("plot" "plot-compat" "plot-doc" "plot-gui-lib" "plot-lib"))
(simple-racket-origin
"preprocessor" (base32 "1p5aid58ifnjy4xl0ysh85cq39k25661v975jrpk182z3k5621mg")
'(("preprocessor" ".")))
(simple-racket-origin
"profile" (base32 "179i86lyby29nywz60l4vnadi02w8b12h7501nm5h5g4pq9jjmbb")
'("profile" "profile-doc" "profile-lib"))
(racket-packages-origin
"quickscript" (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/Metaxal/quickscript")
(commit %racket-commit)))
(sha256 (base32
"100g3yqhbjdq06b6l6d72ywsw29awgy8crqg33wj7h12xq07nzcr"))
(file-name (git-file-name "Metaxal-quickscript" %racket-version)))
'(("quickscript" ".")))
(simple-racket-origin
"r5rs" (base32 "1g3cysj7z88r38vkzvi8g2fb2hn4yg1fdhy5smxw303jxgl3inp6")
'("r5rs" "r5rs-doc" "r5rs-lib"))
(simple-racket-origin
"r6rs" (base32 "0b1ymzdp10r0flw2acbidjsh5ma1pm5hy54jss37sxf89z3xbvm4")
'("r6rs" "r6rs-doc" "r6rs-lib"))
(racket-packages-origin
"racket-cheat" (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/jeapostrophe/racket-cheat")
(commit %racket-commit)))
(sha256 (base32
"06wcj558rzkbl2bwkmikyspya9v1f4iwlzwnwxpkc33h2xapwabr"))
(file-name
(git-file-name "jeapostrophe-racket-cheat" %racket-version)))
'(("racket-cheat" ".")))
(simple-racket-origin
"racklog" (base32 "1rgrvwy3kr9b9w5cghsffiv3ly00yfvvzr5xaaw83g1w7yin0mnb")
'(("racklog" ".")))
(simple-racket-origin
"rackunit" (base32 "057z31rja6h3nabh5b2xgwfrzmlm6h1cv1qcgf3xfy4g2q5dqn5p")
'("rackunit"
"rackunit-doc"
"rackunit-gui"
"rackunit-lib"
"rackunit-plugin-lib"
"rackunit-typed"
"schemeunit"
"testing-util-lib"))
(simple-racket-origin
"readline" (base32 "13kbcn2wchv82d709mw3r8n37bk8iwq0y4kpvm9dbzx0w2pxkfwn")
'("readline" "readline-doc" "readline-lib"))
(simple-racket-origin
"realm" (base32 "0hxcgla08iack54j8v40fj51811chpy66ym2zq76zb52c7kzn0hi")
'(("realm" ".")))
(simple-racket-origin
"redex" (base32 "0vlgxbnbgrlihk1hh5zd6hsc4566ldi4q76f87z5vai54dxkwy2f")
'("redex"
"redex-benchmark"
"redex-doc"
"redex-examples"
"redex-gui-lib"
"redex-lib"
"redex-pict-lib"))
(simple-racket-origin
"sasl" (base32 "0ibh4wb4gn8pggx6gkv4vk4d6rwzn5nrvjibhvkzhaynf6lhb824")
'("sasl" "sasl-doc" "sasl-lib"))
(simple-racket-origin
"scheme-lib" (base32 "0pcf0y8rp4qyjhaz5ww5sr5diq0wpcdfrrnask7zapyklzx1jx8x")
'(("scheme-lib" ".")))
(simple-racket-origin
"scribble" (base32 "0rgvnsykrxkah6s5fw1vyp9lxsb4z9w6hgwk5j6wbwjp2gsfczbm")
'("scribble"
"scribble-doc"
"scribble-html-lib"
"scribble-lib"
"scribble-text-lib"))
(simple-racket-origin
"serialize-cstruct-lib"
(base32 "1rq3n1fa7ldjwx3lrh9ybhig7jlsw1crpzyklbzp3xqdw6jymfnz")
'(("serialize-cstruct-lib" ".")))
(simple-racket-origin
"sgl" (base32 "0nkymhdyjrwi5h199j4w5zh7y3x3ai42gsiwxzh0hy7yqrqqg9zv")
'(("sgl" ".")))
(simple-racket-origin
"shell-completion" (base32 "04m144gy2mp4fiq6rcbf12wjr8mws8k9scfhg9lc38vqppp4lxsj")
'(("shell-completion" ".")))
(simple-racket-origin
"simple-tree-text-markup"
(base32 "0fyd9gfz6bnv0m1901wv5mnhc05rm8hw9i6ddrqx33hs6qsg2zqr")
'("simple-tree-text-markup"
"simple-tree-text-markup-doc"
"simple-tree-text-markup-lib"))
(simple-racket-origin
"slatex" (base32 "0pkm2isbbdk63slrbsxcql7rr0wdrw5kapw1xq4ps5k8dhlzv8x0")
'(("slatex" ".")))
(simple-racket-origin
"slideshow" (base32 "1znv1i2d0610hhy71q932xy7wka00q3q50in1xfnk8ibg7nzkagm")
'("slideshow" "slideshow-doc" "slideshow-exe" "slideshow-lib" "slideshow-plugin"))
(simple-racket-origin
"snip" (base32 "01r9wc5xr3q3n4yyif6j0a37rgdzmpslxn05k13ksik73b3wj6hj")
'("snip" "snip-lib"))
(simple-racket-origin
"typed-racket" (base32 "1462kj9yswsxbnw71casylzlvhd7cxrml2v9j7rcsnn9hmrqx4vv")
'("source-syntax"
"typed-racket"
"typed-racket-compatibility"
"typed-racket-doc"
"typed-racket-lib"
"typed-racket-more"))
(racket-packages-origin
"srfi" (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/racket/srfi")
;; Includes an FSDG fix: return to %racket-commit in 8.5.
;; See <https://github.com/racket/srfi/pull/15>.
(commit "7243029b135741ce08ae30f877e2f49a2a460b22")))
(sha256 (base32
"0aqbcdv2dfc2xnk0h6zfi56p7bpwqji8s88qds3d03hhh9k28gvn"))
;; Use the relevant version for srfi-doc and srfi-lib,
;; since we're using a newer commit than the v8.4 tag.
(file-name (git-file-name "racket-srfi" "1.1")))
'("srfi" "srfi-doc" "srfi-lib" "srfi-lite-lib"))
(simple-racket-origin
"string-constants" (base32 "1qizjq4n0hzdgdcjjpr94464gsywpsk2g9mnvwzqr7dcqbrsfvn6")
'("string-constants" "string-constants-doc" "string-constants-lib"))
(simple-racket-origin
"swindle" (base32 "164gdsphjzdl2vv7zxz7dfk9jwax8njpmim6sidm8qz8a8589y67")
'(("swindle" ".")))
(simple-racket-origin
"syntax-color" (base32 "1vf2fc3qvx8a1igi7swsg8gaqhx786sa0vqxd18xhbsidfgb5ywp")
'("syntax-color" "syntax-color-doc" "syntax-color-lib"))
(simple-racket-origin
"trace" (base32 "070ihla5j796hdarn5wxdwn4xj0xnkm50shgh49jy994mribvhia")
'(("trace" ".")))
(simple-racket-origin
"unix-socket" (base32 "02dfwas5ynbpyz74w9kwb4wgb37y5wys7svrlmir8k0n9ph9vq0y")
'("unix-socket" "unix-socket-doc" "unix-socket-lib"))
(simple-racket-origin
"web-server" (base32 "1zgb6jl7zx6258ljs8f3lvryrq5n5zpd71dqzr698m92kw3x2pkn")
'("web-server" "web-server-doc" "web-server-lib"))
(simple-racket-origin
"wxme" (base32 "1qp5gr9gqsakiq3alw6m4yyv5vw4i3hp4y4nhq8vl2nkjmirvn0b")
'("wxme" "wxme-lib"))
(simple-racket-origin
"xrepl" (base32 "12zjgsy5zqm3fck3ihg4a70wj56s2cnnjyb4jlfi5nnsfqyrnxg3")
'("xrepl" "xrepl-doc" "xrepl-lib"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(add-before 'configure 'unpack-packages
(let ((unpack (assoc-ref %standard-phases 'unpack)))
(lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
(let* ((racket (assoc-ref (or native-inputs inputs) "racket"))
(prefix (assoc-ref outputs "out"))
(pkgs-dir (string-append prefix "/share/racket/pkgs")))
(mkdir-p pkgs-dir)
(copy-recursively
"share/links.rktd"
(string-append prefix "/share/racket/links.rktd"))
(copy-recursively "share/pkgs" pkgs-dir)
;; NOTE: unpack changes the working directory
(unpack #:source (assoc-ref (or native-inputs inputs)
"main-repo"))
(for-each (lambda (pkg)
(define dest (string-append pkgs-dir "/" pkg))
(mkdir-p dest)
(copy-recursively (string-append "pkgs/" pkg)
dest))
',%main-repo-main-distribution-pkgs)
#t))))
(replace 'configure
(lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
(let ((racket (assoc-ref (or native-inputs inputs) "racket"))
(prefix (assoc-ref outputs "out")))
(apply invoke
(string-append racket "/bin/racket")
(assoc-ref inputs "extend-layer")
racket
prefix
(map
(lambda (lib)
(string-append (assoc-ref inputs lib) "/lib"))
'("cairo"
"fontconfig"
"glib"
"glu"
"gmp"
"gtk+"
"libjpeg"
"libpng"
"libx11"
"mesa"
"mpfr"
"pango"
"unixodbc"
"libedit")))
#t)))
(replace 'build
(lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
(invoke (string-append (assoc-ref (or native-inputs inputs)
"racket")
"/bin/racket")
"--config"
(string-append (assoc-ref outputs "out")
"/etc/racket")
"-l"
"raco"
"setup")
#t))
(delete 'install))
;; we still don't have these:
#:tests? #f))
;; We're using #:configure-flags to pass flags for
;; `configure-layer.rkt` and #:make-flags to pass arguments for
;; `raco pkg install`.
(list
#:configure-flags
#~`("--extra-foreign-lib-search-dirs"
,(format #f "~s"
'(#$@(map (lambda (name)
(cond
((this-package-input name)
=> (cut file-append <> "/lib"))
(else
(raise-exception
(make-exception
(make-assertion-failure)
(make-exception-with-message
"missing input to the 'racket' package")
(make-exception-with-irritants
(list name)))))))
'("cairo"
"fontconfig-minimal" ;; aka fontconfig
"glib"
"glu"
"gmp"
"gtk+"
"libjpeg-turbo"
"libpng"
"libx11"
"mesa"
"mpfr"
"pango"
"unixodbc"
"libedit")))))
#:make-flags #~`("main-distribution")
#:tests? #f ;; packaged separately
#:modules '((guix build gnu-build-system)
(guix build utils)
(guix build union)
(ice-9 match))
#:imported-modules `((guix build union)
,@%gnu-build-system-modules)
#:phases
#~(modify-phases %standard-phases
(delete 'unpack)
(replace 'configure
(lambda* (#:key inputs configure-flags #:allow-other-keys)
(let* ((racket (search-input-file inputs "bin/racket")))
(apply invoke
racket
#$configure-layer.rkt
`(,@configure-flags
,(dirname (dirname racket))
,#$output))
(invoke racket
"--config" (string-append #$output "/etc/racket")
"-l" "raco" "setup"
"--no-user"))))
(replace 'build
(lambda* (#:key inputs #:allow-other-keys)
;; We use "share/racket/pkgs" for sources to distinguish them
;; from the "lib/racket/pkgs" of a potential parent layer.
(union-build (string-append #$output "/lib/racket/pkgs")
(search-path-as-list '("share/racket/pkgs")
(map cdr inputs))
#:create-all-directories? #t)))
(replace 'install
(lambda* (#:key inputs make-flags #:allow-other-keys)
(let ((racket (search-input-file inputs "/bin/racket")))
(unless (null? make-flags)
(invoke racket
"-l-"
"pkg/dirs-catalog"
"--link"
"local-catalog"
(string-append #$output "/lib/racket/pkgs"))
(apply invoke
racket
"--config" (string-append #$output "/etc/racket")
"-l" "raco"
"pkg" "install"
"--installation"
"--auto"
"--catalog" "local-catalog"
make-flags))))))))
(home-page "https://racket-lang.org")
(synopsis "Programmable programming language in the Scheme family")
(description
"Racket is a general-purpose programming language in the Scheme family,
@ -563,17 +899,20 @@ (define dest (string-append pkgs-dir "/" pkg))
The main Racket distribution comes with many bundled packages, including the
DrRacket IDE, libraries for GUI and web programming, and implementations of
languages such as Typed Racket, R5RS and R6RS Scheme, Algol 60, and Datalog.")))
languages such as Typed Racket, R5RS and R6RS Scheme, Algol 60, and Datalog.")
;; https://download.racket-lang.org/license.html
;; The LGPL components are only used by Racket BC.
(license (list license:asl2.0 license:expat))))
(define extend-layer
(define configure-layer.rkt
(scheme-file
"extend-layer.rkt"
"configure-layer.rkt"
`(module
extend-layer racket/base
configure-layer racket/base
(require racket/cmdline
racket/match
racket/file
racket/port
racket/list
racket/pretty)
(define config-file-pth
@ -583,8 +922,14 @@ (define (build-path-string . args)
(define rx:racket
;; Guile's reader doesn't support #rx"racket"
(regexp "racket"))
(define extra-foreign-lib-search-dirs '())
(command-line
#:args (parent-layer prefix . lib-dir*)
#:once-each
[("--extra-foreign-lib-search-dirs") dir-list
"foreign library directories, as a list of strings in `read` syntax"
(set! extra-foreign-lib-search-dirs
(call-with-input-string dir-list read))]
#:args (parent-layer prefix)
(let* ([config
(for/fold
([config (file->value (build-path parent-layer
@ -614,27 +959,42 @@ (define rx:racket
(build-path-string parent-layer pth))
(filter values (hash-ref config search-key null)))))]
[config
(hash-set config
'apps-dir
(build-path-string prefix "share/applications"))]
(hash-update config
'lib-search-dirs
(lambda (dirs)
;; add after other layers, but before older
;; foreign lib search directories
(define-values [rkt old-foreign-dirs]
(partition (lambda (pth)
(or (not pth)
(regexp-match? rx:racket pth)))
dirs))
(append rkt
extra-foreign-lib-search-dirs
old-foreign-dirs)))]
[config
;; place new foreign lib-search-dirs before old
;; foreign dirs, but after Racket layers
(let-values
([(rkt extra)
(partition (lambda (pth)
(or (not pth)
(regexp-match? rx:racket pth)))
(hash-ref config 'lib-search-dirs))])
(hash-set config
'lib-search-dirs
(append rkt
lib-dir*
extra)))]
(hash-set* config
'apps-dir
(build-path-string prefix "share/applications")
'absolute-installation? #t
;; Let Guix coexist with other installation
;; methods without clobbering user-specific packages.
;; This could be set in various places, but doing
;; it here is convienient, at least until we support
;; cross-compilation.
'installation-name
(string-append (version)
"-guix"
(match (system-type 'gc)
['cgc "-cgc"]
;; workaround Guile reader/printer:
['|3m| "-bc"]
[_ ""])))]
[bin-dir
(hash-ref config 'bin-dir)]
[config
(hash-set* config
'config-tethered-apps-dir (hash-ref config 'apps-dir)
'config-tethered-console-bin-dir bin-dir
'config-tethered-gui-bin-dir bin-dir)]
[new-config-pth