aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/patches/racket-gui-tethered-launcher-backport.patch6
-rw-r--r--gnu/packages/racket.scm714
2 files changed, 540 insertions, 180 deletions
diff --git a/gnu/packages/patches/racket-gui-tethered-launcher-backport.patch b/gnu/packages/patches/racket-gui-tethered-launcher-backport.patch
index abf253486f..1e018eaa79 100644
--- a/gnu/packages/patches/racket-gui-tethered-launcher-backport.patch
+++ b/gnu/packages/patches/racket-gui-tethered-launcher-backport.patch
@@ -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)))))
diff --git a/gnu/packages/racket.scm b/gnu/packages/racket.scm
index 3911dc1ad8..446abf2f1c 100644
--- a/gnu/packages/racket.scm
+++ b/gnu/packages/racket.scm
@@ -28,7 +28,9 @@
#: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 @@ Scheme, and @code{cs-bootstrap} does not currently support building upstream
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 @@ languages to complete language implementations.
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 @@ languages such as Typed Racket, R5RS and R6RS Scheme, Algol 60, and Datalog.")))
(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 @@ languages such as Typed Racket, R5RS and R6RS Scheme, Algol 60, and Datalog.")))
(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