diff mbox series

[bug#47153] gnu: chez-scheme: simplify packaging

Message ID 20210315084235.7051-1-philip@philipmcgrath.com
State Accepted
Headers show
Series [bug#47153] gnu: chez-scheme: simplify packaging | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Philip McGrath March 15, 2021, 8:42 a.m. UTC
Take advantage of patches that have been accepted upstream.
These changes lay a foundation for reusing more of Chez's
build process for Racket.

* gnu/packages/patches/chez-scheme-build-util-paths-backport.patch:
New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/chez.scm (nanopass): Rename it to ...
(nanopass-framework-scheme): ... this variable. Change it from an origin
to a package. Update to 1.9.2.
(stex): Rename it to ...
(chez-stex): ... this variable. Change it from an origin to a hidden
package. Update to commit 5405149, which helps us install it.
(chez-scheme)[source](patches): Use it.
[source](snippet): Remove bundled libraries here, not during 'configure'
phase. Also remove irrelevant bootfiles.
[inputs]: Organize. Move "nanopass" and "stex" to ...
[native-inputs]: ... this field.
[outputs]: Add "stex".
[arguments]: Remove #:configure-flags which were ignored. Add (ice-9 ftw)
to #:modules. Remove unneeded 'patch-processor-detection' phase.
Add 'link-nanopass+stex' phase (refactored from 'configure').
Simplify 'configure' phase by removing patches that have been upstreamed.
Detect when "--disable-curses" or "--disable-x11" flags are needed.
Add "--nogzip-man-pages" flag so we can remove 'make-manpages-writable'
phase. Refactor 'install-doc' phase into 'build+install-stex' and
'build+install-doc'
---
 gnu/local.mk                                  |   1 +
 gnu/packages/chez.scm                         | 370 ++++++---
 ...hez-scheme-build-util-paths-backport.patch | 780 ++++++++++++++++++
 3 files changed, 1030 insertions(+), 121 deletions(-)
 create mode 100644 gnu/packages/patches/chez-scheme-build-util-paths-backport.patch

Comments

Leo Prikler March 15, 2021, 10:32 a.m. UTC | #1
Hi,

I'm not an expert on Chez Scheme, so take this with a grain of salt,
but I do have some questions/remarks.

Am Montag, den 15.03.2021, 04:42 -0400 schrieb Philip McGrath:
> * gnu/packages/chez.scm (nanopass): Rename it to ...
> (nanopass-framework-scheme): ... this variable. Change it from an
> origin
> to a package. Update to 1.9.2.
What advantages do we get from making this a package?  Can it be
upgraded to 1.9.2 without this change at the same time?
> (stex): Rename it to ...
> (chez-stex): ... this variable. Change it from an origin to a hidden
> package. Update to commit 5405149, which helps us install it.
Same here, also does this need to be done at the same time as the
nanopass upgrade?  
> (chez-scheme)[source](patches): Use it.
Use what?
> [source](snippet): Remove bundled libraries here, not during
> 'configure'
> phase. Also remove irrelevant bootfiles.
This seems okay.
 
> +      (build-system gnu-build-system)
> +      (arguments
> +       `(#:phases
> +         (modify-phases %standard-phases
> +           (delete 'bootstrap)
> +           (delete 'patch-usr-bin-file)
> +           (delete 'configure)
> +           (delete 'patch-generated-file-shebangs)
> +           (delete 'build)
> +           (delete 'check)
> +           (replace 'install
> +             (lambda* (#:key outputs #:allow-other-keys)
> +               (copy-recursively "." (assoc-ref outputs "out"))
> +               #t))
> +           (delete 'patch-shebangs)
> +           (delete 'strip)
> +           (delete 'validate-runpath)
> +           (delete 'validate-documentation-location)
> +           (delete 'delete-info-dir-file)
> +           (delete 'patch-dot-desktop-files)
> +           (delete 'install-license-files)
> +           (delete 'reset-gzip-timestamps)
> +           (delete 'compress-documentation)))))))
copy-build-system exists.  And again, what is the point of making this
a package if it contains the exact same files as the corresponding
origin?

> +(define chez-stex
> +  ;; Hidden because of a circular dependency issue:
> +  ;; stex needs chez-scheme to be used, but chez-scheme uses
> +  ;; stex to build its documentation.
> +  ;; The chez-scheme package has an stex output that exposes
> +  ;; the useful version of this---or maybe there's a more elegant
> solution?
> +  (hidden-package
> +   (let ((version "1.2.2")
> +         ;; This commit includes a fix for which we would
> +         ;; otherwise want to use a snippet.
> +         ;; When there's a new tagged release,
> +         ;; go back to using (string-append "v" version)
> +         (commit "54051494434a197772bf6ca5b4e6cf6be55f39a5")
> +         (revision "1"))          ;Guix package revision
> +     (package
> +       (inherit nanopass-framework-scheme)
> +       (name "chez-stex")
> +       (version (git-version version revision commit))
> +       (source
> +        (origin
> +          (method git-fetch)
> +          (uri (git-reference
> +                (url "https://github.com/dybvig/stex")
> +                (commit commit)))
> +          (sha256
> "01jnvw8qw33gnpzwrakwhsr05h6b609lm180jnspcrb7lds2p23d")
> +          (file-name (git-file-name "stex" version))))
> +       (home-page "https://github.com/dybvig/stex")
> +       (synopsis
> +        "Tools for including Scheme in LaTeX and converting to
> HTML")
> +       (description
> +        "The @dfn{stex} package consists of two main programs and
> some
> +supporting items, such as make files, make-file templates, class
> files,
> +and style files.  The two main programs are @command{scheme-prep}
> and
> +@command{html-prep}.  @command{scheme-prep} performs a conversion
> from
> +stex-formatted files into LaTeX-formatted files, while
> @command{html-prep}
> +converts (some) LaTeX-formatted files into html-formatted files.
> +
> +An stex file is really just a LaTeX file extended with a handful of
> commands
> +for including Scheme code (or pretty much any other kind of code, as
> long as
> +you don't plan to use the Scheme-specific transcript support) in a
> document,
> +plus a couple of additional features rather arbitrarily thrown in.")
> +       (license (list expat))))))
>  
> -(define stex
> -  (let ((version "1.2.2"))
> -    (origin
> -      (method git-fetch)
> -      (uri (git-reference
> -            (url "https://github.com/dybvig/stex")
> -            (commit (string-append "v" version))))
> -      (sha256 (base32
> "1q5i8pf4cdfjsj6r2k1rih7ljbfggyxdng2p2fvsgarzihpsin2i"))
> -      (file-name (git-file-name "stex" version)))))
Again, where is the benefit in having this as a hidden-package?

Regards,
Leo
Philip McGrath March 15, 2021, 6:03 p.m. UTC | #2
Hi!

On 3/15/21 6:32 AM, Leo Prikler wrote:
> I'm not an expert on Chez Scheme, so take this with a grain of salt,

I'm not an expert on Guix, so take this with a grain of salt :)

I've been exploring packaging for Racket, and, by extension, Chez 
Scheme, as a way to get more familiar with Guix.

> Am Montag, den 15.03.2021, 04:42 -0400 schrieb Philip McGrath:
>> * gnu/packages/chez.scm (nanopass): Rename it to ...
>> (nanopass-framework-scheme): ... this variable. Change it from an
>> origin
>> to a package. Update to 1.9.2.
> What advantages do we get from making this a package? Can it be
> upgraded to 1.9.2 without this change at the same time?
>> (stex): Rename it to ...
>> (chez-stex): ... this variable. Change it from an origin to a hidden
>> package. Update to commit 5405149, which helps us install it.
> Same here

I don't have a strong opinion about whether these should be packages. My 
main goal was to have the unpack and patch-source-shebangs phases happen 
just once, rather than be handled in an ad-hoc way inside chez-scheme's 
configure phase, because I know I will be reusing these in the Racket 
package, as well.

There are some other considerations specific to each package/origin:

- nanopass-framework-scheme is portable to many R6RS Scheme
implementations. It doesn't have a Makefile or anything:
you just put it in the right place and then happily
`(import (nanopass))` from your Scheme of choice.

- I think the right thing would be to make chez-stex a
public package, instead of the "stex" output of the chez-scheme
package, but there are some bootstrapping issues I'll discuss below.


> , also does this need to be done at the same time as the
> nanopass upgrade?

No

>> (chez-scheme)[source](patches): Use it.
> Use what?

The new patch chez-scheme-build-util-paths-backport.patch added above. 
Is there a better way to write that in the message?

> copy-build-system exists. And again, what is the point of making this
> a package if it contains the exact same files as the corresponding
> origin?

copy-build-system also does validate-documentation-location and 
install-license-files, IIUC. But again, I'm open to alternative approaches.

>> +(define chez-stex
>> + ;; Hidden because of a circular dependency issue:
>> + ;; stex needs chez-scheme to be used, but chez-scheme uses
>> + ;; stex to build its documentation.
>> + ;; The chez-scheme package has an stex output that exposes
>> + ;; the useful version of this---or maybe there's a more elegant
>> solution?

This is related to the comments I added about things probably being 
wrong for cross-compilation, though I don't think they're any more wrong 
with this patch than without it. Fundamentally, you need Chez Scheme to 
compile Chez Scheme. (The Racket fork can be bootstrapped with a C-based 
Racket implementation that simulates enough of Chez Scheme to compile 
the Chez Scheme compiler. Unfortunately, the forks have diverged too 
much right now, at a minimum in the definition of `#!base-rtd`, to be 
able to bootstrap upstream Chez that way.)

Chez distributes "bootfiles" for i686, x86_64, and "arm32" (which I 
hope, but am not sure, could work for "armhf"). Once you've done a 
native build for one of those platforms, you can use it to cross-compile 
for any platform Chez Scheme supports (ppc32, various BSDs, etc—Racket's 
fork adds arm64, and there's been some work on riscv). You need Chez to 
build stex, and thus you need a native Chez to build the Chez Scheme docs.

I'm not sure what the best way to structure that in Guix would be. Maybe 
a hidden variant of Chez that builds the public Chez?

Suggestions are very welcome!

-Philip
Leo Prikler March 15, 2021, 6:28 p.m. UTC | #3
Hi!

Am Montag, den 15.03.2021, 14:03 -0400 schrieb Philip McGrath:
> Hi!
> 
> On 3/15/21 6:32 AM, Leo Prikler wrote:
> > I'm not an expert on Chez Scheme, so take this with a grain of
> > salt,
> 
> I'm not an expert on Guix, so take this with a grain of salt :)
> 
> I've been exploring packaging for Racket, and, by extension, Chez 
> Scheme, as a way to get more familiar with Guix.
Hehe, I see what you did there 😉

> > Am Montag, den 15.03.2021, 04:42 -0400 schrieb Philip McGrath:
> > > * gnu/packages/chez.scm (nanopass): Rename it to ...
> > > (nanopass-framework-scheme): ... this variable. Change it from an
> > > origin
> > > to a package. Update to 1.9.2.
> > What advantages do we get from making this a package? Can it be
> > upgraded to 1.9.2 without this change at the same time?
> > > (stex): Rename it to ...
> > > (chez-stex): ... this variable. Change it from an origin to a
> > > hidden
> > > package. Update to commit 5405149, which helps us install it.
> > Same here
> 
> I don't have a strong opinion about whether these should be packages.
> My 
> main goal was to have the unpack and patch-source-shebangs phases
> happen 
> just once, rather than be handled in an ad-hoc way inside chez-
> scheme's 
> configure phase, because I know I will be reusing these in the
> Racket 
> package, as well.
I think your worries might be a little unfounded; adding more phases
between unpack and patch-source-shebangs to add additional sources
might not be the most common pattern in Guix, but it's certainly not a
rare one either.  If you've ever played a trading card game, you might
call it "uncommon" 🙂

> There are some other considerations specific to each package/origin:
> 
> - nanopass-framework-scheme is portable to many R6RS Scheme
> implementations. It doesn't have a Makefile or anything:
> you just put it in the right place and then happily
> `(import (nanopass))` from your Scheme of choice.
Which makes even more sense to have it as origin.  Suppose you were to
actually bytecompile it with both say Guile and Racket, then you'd have
a guile-nanopass and a racket-nanopass both with the same origin.

> - I think the right thing would be to make chez-stex a
> public package, instead of the "stex" output of the chez-scheme
> package, but there are some bootstrapping issues I'll discuss below.
I agree.  You can use the origin as an input to chez, like we've done
before, then use the already built chez to compile stex into chez-stex. 
I don't think the latter half needs to be done right now, though, you
can delay that until you feel more experienced in packaging.

> > , also does this need to be done at the same time as the
> > nanopass upgrade?
> 
> No
Then you should separate this into more than one patch.

> > > (chez-scheme)[source](patches): Use it.
> > Use what?
> 
> The new patch chez-scheme-build-util-paths-backport.patch added
> above. 
> Is there a better way to write that in the message?
It is not clear, since you've mixed up 3(+?) patches into one.  Yet
another argument for separating your patches 😉

> > copy-build-system exists. And again, what is the point of making
> > this
> > a package if it contains the exact same files as the corresponding
> > origin?
> 
> copy-build-system also does validate-documentation-location and 
> install-license-files, IIUC. But again, I'm open to alternative
> approaches.
Since I don't really see the point in making it a package anyway, you
can keep it as an origin imo.

> > > +(define chez-stex
> > > + ;; Hidden because of a circular dependency issue:
> > > + ;; stex needs chez-scheme to be used, but chez-scheme uses
> > > + ;; stex to build its documentation.
> > > + ;; The chez-scheme package has an stex output that exposes
> > > + ;; the useful version of this---or maybe there's a more elegant
> > > solution?
> 
> This is related to the comments I added about things probably being 
> wrong for cross-compilation, though I don't think they're any more
> wrong 
> with this patch than without it. Fundamentally, you need Chez Scheme
> to 
> compile Chez Scheme. (The Racket fork can be bootstrapped with a C-
> based 
> Racket implementation that simulates enough of Chez Scheme to
> compile 
> the Chez Scheme compiler. Unfortunately, the forks have diverged too 
> much right now, at a minimum in the definition of `#!base-rtd`, to
> be 
> able to bootstrap upstream Chez that way.)
> 
> Chez distributes "bootfiles" for i686, x86_64, and "arm32" (which I 
> hope, but am not sure, could work for "armhf"). Once you've done a 
> native build for one of those platforms, you can use it to cross-
> compile 
> for any platform Chez Scheme supports (ppc32, various BSDs,
> etc—Racket's 
> fork adds arm64, and there's been some work on riscv). You need Chez
> to 
> build stex, and thus you need a native Chez to build the Chez Scheme
> docs.
The way this would typically be solved in Guix would be to first build
a "minimal" variant of Chez without documentation, then use that to
build the full one.  See also glib as an example, where such a
situation occurs.  And yes, unless there is a good reason not to, the
minimal variant would be hidden.  Calling back to your earlier
definition of chez-stex, you could use chez-minimal to compile the
(publicly exported) chez-stex package.

Regards,
Leo
Philip McGrath March 15, 2021, 9:53 p.m. UTC | #4
Hi,

On 3/15/21 2:28 PM, Leo Prikler wrote:
> Then you should separate this into more than one patch.

Ok, I've split this into three patches and kept nanopass and stex as 
origins. Is it preferred to send them here or to start a new thread?

>> - I think the right thing would be to make chez-stex a
>> public package, instead of the "stex" output of the chez-scheme
>> package, but there are some bootstrapping issues I'll discuss below.
> I agree.  You can use the origin as an input to chez, like we've done
> before, then use the already built chez to compile stex into chez-stex.
> I don't think the latter half needs to be done right now, though, you
> can delay that until you feel more experienced in packaging.

I think I understand (most of) how to do this, but I think I'll put it 
off for now and see how it interacts with my Racket plans. Maybe there 
will be a more elegant bootstrapping solution.

-Philip
Leo Prikler March 15, 2021, 10:21 p.m. UTC | #5
Am Montag, den 15.03.2021, 17:53 -0400 schrieb Philip McGrath:
> Hi,
> 
> On 3/15/21 2:28 PM, Leo Prikler wrote:
> > Then you should separate this into more than one patch.
> 
> Ok, I've split this into three patches and kept nanopass and stex as 
> origins. Is it preferred to send them here or to start a new thread?

The preferred way is to use `git send-email --reroll-count=N` (in this
case N=2, afterwards counting up).  I would also ask you to do a
rebasing pull before sending emails and perhaps fix up some whitespace
issues.  v1 failed to apply on cbaines' patchwork[1] with the following
(see also [2]):

   error: patch failed: gnu/local.mk:879
   error: gnu/local.mk: patch does not apply


> > > - I think the right thing would be to make chez-stex a
> > > public package, instead of the "stex" output of the chez-scheme
> > > package, but there are some bootstrapping issues I'll discuss
> > > below.
> > I agree.  You can use the origin as an input to chez, like we've
> > done
> > before, then use the already built chez to compile stex into chez-
> > stex.
> > I don't think the latter half needs to be done right now, though,
> > you
> > can delay that until you feel more experienced in packaging.
> 
> I think I understand (most of) how to do this
That's great!

> I think I'll put it off for now and see how it interacts with my
> Racket plans. Maybe there will be a more elegant bootstrapping
> solution.
Indeed, simpler patch sets are much appreciated.

Regards, 
Leo

[1] https://patches.guix-patches.cbaines.net
[2] https://laminar.cbaines.net/jobs/patchwork-test-series/5359
diff mbox series

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 0954158d4c..96de2e108e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -879,6 +879,7 @@  dist_patch_DATA =						\
   %D%/packages/patches/cdparanoia-fpic.patch			\
   %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch 	\
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch	\
+  %D%/packages/patches/chez-scheme-build-util-paths-backport.patch      \
   %D%/packages/patches/chmlib-inttypes.patch			\
   %D%/packages/patches/cl-asdf-config-directories.patch		\
   %D%/packages/patches/clamav-config-llvm-libs.patch		\
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index eac556c4d0..e1e94bc90c 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -4,6 +4,7 @@ 
 ;;; Copyright © 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@ 
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages ghostscript)
@@ -42,25 +44,103 @@ 
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
-(define nanopass
-  (let ((version "1.9.1"))
-    (origin
-      (method git-fetch)
-      (uri (git-reference
-            (url "https://github.com/nanopass/nanopass-framework-scheme")
-            (commit (string-append "v" version))))
-      (sha256 (base32 "1synadgaycca39jfx525975ss9y0lkl516sdrc62wrrllamm8n21"))
-      (file-name (git-file-name "nanopass" version)))))
+;; Nanopass will be used by Racket and could be used by
+;; any of the supported Scheme implementations.
+;; Making it a package lets us do the unpacking
+;; and patching steps just once.
+(define-public nanopass-framework-scheme
+  (let ((version "1.9.2"))
+    (package
+      (name "nanopass-framework-scheme")
+      (version version)
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/nanopass/nanopass-framework-scheme")
+               (commit (string-append "v" version))))
+         (sha256 "16vjsik9rrzbabbhbxbaha51ppi3f9n8rk59pc6zdyffs0vziy4i")
+         (file-name (git-file-name "nanopass" version))))
+      (home-page "https://nanopass.org")
+      (synopsis
+       "Embeded domain-specific language for writing compiler passes")
+      (description
+       "The Nanopass Framework is an embedded domain-specific language
+for creating compilers that focuses on creating small passes and many
+intermediate representations.  Nanopass reduces the boilerplate required to
+create compilers, making them easier to understand and maintain.
+
+This package contains the R6RS source distribution, which is known to work with
+Chez Scheme, Vicare Scheme, and Ikarus Scheme.")
+      (license (list expat))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (delete 'bootstrap)
+           (delete 'patch-usr-bin-file)
+           (delete 'configure)
+           (delete 'patch-generated-file-shebangs)
+           (delete 'build)
+           (delete 'check)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (copy-recursively "." (assoc-ref outputs "out"))
+               #t))
+           (delete 'patch-shebangs)
+           (delete 'strip)
+           (delete 'validate-runpath)
+           (delete 'validate-documentation-location)
+           (delete 'delete-info-dir-file)
+           (delete 'patch-dot-desktop-files)
+           (delete 'install-license-files)
+           (delete 'reset-gzip-timestamps)
+           (delete 'compress-documentation)))))))
+
+
+(define chez-stex
+  ;; Hidden because of a circular dependency issue:
+  ;; stex needs chez-scheme to be used, but chez-scheme uses
+  ;; stex to build its documentation.
+  ;; The chez-scheme package has an stex output that exposes
+  ;; the useful version of this---or maybe there's a more elegant solution?
+  (hidden-package
+   (let ((version "1.2.2")
+         ;; This commit includes a fix for which we would
+         ;; otherwise want to use a snippet.
+         ;; When there's a new tagged release,
+         ;; go back to using (string-append "v" version)
+         (commit "54051494434a197772bf6ca5b4e6cf6be55f39a5")
+         (revision "1"))          ;Guix package revision
+     (package
+       (inherit nanopass-framework-scheme)
+       (name "chez-stex")
+       (version (git-version version revision commit))
+       (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                (url "https://github.com/dybvig/stex")
+                (commit commit)))
+          (sha256 "01jnvw8qw33gnpzwrakwhsr05h6b609lm180jnspcrb7lds2p23d")
+          (file-name (git-file-name "stex" version))))
+       (home-page "https://github.com/dybvig/stex")
+       (synopsis
+        "Tools for including Scheme in LaTeX and converting to HTML")
+       (description
+        "The @dfn{stex} package consists of two main programs and some
+supporting items, such as make files, make-file templates, class files,
+and style files.  The two main programs are @command{scheme-prep} and
+@command{html-prep}.  @command{scheme-prep} performs a conversion from
+stex-formatted files into LaTeX-formatted files, while @command{html-prep}
+converts (some) LaTeX-formatted files into html-formatted files.
+
+An stex file is really just a LaTeX file extended with a handful of commands
+for including Scheme code (or pretty much any other kind of code, as long as
+you don't plan to use the Scheme-specific transcript support) in a document,
+plus a couple of additional features rather arbitrarily thrown in.")
+       (license (list expat))))))
 
-(define stex
-  (let ((version "1.2.2"))
-    (origin
-      (method git-fetch)
-      (uri (git-reference
-            (url "https://github.com/dybvig/stex")
-            (commit (string-append "v" version))))
-      (sha256 (base32 "1q5i8pf4cdfjsj6r2k1rih7ljbfggyxdng2p2fvsgarzihpsin2i"))
-      (file-name (git-file-name "stex" version)))))
 
 (define-public chez-scheme
   (package
@@ -74,21 +154,49 @@ 
              (commit (string-append "v" version))))
        (sha256
         (base32 "0prgn2z9l888j93ydxaf04ph424g0fi3a8w7f8m0b2r7fr1v7388"))
-       (file-name (git-file-name name version))))
+       (file-name (git-file-name name version))
+       (patches
+        (search-patches
+         ;; backported from upstream: remove on next release
+         "chez-scheme-build-util-paths-backport.patch"))
+       (snippet
+        ;; remove bundled libraries
+        (with-imported-modules '((guix build utils))
+          #~(begin
+              (use-modules (guix build utils))
+              (for-each (lambda (dir)
+                          (when (directory-exists? dir)
+                            (delete-file-recursively dir)))
+                        '("stex"
+                          "nanopass"
+                          "lz4"
+                          "zlib"
+                          ;; pre-built bootfiles for unsupported systems:
+                          "boot/a6nt"
+                          "boot/a6osx"
+                          "boot/i3nt"
+                          "boot/i3osx"
+                          "boot/ta6nt"
+                          "boot/ta6osx"
+                          "boot/ti3nt"
+                          "boot/ti3osx")))))))
     (build-system gnu-build-system)
     (inputs
-     `(("ncurses" ,ncurses)
-       ("libuuid" ,util-linux "lib")
-       ("libx11" ,libx11)
-       ("lz4" ,lz4)
-       ("lz4:static" ,lz4 "static")
-       ("xorg-rgb" ,xorg-rgb)
-       ("nanopass" ,nanopass)
+     `(("libuuid" ,util-linux "lib")
        ("zlib" ,zlib)
        ("zlib:static" ,zlib "static")
-       ("stex" ,stex)))
+       ("lz4" ,lz4)
+       ("lz4:static" ,lz4 "static")
+       ;; for expeditor:
+       ("ncurses" ,ncurses)
+       ;; for X:
+       ("libx11" ,libx11)
+       ("xorg-rgb" ,xorg-rgb)))
     (native-inputs
-     `(("texlive" ,(texlive-union (list texlive-latex-oberdiek
+     `(("nanopass" ,nanopass-framework-scheme) ; source-only distribution
+       ;; for docs
+       ("stex" ,chez-stex)
+       ("texlive" ,(texlive-union (list texlive-latex-oberdiek
                                         texlive-generic-epsf)))
        ("ghostscript" ,ghostscript)
        ("netpbm" ,netpbm)))
@@ -96,98 +204,63 @@ 
      (list (search-path-specification
             (variable "CHEZSCHEMELIBDIRS")
             (files (list (string-append "lib/csv" version "-site"))))))
-    (outputs '("out" "doc"))
+    (outputs '("out" "stex" "doc"))
     (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 match))
+     `(#:modules
+       ((guix build gnu-build-system)
+        (guix build utils)
+        (ice-9 ftw)
+        (ice-9 match))
        #:test-target "test"
-       #:configure-flags
-       (list ,(match (or (%current-target-system) (%current-system))
-                ("x86_64-linux" '(list "--machine=ta6le"))
-                ("i686-linux" '(list "--machine=ti3le"))
-                ;; Let autodetection have its attempt on other architectures.
-                (_
-                 '())))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-processor-detection
-           (lambda _ (substitute* "configure"
-                       (("uname -a") "uname -m"))
-                   #t))
-         ;; Adapt the custom 'configure' script.
+         ;; put these where configure expects them to be
+         (add-after 'unpack 'link-nanopass+stex
+           (lambda* (#:key native-inputs inputs #:allow-other-keys)
+             (symlink (assoc-ref (or native-inputs inputs) "nanopass")
+                      "nanopass")
+             (let ((stex-src (assoc-ref (or native-inputs inputs) "stex")))
+               ;; making stex wants to create a build directory,
+               ;; so the immediate directory must be writable
+               (mkdir "stex")
+               (with-directory-excursion "stex"
+                 (for-each (lambda (pth)
+                             (unless (member pth '("." ".."))
+                               (symlink (string-append stex-src "/" pth)
+                                        pth)))
+                           (scandir stex-src))))
+             #t))
+         ;; NOTE: the custom Chez 'configure' script doesn't allow
+         ;; unrecognized flags, such as those automatically added
+         ;; by `gnu-build-system`.
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (nanopass (assoc-ref inputs "nanopass"))
-                   (stex (assoc-ref inputs "stex"))
-                   (lz4-static (assoc-ref inputs "lz4:static"))
-                   (zlib-static (assoc-ref inputs "zlib:static"))
-                   (unpack (assoc-ref %standard-phases 'unpack))
-                   (patch-source-shebangs
-                    (assoc-ref %standard-phases 'patch-source-shebangs)))
-               (map (match-lambda
-                      ((src orig-name new-name)
-                       (with-directory-excursion "."
-                         (apply unpack (list #:source src))
-                         (apply patch-source-shebangs (list #:source src)))
-                       (delete-file-recursively new-name)
-                       (invoke "mv" orig-name new-name)))
-                    `((,nanopass "source" "nanopass")
-                      (,stex "source" "stex")))
-               ;; The configure step wants to CURL all submodules as it
-               ;; detects a checkout without submodules. Disable curling,
-               ;; and manually patch the needed modules for compilation.
-               (substitute* "configure"
-                 (("! -f '") "-d '")) ; working around CURL.
-               (substitute* (find-files "mats" "Mf-.*")
-                 (("^[[:space:]]+(cc ) *") "\tgcc "))
-               (substitute*
-                   (find-files "." (string-append
-                                    "("
-                                    "Mf-[a-zA-Z0-9.]+"
-                                    "|Makefile[a-zA-Z0-9.]*"
-                                    "|checkin"
-                                    "|stex\\.stex"
-                                    "|newrelease"
-                                    "|workarea"
-                                    "|unix\\.ms"
-                                    "|^6\\.ms"
-                                    ;;"|[a-zA-Z0-9.]+\\.ms" ; guile can't read
-                                    ")"))
-                 (("/bin/rm") (which "rm"))
-                 (("/bin/ln") (which "ln"))
-                 (("/bin/cp") (which "cp"))
-                 (("/bin/echo") (which "echo")))
-               (substitute* "makefiles/installsh"
-                 (("/bin/true") (which "true")))
-               (substitute* "stex/Makefile"
-                 (("PREFIX=/usr") (string-append "PREFIX=" out)))
-               (invoke "./configure" "--threads"
-                       (string-append "ZLIB=" zlib-static "/lib/libz.a")
-                       (string-append "LZ4=" lz4-static "/lib/liblz4.a")
-                       (string-append "--installprefix=" out)))))
-         ;; Installation of the documentation requires a running "chez".
-         (add-after 'install 'install-doc
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((doc (string-append (assoc-ref outputs "doc")
-                                       "/share/doc/" ,name "-" ,version)))
-               (invoke "make" "docs")
-               (with-directory-excursion "csug"
-                 (substitute* "Makefile"
-                   ;; The ‘installdir=’ can't be overruled on the command line.
-                   (("/tmp/csug9") doc)
-                   ;; $m is the ‘machine type’, e.g. ‘ta6le’ on x86_64, but is
-                   ;; set incorrectly for some reason, e.g. to ‘a6le’ on x86_64.
-                   ;; Avoid the whole mess by running the (machine-independent)
-                   ;; ‘installsh’ script at its original location.
-                   (("\\$m/installsh") "makefiles/installsh"))
-                 (invoke "make" "install")
-                 (install-file "csug.pdf" doc))
-               (with-directory-excursion "release_notes"
-                 (install-file "release_notes.pdf" doc))
+             (let* ((zlib-static (assoc-ref inputs "zlib:static"))
+                    (lz4-static (assoc-ref inputs "lz4:static"))
+                    (out (assoc-ref outputs "out"))
+                    (flags (list
+                            (string-append "--installprefix=" out)
+                            (string-append "ZLIB=" zlib-static "/lib/libz.a")
+                            (string-append "LZ4=" lz4-static "/lib/liblz4.a")
+                            "--nogzip-man-pages" ;; guix will do it
+                            "--threads"))
+                    (flags (if (assoc-ref inputs "ncurses")
+                               flags
+                               (cons "--disable-curses"
+                                     flags)))
+                    (flags (if (and (assoc-ref inputs "libx11")
+                                    (assoc-ref inputs "xorg-rgb"))
+                               flags
+                               (cons "--disable-x11"
+                                     flags))))
+               ;; Some makefiles (for tests) don't seem to propagate CC
+               ;; properly, so we take it out of their hands:
+               (setenv "CC" "gcc")
+               (apply invoke
+                      "./configure"
+                      flags)
                #t)))
-         ;; The binary file name is called "scheme" as the one from MIT/GNU
+         ;; The binary file name is called "scheme" as is the one from MIT/GNU
          ;; Scheme.  We add a symlink to use in case both are installed.
          (add-after 'install 'install-symlink
            (lambda* (#:key outputs #:allow-other-keys)
@@ -202,16 +275,70 @@ 
                                                    "/" name ".boot")))
                     (find-files lib "scheme.boot"))
                #t)))
-         (add-before 'reset-gzip-timestamps 'make-manpages-writable
-           (lambda* (#:key outputs #:allow-other-keys)
-             (map (lambda (file)
-                    (make-file-writable file))
-                  (find-files (string-append (assoc-ref outputs "out")
-                                             "/share/man")
-                              ".*\\.gz$"))
-             #t)))))
+         ;; We build & install stex so it can (in principle)
+         ;; be reused for other documents.
+         (add-after 'install-symlink 'build+install-stex
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             (let* ((stex+version
+                     (strip-store-file-name
+                      (assoc-ref (or native-inputs inputs) "stex")))
+                    (stex-output (assoc-ref outputs "stex"))
+                    (doc-dir (string-append stex-output
+                                            "/share/doc/"
+                                            stex+version)))
+               (with-directory-excursion "stex"
+                 (invoke "make"
+                         "install"
+                         (string-append "LIB="
+                                        stex-output
+                                        "/lib/"
+                                        stex+version)
+                         (string-append "Scheme="
+                                        (assoc-ref outputs "out")
+                                        "/bin/scheme"))
+                 (for-each (lambda (pth)
+                             (install-file pth doc-dir))
+                           '("ReadMe" ; includes the license
+                             "doc/stex.html"
+                             "doc/stex.css"
+                             "doc/stex.pdf"))
+                 #t))))
+         ;; Building the documentation requires stex and a running scheme.
+         ;; FIXME: this may be wrong for cross-compilation
+         (add-after 'build+install-stex 'build+install-doc
+           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+             (let* ((chez+version (strip-store-file-name
+                                   (assoc-ref outputs "out")))
+                    (stex+version
+                     (strip-store-file-name
+                      (assoc-ref (or native-inputs inputs) "stex")))
+                    (scheme (string-append (assoc-ref outputs "out")
+                                           "/bin/scheme"))
+                    (stexlib (string-append (assoc-ref outputs "stex")
+                                            "/lib/"
+                                            stex+version))
+                    (doc-dir (string-append (assoc-ref outputs "doc")
+                                            "/share/doc/"
+                                            chez+version)))
+               (define* (stex-make #:optional (suffix ""))
+                 (invoke "make"
+                         "install"
+                         (string-append "Scheme=" scheme)
+                         (string-append "STEXLIB=" stexlib)
+                         (string-append "installdir=" doc-dir suffix)))
+               (with-directory-excursion "csug"
+                 (stex-make "/csug"))
+               (with-directory-excursion "release_notes"
+                 (stex-make "/release_notes"))
+               (with-directory-excursion doc-dir
+                 (symlink "release_notes/release_notes.pdf"
+                          "release_notes.pdf")
+                 (symlink "csug/csug9_5.pdf"
+                          "csug.pdf"))
+               #t))))))
     ;; According to the documentation MIPS is not supported.
     ;; Cross-compiling for the Raspberry Pi is supported, but not native ARM.
+    ;; TODO is this correct? Chez has an arm32le machine type.
     (supported-systems (fold delete %supported-systems
                              '("mips64el-linux" "armhf-linux")))
     (home-page "https://cisco.github.io/ChezScheme/")
@@ -223,6 +350,7 @@  generates native code for each target processor, with support for x86, x86_64,
 and 32-bit PowerPC architectures.")
     (license asl2.0)))
 
+
 (define-public chez-srfi
   (package
     (name "chez-srfi")
diff --git a/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch b/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch
new file mode 100644
index 0000000000..07d65225ed
--- /dev/null
+++ b/gnu/packages/patches/chez-scheme-build-util-paths-backport.patch
@@ -0,0 +1,780 @@ 
+From 2447e047b750c3371778beb487f881641a582e66 Mon Sep 17 00:00:00 2001
+From: Philip McGrath <philip@philipmcgrath.com>
+Date: Thu, 11 Mar 2021 18:17:47 -0500
+Subject: [PATCH] avoid hard-coded paths for utilities in build scripts
+
+Backported from
+https://github.com/cisco/ChezScheme/commit/8f4633ce24ac6425b2ab13cc78026b1c9bb5361e
+
+Specific changes:
+  - `cc` -> `$(CC)`
+  - `/bin/rm` -> `rm`
+  - `/bin/ln` -> `ln`
+  - `/bin/cp` -> `cp`
+  - `/bin/echo` -> `echo`
+  - in `makefiles/installsh`, add a case to find `true`
+    at an unusual path or as a shell builtin
+
+Co-authored-by: Andy Keep <akeep@robotman.org>
+---
+ LOG                                 | 12 ++++++++++++
+ csug/gifs/Makefile                  |  8 ++++----
+ csug/math/Makefile                  |  4 ++--
+ examples/Makefile                   |  2 +-
+ makefiles/Makefile-csug.in          |  6 +++---
+ makefiles/Makefile-release_notes.in |  2 +-
+ makefiles/Mf-install.in             |  4 ++--
+ makefiles/installsh                 |  3 ++-
+ mats/6.ms                           |  2 +-
+ mats/Mf-a6fb                        |  4 ++--
+ mats/Mf-a6le                        |  4 ++--
+ mats/Mf-a6nb                        |  4 ++--
+ mats/Mf-a6ob                        |  4 ++--
+ mats/Mf-a6osx                       |  4 ++--
+ mats/Mf-arm32le                     |  4 ++--
+ mats/Mf-i3fb                        |  4 ++--
+ mats/Mf-i3le                        |  4 ++--
+ mats/Mf-i3nb                        |  4 ++--
+ mats/Mf-i3ob                        |  4 ++--
+ mats/Mf-i3osx                       |  4 ++--
+ mats/Mf-i3qnx                       |  4 ++--
+ mats/Mf-ppc32le                     |  4 ++--
+ mats/Mf-ta6fb                       |  4 ++--
+ mats/Mf-ta6le                       |  4 ++--
+ mats/Mf-ta6nb                       |  4 ++--
+ mats/Mf-ta6ob                       |  4 ++--
+ mats/Mf-ta6osx                      |  4 ++--
+ mats/Mf-ti3fb                       |  4 ++--
+ mats/Mf-ti3le                       |  4 ++--
+ mats/Mf-ti3nb                       |  4 ++--
+ mats/Mf-ti3ob                       |  4 ++--
+ mats/Mf-ti3osx                      |  4 ++--
+ mats/Mf-tppc32le                    |  4 ++--
+ mats/unix.ms                        |  4 ++--
+ newrelease                          | 22 +++++++++++-----------
+ pkg/Makefile                        |  2 +-
+ release_notes/gifs/Makefile         |  6 +++---
+ release_notes/math/Makefile         |  4 ++--
+ s/Mf-base                           |  2 +-
+ workarea                            | 10 +++++-----
+ 40 files changed, 101 insertions(+), 88 deletions(-)
+
+diff --git a/LOG b/LOG
+index e1631df..399104d 100644
+--- a/LOG
++++ b/LOG
+@@ -2119,3 +2119,15 @@
+     bintar/Makefile rpm/Makefile pkg/Makefile wininstall/Makefile
+     wininstall/a6nt.wxs wininstall/i3nt.wxs wininstall/ta6nt.wxs
+     wininstall/ti3nt.wxs
++9.5.5 changes:
++- avoid hard-coded paths for utilities in build scripts
++    checkin csug/gifs/Makefile csug/math/Makefile examples/Makefile
++    makefiles/Makefile-csug.in makefiles/Makefile-release_notes.in
++    makefiles/Mf-install.in makefiles/installsh mats/6.ms mats/Mf-a6fb
++    mats/Mf-a6le mats/Mf-a6nb mats/Mf-a6ob mats/Mf-a6osx mats/Mf-arm32le
++    mats/Mf-i3fb mats/Mf-i3le mats/Mf-i3nb mats/Mf-i3ob mats/Mf-i3osx
++    mats/Mf-i3qnx mats/Mf-ppc32le mats/Mf-ta6fb mats/Mf-ta6le mats/Mf-ta6nb
++    mats/Mf-ta6ob mats/Mf-ta6osx mats/Mf-ti3fb mats/Mf-ti3le mats/Mf-ti3nb
++    mats/Mf-ti3ob mats/Mf-ti3osx mats/Mf-tppc32le mats/unix.ms newrelease
++    pkg/Makefile release_notes/gifs/Makefile release_notes/math/Makefile
++    s/Mf-base workarea
+diff --git a/csug/gifs/Makefile b/csug/gifs/Makefile
+index 8676e4c..4253ffd 100644
+--- a/csug/gifs/Makefile
++++ b/csug/gifs/Makefile
+@@ -18,7 +18,7 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log *.aux
++	rm -f $*.dvi $*.log *.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+ # translate ps file to gif w/o transparent white background
+@@ -28,7 +28,7 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif > $*.gif
+-	/bin/rm -f $*.dvi $*.log *.aux
++	rm -f $*.dvi $*.log *.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+ all: ${gifs}
+@@ -57,7 +57,7 @@ ghostRightarrow.gif: Rightarrow.tex
+           giftrans -g '#000000=#ffffff' |\
+           giftopnm |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
++	rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/csug/math/Makefile b/csug/math/Makefile
+index 3385fdb..3392ea8 100644
+--- a/csug/math/Makefile
++++ b/csug/math/Makefile
+@@ -15,11 +15,11 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log $*.aux
++	rm -f $*.dvi $*.log $*.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+ all: ${gifs}
+ 
+ ${gifs}: mathmacros
+ 
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/examples/Makefile b/examples/Makefile
+index b1b4e1d..3edfdd0 100644
+--- a/examples/Makefile
++++ b/examples/Makefile
+@@ -25,4 +25,4 @@ needed:	${obj}
+ 
+ all: ; echo "(time (for-each compile-file (map symbol->string '(${src}))))" | ${Scheme}
+ 
+-clean: ; /bin/rm -f $(obj) expr.md
++clean: ; rm -f $(obj) expr.md
+diff --git a/makefiles/Makefile-csug.in b/makefiles/Makefile-csug.in
+index df24092..6f8a8d9 100644
+--- a/makefiles/Makefile-csug.in
++++ b/makefiles/Makefile-csug.in
+@@ -29,7 +29,7 @@ install: target
+ # thrice is not enough when starting from scratch
+ logcheck1: $(x).thirdrun
+ 	@if [ -n "`grep 'Warning: Label(s) may have changed' $(x).log`" ] ; then\
+-            /bin/rm -f $(x).thirdrun ;\
++            rm -f $(x).thirdrun ;\
+             $(MAKE) $(x).thirdrun;\
+          fi
+ 
+@@ -55,7 +55,7 @@ stexsrc = csug.stex title.stex copyright.stex contents.stex\
+ texsrc = ${stexsrc:%.stex=%.tex}
+ 
+ title.tex contents.tex bibliography.tex:
+-	/bin/rm -f $*.tex
++	rm -f $*.tex
+ 	echo "%%% DO NOT EDIT THIS FILE" > $*.tex
+ 	echo "%%% Edit the .stex version instead" >> $*.tex
+ 	echo "" >> $*.tex
+@@ -147,7 +147,7 @@ code: $(stexsrc)
+ 	echo '(load "code" pretty-print)' | $(Scheme) -q
+ 
+ $(x).clean:
+-	-/bin/rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\
++	-rm -f $(x).rfm $(x).sfm $(x).prefirstrun $(x).presecondrun\
+                     $(x).prethirdrun $(x).ans\
+                     $(x).hprefirstrun $(x).hpresecondrun $(x).hprethirdrun\
+                     tspl.aux tspl.haux tspl.rfm tspl.idx in.hidx\
+diff --git a/makefiles/Makefile-release_notes.in b/makefiles/Makefile-release_notes.in
+index 4435b6f..64348a4 100644
+--- a/makefiles/Makefile-release_notes.in
++++ b/makefiles/Makefile-release_notes.in
+@@ -38,7 +38,7 @@ install: $x.pdf $x.html
+ 	$(INSTALL) -m 2755 -d $(installdir)/gifs
+ 	$(INSTALL) -m 0644 --ifdiff gifs/*.gif $(installdir)/gifs
+ 	$(INSTALL) -m 2755 -d $(installdir)/math
+-	-/bin/rm -rf $(installdir)/$(mathdir)
++	-rm -rf $(installdir)/$(mathdir)
+ 	$(INSTALL) -m 2755 -d $(installdir)/$(mathdir)
+ 	if [ -e $(mathdir)/0.gif ] ; then $(INSTALL) -m 0644 $(mathdir)/*.gif $(installdir)/$(mathdir) ; fi
+ 
+diff --git a/makefiles/Mf-install.in b/makefiles/Mf-install.in
+index a702c34..c09043d 100644
+--- a/makefiles/Mf-install.in
++++ b/makefiles/Mf-install.in
+@@ -114,12 +114,12 @@ bininstall: ${Bin}
+ libbininstall: ${LibBin}
+ 	$I -m 444 ${PetiteBoot} ${LibBin}/petite.boot
+ 	if [ "${InstallPetiteName}" != "petite" ]; then\
+-          /bin/rm -f ${LibBin}/${InstallPetiteName}.boot;\
++          rm -f ${LibBin}/${InstallPetiteName}.boot;\
+           ln -f ${LibBin}/petite.boot ${LibBin}/${InstallPetiteName}.boot;\
+         fi
+ 	$I -m 444 ${SchemeBoot} ${LibBin}/scheme.boot;\
+ 	if [ "${InstallSchemeName}" != "scheme" ]; then\
+-          /bin/rm -f ${LibBin}/${InstallSchemeName}.boot;\
++          rm -f ${LibBin}/${InstallSchemeName}.boot;\
+           ln -f ${LibBin}/scheme.boot ${LibBin}/${InstallSchemeName}.boot;\
+         fi
+ 	ln -f ${LibBin}/scheme.boot ${LibBin}/${InstallScriptName}.boot;
+diff --git a/makefiles/installsh b/makefiles/installsh
+index 48f1e46..95d85fb 100755
+--- a/makefiles/installsh
++++ b/makefiles/installsh
+@@ -1,7 +1,8 @@
+ #! /bin/sh
+ if [ -x /bin/true ]; then TRUE=/bin/true;
+ elif [ -x /usr/bin/true ]; then TRUE=/usr/bin/true;
+-else echo "Can't find /bin/true or /usr/bin/true" ; exit 1;
++elif command -v true &> /dev/null; then TRUE=true;
++else echo "Can't find /bin/true or /usr/bin/true and no true command" ; exit 1;
+ fi
+ 
+ while ${TRUE} ; do
+diff --git a/mats/6.ms b/mats/6.ms
+index 102f84b..e504230 100644
+--- a/mats/6.ms
++++ b/mats/6.ms
+@@ -2685,7 +2685,7 @@
+       (begin
+         (system "ln -s ../examples .")
+         (load "examples/fatfib.ss" compile)
+-        (system "/bin/rm examples")
++        (system "rm -f examples")
+         #t))
+   (or (windows?) (embedded?)
+       (equal?
+diff --git a/mats/Mf-a6fb b/mats/Mf-a6fb
+index b16d1b6..ff9e687 100644
+--- a/mats/Mf-a6fb
++++ b/mats/Mf-a6fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6le b/mats/Mf-a6le
+index d6fee09..a3bda76 100644
+--- a/mats/Mf-a6le
++++ b/mats/Mf-a6le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6nb b/mats/Mf-a6nb
+index 48187ef..0f7ac17 100644
+--- a/mats/Mf-a6nb
++++ b/mats/Mf-a6nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6ob b/mats/Mf-a6ob
+index 12758f3..0ffcccc 100644
+--- a/mats/Mf-a6ob
++++ b/mats/Mf-a6ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-a6osx b/mats/Mf-a6osx
+index f1dbf85..57bac22 100644
+--- a/mats/Mf-a6osx
++++ b/mats/Mf-a6osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-arm32le b/mats/Mf-arm32le
+index f33a665..83896eb 100644
+--- a/mats/Mf-arm32le
++++ b/mats/Mf-arm32le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -fomit-frame-pointer -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -fomit-frame-pointer -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3fb b/mats/Mf-i3fb
+index 150cedb..1e4e8fc 100644
+--- a/mats/Mf-i3fb
++++ b/mats/Mf-i3fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3le b/mats/Mf-i3le
+index 8f521c8..b248620 100644
+--- a/mats/Mf-i3le
++++ b/mats/Mf-i3le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3nb b/mats/Mf-i3nb
+index e81f6ff..8afeb5c 100644
+--- a/mats/Mf-i3nb
++++ b/mats/Mf-i3nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3ob b/mats/Mf-i3ob
+index 4e3ee1b..fcd4dee 100644
+--- a/mats/Mf-i3ob
++++ b/mats/Mf-i3ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3osx b/mats/Mf-i3osx
+index 53c7d4a..a55f6ee 100644
+--- a/mats/Mf-i3osx
++++ b/mats/Mf-i3osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-i3qnx b/mats/Mf-i3qnx
+index 724f2db..3e1437a 100644
+--- a/mats/Mf-i3qnx
++++ b/mats/Mf-i3qnx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ppc32le b/mats/Mf-ppc32le
+index 28151a8..547ca00 100644
+--- a/mats/Mf-ppc32le
++++ b/mats/Mf-ppc32le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6fb b/mats/Mf-ta6fb
+index 921d609..5ed233e 100644
+--- a/mats/Mf-ta6fb
++++ b/mats/Mf-ta6fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6le b/mats/Mf-ta6le
+index cd014ec..21c686a 100644
+--- a/mats/Mf-ta6le
++++ b/mats/Mf-ta6le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6nb b/mats/Mf-ta6nb
+index 6b1929d..9b9b898 100644
+--- a/mats/Mf-ta6nb
++++ b/mats/Mf-ta6nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6ob b/mats/Mf-ta6ob
+index a7aee91..8f25aed 100644
+--- a/mats/Mf-ta6ob
++++ b/mats/Mf-ta6ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ta6osx b/mats/Mf-ta6osx
+index 42da5d7..0dd386f 100644
+--- a/mats/Mf-ta6osx
++++ b/mats/Mf-ta6osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m64 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m64 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3fb b/mats/Mf-ti3fb
+index c891145..56bf7d3 100644
+--- a/mats/Mf-ti3fb
++++ b/mats/Mf-ti3fb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3le b/mats/Mf-ti3le
+index 12e77b8..22b4148 100644
+--- a/mats/Mf-ti3le
++++ b/mats/Mf-ti3le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3nb b/mats/Mf-ti3nb
+index 028c652..573946e 100644
+--- a/mats/Mf-ti3nb
++++ b/mats/Mf-ti3nb
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3ob b/mats/Mf-ti3ob
+index 8a4741c..4472b60 100644
+--- a/mats/Mf-ti3ob
++++ b/mats/Mf-ti3ob
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-ti3osx b/mats/Mf-ti3osx
+index 6913c34..9273b44 100644
+--- a/mats/Mf-ti3osx
++++ b/mats/Mf-ti3osx
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -pthread -dynamiclib -undefined dynamic_lookup -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/Mf-tppc32le b/mats/Mf-tppc32le
+index a12b515..8b9d9f0 100644
+--- a/mats/Mf-tppc32le
++++ b/mats/Mf-tppc32le
+@@ -21,7 +21,7 @@ fobj = foreign1.so
+ include Mf-base
+ 
+ foreign1.so: ${fsrc} ../boot/$m/scheme.h
+-	cc -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
++	$(CC) -m32 -pthread -fPIC -shared -I${Include} -o foreign1.so ${fsrc}
+ 
+ cat_flush: cat_flush.c
+-	cc -o cat_flush cat_flush.c
++	$(CC) -o cat_flush cat_flush.c
+diff --git a/mats/unix.ms b/mats/unix.ms
+index cfba3e7..db7f6f9 100644
+--- a/mats/unix.ms
++++ b/mats/unix.ms
+@@ -72,8 +72,8 @@
+   (mat system
+     (eqv? (with-output-to-file "testfile.ss" void '(replace)) (void))
+     (begin
+-      (system (format "~:[~;/pkg~]/bin/rm testfile.ss" (embedded?)))
+-      (system (format "~:[~;/pkg~]/bin/echo hello > testfile.ss" (embedded?)))
++      (system "rm -f testfile.ss")
++      (system "echo hello > testfile.ss")
+       (let ([p (open-input-file "testfile.ss")])
+         (and (eq? (read p) 'hello)
+              (begin (close-input-port p) #t))))
+diff --git a/newrelease b/newrelease
+index e903956..2d06740 100755
+--- a/newrelease
++++ b/newrelease
+@@ -75,13 +75,13 @@ if ($status != 0) exit 1
+ 
+ cd $W
+ 
+-/bin/rm -f BUILDING
++rm -f BUILDING
+ sed -e "s/Chez Scheme Version [^ ]*/Chez Scheme Version $R/" \
+     -e "s/Copyright 1984-.... /Copyright 1984-`date +%Y` /" \
+     ../BUILDING > BUILDING
+ set updatedfiles = ($updatedfiles BUILDING)
+ 
+-/bin/rm -f NOTICE
++rm -f NOTICE
+ sed -e "s/Chez Scheme Version [^ ]*/Chez Scheme Version $R/" \
+     -e "s/Copyright 1984-.... /Copyright 1984-`date +%Y` /" \
+     ../NOTICE > NOTICE
+@@ -92,19 +92,19 @@ sed -e "s/csv[0-9]\.[0-9]\(\.[0-9]\)*/csv$R/" ../makefiles/Mf-install.in > makef
+ sed -e "s/csug[0-9]\.[0-9]/csug$MR.$mR/" -e "s/csug[0-9]_[0-9]/csug$MR""_$mR/" ../makefiles/Makefile-csug.in > makefiles/Makefile-csug.in
+ set updatedfiles = ($updatedfiles makefiles/Mf-install.in makefiles/Makefile-csug.in)
+ 
+-/bin/rm scheme.1.in
++rm -f scheme.1.in
+ sed -e "s/Chez Scheme Version [0-9]\.[0-9]\(\.[0-9]\)* .* [0-9][0-9]*/Chez Scheme Version $R `date +'%B %Y'`/" \
+     -e "s/Copyright .* Cisco Systems, Inc./Copyright `date +%Y` Cisco Systems, Inc./" \
+   ../scheme.1.in > scheme.1.in
+ set updatedfiles = ($updatedfiles scheme.1.in)
+ 
+-/bin/rm -f c/Makefile.{,t}{i3,a6}nt
++rm -f c/Makefile.{,t}{i3,a6}nt
+ foreach fn (c/Makefile.{,t}{a6,i3}nt)
+   set updatedfiles = ($updatedfiles $fn)
+   sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" ../$fn > $fn
+ end
+ 
+-/bin/rm -f mats/Mf-{,t}{i3,a6}nt
++rm -f mats/Mf-{,t}{i3,a6}nt
+ foreach fn (mats/Mf-{,t}{a6,i3}nt)
+   set updatedfiles = ($updatedfiles $fn)
+   sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" ../$fn > $fn
+@@ -123,11 +123,11 @@ sed -e "s/FILEVERSION .*/FILEVERSION $RCVERSION/"\
+     -e "s/Copyright 1984-..../Copyright 1984-`date +%Y`/g" ../c/scheme.rc > c/scheme.rc
+ set updatedfiles = ($updatedfiles c/scheme.rc)
+ 
+-/bin/rm -f s/7.ss
++rm -f s/7.ss
+ sed -e "s/nCopyright 1984-..../nCopyright 1984-`date +%Y`/g" ../s/7.ss > s/7.ss
+ set updatedfiles = ($updatedfiles s/7.ss)
+ 
+-/bin/rm -f s/cmacros.ss
++rm -f s/cmacros.ss
+ set VNUM = `printf "%04x%02x%02x" $MR $mR $bR`
+ sed -e "s/scheme-version #x......../scheme-version #x$VNUM/" ../s/cmacros.ss > s/cmacros.ss
+ set updatedfiles = ($updatedfiles s/cmacros.ss)
+@@ -146,17 +146,17 @@ sed -e "s/Revised\(.*\)for Chez Scheme Version [^ ]*<br>/Revised\1for Chez Schem
+   ../csug/csug.stex > csug/csug.stex
+ set updatedfiles = ($updatedfiles csug/copyright.stex csug/csug.stex)
+ 
+-/bin/rm bintar/Makefile
++rm -f bintar/Makefile
+ sed -e "s/^version = .*/version = $R/" \
+     -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" \
+   ../bintar/Makefile > bintar/Makefile
+ set updatedfiles = ($updatedfiles bintar/Makefile)
+ 
+-/bin/rm rpm/Makefile
++rm -f rpm/Makefile
+ sed -e "s/^version = .*/version = $R/" ../rpm/Makefile > rpm/Makefile
+ set updatedfiles = ($updatedfiles rpm/Makefile)
+ 
+-/bin/rm pkg/Makefile
++rm -f pkg/Makefile
+ sed -e "s/^version = .*/version = $R/" \
+     -e "s/&copy; .* Cisco Systems/\&copy; `date +%Y` Cisco Systems/" \
+      ../pkg/Makefile > pkg/Makefile
+@@ -170,7 +170,7 @@ foreach fn (wininstall/{,t}{a6,i3}nt.wxs)
+   sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/" ../$fn > $fn
+ end
+ 
+-/bin/rm LOG
++rm -f LOG
+ cat ../LOG > LOG
+ echo "" >> LOG
+ echo "$R changes:" >> LOG
+diff --git a/pkg/Makefile b/pkg/Makefile
+index e0eef67..a3fe83f 100644
+--- a/pkg/Makefile
++++ b/pkg/Makefile
+@@ -39,7 +39,7 @@ $(PKG): $(BUILDROOT)/$(PKG)
+           --package-path $(BUILDROOT)\
+           $(PKG)
+ 	sudo chown $(DOTUSER):$(DOTGROUP) $(PKG)
+-	sudo /bin/rm -rf $(RELEASE) $(BUILDROOT)
++	sudo rm -rf $(RELEASE) $(BUILDROOT)
+ 
+ $(BUILDROOT)/$(PKG): $(PKGCONTENT)
+ 	sudo /usr/bin/pkgbuild\
+diff --git a/release_notes/gifs/Makefile b/release_notes/gifs/Makefile
+index 9572965..701d53a 100644
+--- a/release_notes/gifs/Makefile
++++ b/release_notes/gifs/Makefile
+@@ -15,7 +15,7 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log *.aux
++	rm -f $*.dvi $*.log *.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+ all: ${gifs}
+@@ -44,7 +44,7 @@ ghostRightarrow.gif: Rightarrow.tex
+           giftrans -g '#000000=#ffffff' |\
+           giftopnm |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
++	rm -f Rightarrow.dvi Rightarrow.log Rightarrow.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/release_notes/math/Makefile b/release_notes/math/Makefile
+index b3ffae3..9eca430 100644
+--- a/release_notes/math/Makefile
++++ b/release_notes/math/Makefile
+@@ -16,11 +16,11 @@ density=-r90x90
+           ${density} - |\
+           pnmcrop |\
+           ppmtogif -transparent white > $*.gif
+-	/bin/rm -f $*.dvi $*.log $*.aux
++	rm -f $*.dvi $*.log $*.aux
+ 	test -f $*.gif && chmod 644 $*.gif
+ 
+ all: ${gifs}
+ 
+ ${gifs}: mathmacros
+ 
+-clean: ; /bin/rm -f *.gif Make.out
++clean: ; rm -f *.gif Make.out
+diff --git a/s/Mf-base b/s/Mf-base
+index c709608..40d816c 100644
+--- a/s/Mf-base
++++ b/s/Mf-base
+@@ -206,7 +206,7 @@ profiled:
+ 	$(MAKE) all loadspd=t bp=t PetiteBoot=../boot/$m/xpetite.boot SchemeBoot=../boot/$m/xscheme.boot
+ 	$(MAKE) prettyclean
+ 	$(MAKE) io.$m loadspd=t dumpbpd=t Scheme="../bin/$m/scheme -b ../boot/$m/xpetite.boot -b ../boot/$m/xscheme.boot"
+-	/bin/rm -f ../boot/$m/xpetite.boot ../boot/$m/xscheme.boot
++	rm -f ../boot/$m/xpetite.boot ../boot/$m/xscheme.boot
+ 	$(MAKE) prettyclean
+ 	$(MAKE) all loadspd=t loadbpd=t
+ 
+diff --git a/workarea b/workarea
+index bacc712..0461919 100755
+--- a/workarea
++++ b/workarea
+@@ -70,9 +70,9 @@ esac
+ 
+ if [ "$OS" = "Windows_NT" ]
+ then
+-    ln="/bin/cp -R"
++    ln="cp -R"
+ else
+-    ln="/bin/ln -s"
++    ln="ln -s"
+ fi
+ 
+ # This shell script creates a workarea for local modifications to the
+@@ -102,7 +102,7 @@ workln()
+ forceworkln()
+ {
+     if [ ! -e $2 ] ; then
+-        /bin/ln -s $1 $2 2> /dev/null
++        ln -s $1 $2 2> /dev/null
+     fi
+ }
+ 
+@@ -168,13 +168,13 @@ done
+ # deep copy submodules where builds occur so changes don't propagate through symlinks
+ for dir in `echo zlib` ; do
+   if [ ! -e $W/$dir ] ; then
+-    /bin/cp -R $dir $W/$dir
++    cp -R $dir $W/$dir
+   fi
+ done
+ 
+ for dir in `echo lz4` ; do
+   if [ ! -e $W/$dir ] ; then
+-    /bin/cp -R $dir $W/$dir
++    cp -R $dir $W/$dir
+   fi
+ done
+ 
+-- 
+2.21.1 (Apple Git-122.3)
+