Archived
1
0
Fork 0

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) (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(-) 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gui-lib/mred/installer.rkt b/gui-lib/mred/installer.rkt diff --git a/gui-lib/mred/installer.rkt b/gui-lib/mred/installer.rkt
index b1691472..9ef06c53 100644 index b1691472..9ef06c53 100644
--- a/share/pkgs/gui-lib/mred/installer.rkt --- a/gui-lib/mred/installer.rkt
+++ b/share/pkgs/gui-lib/mred/installer.rkt +++ b/gui-lib/mred/installer.rkt
@@ -72,4 +72,5 @@ @@ -72,4 +72,5 @@
(list "-A" (path->string (find-system-path 'addon-dir))))) (list "-A" (path->string (find-system-path 'addon-dir)))))

View file

@ -28,7 +28,9 @@
#:use-module (guix gexp) #:use-module (guix gexp)
#:use-module (guix build-system gnu) #:use-module (guix build-system gnu)
#:use-module (srfi srfi-1) #:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:use-module (ice-9 exceptions)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (gnu packages autotools) #:use-module (gnu packages autotools)
#:use-module (gnu packages bash) #:use-module (gnu packages bash)
@ -389,171 +391,505 @@ Scheme, and @code{cs-bootstrap} does not currently support building upstream
Chez Scheme.") Chez Scheme.")
(license (list license:asl2.0))))) (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 A package specification is a list of the form:
;; 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/"
))
(define %main-repo-main-distribution-pkgs (PKG PATH)
;; 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"))
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 (define-public racket
(package (package
(inherit racket-minimal)
(name "racket") (name "racket")
(version %racket-version) (version %racket-version)
(source (source #f)
(origin (native-inputs (list racket-minimal)) ; XXX: conservative estimate, untested
(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\"") ""))))))
(inputs (inputs
`(("cairo" ,cairo) (list
("fontconfig" ,fontconfig) cairo
("glib" ,glib) fontconfig
("glu" ,glu) glib
("gmp" ,gmp) glu
("gtk+" ,gtk+) ; propagates gdk-pixbuf+svg gmp
("libjpeg" ,libjpeg-turbo) gtk+ ;; propagates gdk-pixbuf+svg
("libpng" ,libpng) libjpeg-turbo
("libx11" ,libx11) libpng
("mesa" ,mesa) libx11 ;; ?? wayland ??
("mpfr" ,mpfr) mesa
("pango" ,pango) mpfr
("unixodbc" ,unixodbc) pango
("libedit" ,libedit))) unixodbc
(native-inputs libedit ;; TODO reconsider in light of expeditor and readline-gpl
`(("racket" ,racket-minimal) racket-minimal ;; <-- TODO non-tethered layer
("extend-layer" ,extend-layer) (simple-racket-origin
("main-repo" ,%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 (arguments
`(#:phases ;; We're using #:configure-flags to pass flags for
(modify-phases %standard-phases ;; `configure-layer.rkt` and #:make-flags to pass arguments for
(add-before 'configure 'unpack-packages ;; `raco pkg install`.
(let ((unpack (assoc-ref %standard-phases 'unpack))) (list
(lambda* (#:key native-inputs inputs outputs #:allow-other-keys) #:configure-flags
(let* ((racket (assoc-ref (or native-inputs inputs) "racket")) #~`("--extra-foreign-lib-search-dirs"
(prefix (assoc-ref outputs "out")) ,(format #f "~s"
(pkgs-dir (string-append prefix "/share/racket/pkgs"))) '(#$@(map (lambda (name)
(mkdir-p pkgs-dir) (cond
(copy-recursively ((this-package-input name)
"share/links.rktd" => (cut file-append <> "/lib"))
(string-append prefix "/share/racket/links.rktd")) (else
(copy-recursively "share/pkgs" pkgs-dir) (raise-exception
;; NOTE: unpack changes the working directory (make-exception
(unpack #:source (assoc-ref (or native-inputs inputs) (make-assertion-failure)
"main-repo")) (make-exception-with-message
(for-each (lambda (pkg) "missing input to the 'racket' package")
(define dest (string-append pkgs-dir "/" pkg)) (make-exception-with-irritants
(mkdir-p dest) (list name)))))))
(copy-recursively (string-append "pkgs/" pkg) '("cairo"
dest)) "fontconfig-minimal" ;; aka fontconfig
',%main-repo-main-distribution-pkgs) "glib"
#t)))) "glu"
(replace 'configure "gmp"
(lambda* (#:key native-inputs inputs outputs #:allow-other-keys) "gtk+"
(let ((racket (assoc-ref (or native-inputs inputs) "racket")) "libjpeg-turbo"
(prefix (assoc-ref outputs "out"))) "libpng"
(apply invoke "libx11"
(string-append racket "/bin/racket") "mesa"
(assoc-ref inputs "extend-layer") "mpfr"
racket "pango"
prefix "unixodbc"
(map "libedit")))))
(lambda (lib) #:make-flags #~`("main-distribution")
(string-append (assoc-ref inputs lib) "/lib")) #:tests? #f ;; packaged separately
'("cairo" #:modules '((guix build gnu-build-system)
"fontconfig" (guix build utils)
"glib" (guix build union)
"glu" (ice-9 match))
"gmp" #:imported-modules `((guix build union)
"gtk+" ,@%gnu-build-system-modules)
"libjpeg" #:phases
"libpng" #~(modify-phases %standard-phases
"libx11" (delete 'unpack)
"mesa" (replace 'configure
"mpfr" (lambda* (#:key inputs configure-flags #:allow-other-keys)
"pango" (let* ((racket (search-input-file inputs "bin/racket")))
"unixodbc" (apply invoke
"libedit"))) racket
#t))) #$configure-layer.rkt
(replace 'build `(,@configure-flags
(lambda* (#:key native-inputs inputs outputs #:allow-other-keys) ,(dirname (dirname racket))
(invoke (string-append (assoc-ref (or native-inputs inputs) ,#$output))
"racket") (invoke racket
"/bin/racket") "--config" (string-append #$output "/etc/racket")
"--config" "-l" "raco" "setup"
(string-append (assoc-ref outputs "out") "--no-user"))))
"/etc/racket") (replace 'build
"-l" (lambda* (#:key inputs #:allow-other-keys)
"raco" ;; We use "share/racket/pkgs" for sources to distinguish them
"setup") ;; from the "lib/racket/pkgs" of a potential parent layer.
#t)) (union-build (string-append #$output "/lib/racket/pkgs")
(delete 'install)) (search-path-as-list '("share/racket/pkgs")
;; we still don't have these: (map cdr inputs))
#:tests? #f)) #: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") (synopsis "Programmable programming language in the Scheme family")
(description (description
"Racket is a general-purpose programming language in the Scheme family, "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 The main Racket distribution comes with many bundled packages, including the
DrRacket IDE, libraries for GUI and web programming, and implementations of 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 configure-layer.rkt
(define extend-layer
(scheme-file (scheme-file
"extend-layer.rkt" "configure-layer.rkt"
`(module `(module
extend-layer racket/base configure-layer racket/base
(require racket/cmdline (require racket/cmdline
racket/match racket/match
racket/file racket/file
racket/port
racket/list racket/list
racket/pretty) racket/pretty)
(define config-file-pth (define config-file-pth
@ -583,8 +922,14 @@ languages such as Typed Racket, R5RS and R6RS Scheme, Algol 60, and Datalog.")))
(define rx:racket (define rx:racket
;; Guile's reader doesn't support #rx"racket" ;; Guile's reader doesn't support #rx"racket"
(regexp "racket")) (regexp "racket"))
(define extra-foreign-lib-search-dirs '())
(command-line (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 (let* ([config
(for/fold (for/fold
([config (file->value (build-path parent-layer ([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)) (build-path-string parent-layer pth))
(filter values (hash-ref config search-key null)))))] (filter values (hash-ref config search-key null)))))]
[config [config
(hash-set config (hash-update config
'apps-dir 'lib-search-dirs
(build-path-string prefix "share/applications"))] (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 [config
;; place new foreign lib-search-dirs before old (hash-set* config
;; foreign dirs, but after Racket layers 'apps-dir
(let-values (build-path-string prefix "share/applications")
([(rkt extra) 'absolute-installation? #t
(partition (lambda (pth) ;; Let Guix coexist with other installation
(or (not pth) ;; methods without clobbering user-specific packages.
(regexp-match? rx:racket pth))) ;; This could be set in various places, but doing
(hash-ref config 'lib-search-dirs))]) ;; it here is convienient, at least until we support
(hash-set config ;; cross-compilation.
'lib-search-dirs 'installation-name
(append rkt (string-append (version)
lib-dir* "-guix"
extra)))] (match (system-type 'gc)
['cgc "-cgc"]
;; workaround Guile reader/printer:
['|3m| "-bc"]
[_ ""])))]
[bin-dir [bin-dir
(hash-ref config 'bin-dir)] (hash-ref config 'bin-dir)]
[config [config
(hash-set* config (hash-set* config
'config-tethered-apps-dir (hash-ref config 'apps-dir)
'config-tethered-console-bin-dir bin-dir 'config-tethered-console-bin-dir bin-dir
'config-tethered-gui-bin-dir bin-dir)] 'config-tethered-gui-bin-dir bin-dir)]
[new-config-pth [new-config-pth