1419 Commits

Author SHA1 Message Date
Marius Bakke
6f9a80b331
Merge branch 'master' into core-updates
Note: this merge actually changes the 'curl' and 'python-attrs' derivations,
as part of solving caf4a7a2770ef4d05a6e18f40d602e51da749ddc and
12964df69a99de6190422c752fef65ef813f3b6b respectively.

4604d43c0e (gnu: gnutls@3.6.16: Fix cross-compilation.) was ignored because it
cannot currently be tested.

 Conflicts:
	gnu/local.mk
	gnu/packages/aidc.scm
	gnu/packages/boost.scm
	gnu/packages/curl.scm
	gnu/packages/nettle.scm
	gnu/packages/networking.scm
	gnu/packages/python-xyz.scm
	gnu/packages/tls.scm
2021-06-19 17:38:47 +02:00
Paul A. Patience
483f537081
doc, gnu, guix: Fix typos.
* doc/guix.texi: Fix various typos and reword a sentence.
* gnu/packages/cpp.scm (cpplint)[description]: Fix typo.
* gnu/packages/dns.scm (ldns): Fix typo in comment.
* gnu/packages/games.scm (yamagi-quake2): Fix typo in comment.
* gnu/packages/qt.scm (python-pyqtwebengine): Fix typo in comment.
* gnu/packages/rails.scm (ruby-autoprefixer-rails): Fix typo in comment.
* gnu/packages/syndication.scm (quiterss)[description]: Fix typo.
* gnu/packages/terminals.scm (kmscon): Fix typo in comment.
* gnu/packages/xml.scm (perl-xml-sax-base)[description]: Fix typo.
  (python-elementpath)[description]: Fix typo.
* guix/build/asdf-build-system.scm (output-translation): Fix typo in docstring.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-13 23:57:45 +02:00
Ludovic Courtès
8cef92d063
profiles: Move some of the work to the build side.
When running:

  guix environment --ad-hoc gnome --no-grafts --search-paths

this reduces wall-clock time by ~5%.  The number of object cache lookups
goes down from 96K to 89K.  (Note that 'gnome' is an interesting example
because it has many propagated inputs, which themselves have propagated
inputs too, which would lead to a long input list and a long manifest in
the 'profile-derivation' gexp.)

* guix/profiles.scm (profile-derivation)[inputs, search-paths]: Remove.
[extra-inputs]: New variable.
[builder]: Adjust call to 'build-profile'.
* guix/build/profiles.scm (manifest-sexp->inputs+search-paths): New
procedure.
(build-profile): Remove 'inputs' parameter; make 'manifest' the 2nd
positional parameter and add #:extra-inputs.  Call
'manifest-sexp->inputs+search-paths' to obtain 'inputs' and
'search-paths'.
2021-06-12 00:49:32 +02:00
Maxime Devos
a62d17dc05
rakudo-build-system: Look up the interpreter in 'inputs'.
* guix/build/rakudo-build-system.scm (wrap): Pass
  the shell interpreter from 'inputs' to 'wrap-program' using
  'search-input-file'.

Partially-Fixes: <https://issues.guix.gnu.org/47869>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-04 22:34:32 +02:00
Maxime Devos
2ac898d7f8
qt-build-system: Look up the interpreter in 'inputs'.
* guix/build/qt-build-system.scm (wrap-all-programs): Pass
  the shell interpreter from 'inputs' to 'wrap-program' using
  'search-input-file'.

Partially-Fixes: <https://issues.guix.gnu.org/47869>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-04 22:34:32 +02:00
Maxime Devos
5b24cbee31
python-build-system: Look up the interpreter in 'inputs'.
* guix/build/python-build-system.scm (wrap): Pass the shell
  interpreter from 'inputs' to 'wrap-program' using 'search-input-file'.

Partially-Fixes: <https://issues.guix.gnu.org/47869>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-04 22:34:31 +02:00
Maxime Devos
1dbc3b2b0c
glib-or-gtk-build-system: Look up the interpreter in 'inputs'.
* guix/build/glib-or-gtk-build-system.scm (wrap-all-programs): Pass
  the shell interpreter from 'inputs' to 'wrap-program' using
  'search-input-file'.

Partially-Fixes: <https://issues.guix.gnu.org/47869>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-04 22:34:31 +02:00
Maxime Devos
5378edeab4
utils: Define ‘search-input-file’ procedure.
The procedure ‘which’ from (guix build utils)
is used for two different purposes:

  1. for finding the absolute file name of a binary
     that needs to run during the build process

  2. for finding the absolute file name of a binary,
     for the target system (as in --target=TARGET),
     e.g. for substituting sh->/gnu/store/.../bin/sh,
     python->/gnu/store/.../bin/python.

When compiling natively (target=#f in Guix parlance),
this is perfectly fine.

However, when cross-compiling, there is a problem.
"which" looks in $PATH for binaries.  That's good for purpose (1),
but incorrect for (2), as the $PATH contains binaries from native-inputs
instead of inputs.

This commit defines a ‘search-input-file’ procedure. It functions
like 'which', but instead of searching in $PATH, it searches in
the 'inputs' of the build phase, which must be passed to
‘search-input-file’ as an argument. Also, the file name must
include "bin/" or "sbin/" as appropriate.

* guix/build/utils.scm (search-input-file): New procedure.
* tests/build-utils.scm
  ("search-input-file: exception if not found")
  ("search-input-file: can find if existent"): Test it.
* doc/guix.texi (File Search): Document it.

Partially-Fixes: <https://issues.guix.gnu.org/47869>
Co-Authored-By: Ludovic Courtès <ludo@gnu.org>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-04 22:34:26 +02:00
Maxime Devos
8b0899963f
utils: Allow overriding the shell interpreter in ‘wrap-program’.
Previously, when creating new wrappers, 'wrap-program' would search
for an interpreter to use in PATH. However, this is incorrect when
cross-compiling. Allow overriding the shell interpreter to use,
via an optional keyword argument #:sh.

In time, when all users of 'wrap-program' have been corrected,
this keyword argument can be made mandatory.

* guix/build/utils.scm (wrap-program): Introduce a #:sh keyword
  argument, defaulting to (which "sh"). Use this keyword argument.

Partially-Fixes: <https://issues.guix.gnu.org/47869>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-04 22:31:38 +02:00
Marius Bakke
f034264204
Merge branch 'master' into core-updates
Conflicts:
	gnu/local.mk
	gnu/packages/bioinformatics.scm
	gnu/packages/django.scm
	gnu/packages/gtk.scm
	gnu/packages/llvm.scm
	gnu/packages/python-web.scm
	gnu/packages/python.scm
	gnu/packages/tex.scm
	guix/build-system/asdf.scm
	guix/build/emacs-build-system.scm
	guix/profiles.scm
2021-05-09 21:29:46 +02:00
Guillaume Le Vaillant
2fa8fd4af5
build-system: asdf: Work around package-name->name+version bug.
This patch modifies how the name of the main Common Lisp system is extracted
from the full Guix package name to work around bug#48225 concerning the
'package-name->name+version' function.

Fixes <https://issues.guix.gnu.org/41437>.

* guix/build-system/asdf.scm (asdf-build): Fix 'systems' function.
* guix/build/asdf-build-system.scm (main-system-name): Fix it.
2021-05-08 13:42:38 +02:00
Timothy Sample
7262619d6f
download: Restore error reporting.
Normal error reporting was disrupted by the introduction of
Disarchive in commit fbc2a52a32ddc664db8ebab420c2e17b1432c744.  In
particular, running 'guix download' would succeed with a partially
downloaded file.

* guix/build/download.scm (disarchive-fetch/any): Return '#f' when
Disarchive cannot be found, the specification cannot be found, or
Disarchive fails due to an error.
2021-05-05 23:20:36 -04:00
Leo Prikler
0f116d7f90
build-system: emacs: Clarify %install-dir.
The old comment is no longer adequate, see
<https://lists.gnu.org/archive/html/guix-patches/2021-05/msg00113.html>.

* guix/build/emacs-build-system.scm (%install-dir): Adjust comment to better
reflect usage of this variable.
2021-05-05 10:01:48 +02:00
Efraim Flashner
d7653761d3
build-system/copy: Avoid use of 'set!'.
This fixes the copy-build-system on powerpc-linux.

* guix/build/copy-build-system.scm (install)[install]: Don't clobber
'target' variable and move variable assignation into the let statement.
2021-05-04 18:33:20 +03:00
Leo Prikler
79cfe30f3e
build-system: emacs: Use subdirectories again.
With this, Emacs libraries are installed in the ELPA_NAME-VERSION subdirectory
of site-lisp and potential subdirectories should no longer collide.

* guix/build/emacs-build-system.scm (add-source-to-load-path): Rename to...
(expand-load-path): ... this.  Also expand lone subdirectories of site-lisp.
(%standard-phases): Adjust accordingly.
(elpa-directory): New variable.  Export it publicly for use in other build
systems.
(build, patch-el-files, make-autoloads): Use ELPA name and version to
construct subdirectories of %install-dir.
(install): Install in subdirectory.
2021-05-01 15:56:37 +02:00
Timothy Sample
fbc2a52a32
download: Use Disarchive as a last resort.
This is a fixed version of 66b14dccdd0d83c875ce3a8d50ceab8b6f0a3ce2,
which was reverted in e74250c3c535b75dd2225a26df51febb7ed94654.

* guix/download.scm (%disarchive-mirrors): New variable.
(%disarchive-mirror-file): New variable.
(built-in-download): Add 'disarchive-mirrors' keyword argument and
pass its value along to the 'builtin:download' derivation.
(url-fetch): Pass '%disarchive-mirror-file' to 'built-in-download'.
* guix/scripts/perform-download.scm (perform-download): Read
Disarchive mirrors from the environment and pass them to
'url-fetch'.
* guix/build/download.scm (disarchive-fetch/any): New procedure.
(url-fetch): Add 'disarchive-mirrors' keyword argument, use it to
make a list of URIs, and use the new procedure to fetch the file if
all other methods fail.
* build-aux/build-self.scm (build-program)[select?]: Exclude '(guix
build download)'.
* guix/self.scm (compiled-guix)[*core-modules*]: Add 'guile-json' to
the list of extensions.
2021-04-29 11:24:48 -04:00
Timothy Sample
e74250c3c5
Revert "download: Use Disarchive as a last resort."
This reverts commit 66b14dccdd0d83c875ce3a8d50ceab8b6f0a3ce2, which broke
'guix pull'.
2021-04-28 00:24:28 -04:00
Timothy Sample
66b14dccdd
download: Use Disarchive as a last resort.
* guix/download.scm (%disarchive-mirrors): New variable.
(%disarchive-mirror-file): New variable.
(built-in-download): Add 'disarchive-mirrors' keyword argument and
pass its value along to the 'builtin:download' derivation.
(url-fetch): Pass '%disarchive-mirror-file' to 'built-in-download'.
* guix/scripts/perform-download.scm (perform-download): Read
Disarchive mirrors from the environment and pass them to
'url-fetch'.
* guix/build/download.scm (disarchive-fetch/any): New procedure.
(url-fetch): Add 'disarchive-mirrors' keyword argument, use it to
make a list of URIs, and use the new procedure to fetch the file if
all other methods fail.
2021-04-27 21:27:02 -04:00
Brendan Tildesley
a738a663a9
utils: wrap-program: Refuse to wrap .X-real files.
* guix/build/utils.scm (wrap-program): Error if wrap-program was
mistakenly passed a .X-real file. This prevents and forces us to fix
cases where a double wrapped ..X-real-real file is created, such as can
be seen with: "find /gnu/ -iname '.*-real-real'".

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-22 14:04:28 +02:00
Brendan Tildesley
c90a509dd9
qt-build-system: Don't double wrap programs.
* guix/build/qt-build-system.scm (wrap-all-programs): Excluded wrapped
programs from the list of files to wrap if they exist to avoid double
wrapping.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-22 14:04:28 +02:00
Brendan Tildesley
b6753aa1e1
rakudo-build-system: Don't double wrap programs.
* guix/build/rakudo-build-system.scm (wrap): Don't return any potential
already wrapped-programs in the list-of-files to wrap.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-22 14:04:27 +02:00
Brendan Tildesley
ed42b2caba
glib-or-gtk-build-system: Don't double wrap programs.
* guix/build/glib-or-gtk-build-system.scm (wrap-all-programs): If a
package definition was modified to insert an additional wrap phase
before glib-or-gtk...'s wrap phase instead of after, glib-or-gtk...'s
wrap phase will double wrap the .X-real file from the earlier wrap
phase. Filtering out such wrapped programs means these .X-real files
should fix this and mean packagers don't have to worry about ensuring
their wrap phases are put afterwards.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-22 14:04:27 +02:00
Brendan Tildesley
b2b799e2d8
utils: Rename 'wrapper?' to 'wrapped-program?'.
* guix/build/utils.scm (wrap-program): The wrapper? procedure is
incorrectly named as it actually checks to see if prog is the
original program that was moved, not the wrapper.
* guix/build/python-build-system: (wrap): Use renamed wrapped-program?.
* gnu/packages/ebook.scm (calibre)[arguments]: Likewise.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-22 14:04:27 +02:00
Dion Mendel
1010171280
gremlin: 'elf-dynamic-info' returns a file name rathern than a dynamic entry.
* guix/build/gremlin.scm (elf-dynamic-info): Return the dynamic entry
value, not the dynamic entry.
* tests/gremlin.scm ("elf-dynamic-info-soname"): New test.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-22 14:04:27 +02:00
Efraim Flashner
fcc39864db
Merge remote-tracking branch 'origin/master' into core-updates
Conflicts:
	gnu/local.mk
	gnu/packages/boost.scm
	gnu/packages/chez.scm
	gnu/packages/compression.scm
	gnu/packages/crates-io.scm
	gnu/packages/docbook.scm
	gnu/packages/engineering.scm
	gnu/packages/gcc.scm
	gnu/packages/gl.scm
	gnu/packages/gtk.scm
	gnu/packages/nettle.scm
	gnu/packages/python-check.scm
	gnu/packages/python-xyz.scm
	gnu/packages/radio.scm
	gnu/packages/rust.scm
	gnu/packages/sqlite.scm
	guix/build-system/node.scm
2021-04-16 14:39:48 +03:00
Mark H Weaver
1bab9b9f17
grafts: Support rewriting UTF-16 and UTF-32 store references.
Partially fixes <https://bugs.gnu.org/33848>.

* guix/build/graft.scm (replace-store-references): Add support for
finding and rewriting UTF-16 and UTF-32 store references.
* tests/grafts.scm: Add tests.
2021-04-15 03:22:55 -04:00
Maxim Cournoyer
fed28a9632
build-system/qt: Fix wrapping with QTWEBENGINEPROCESS_PATH.
This is a follow up commit to 06eb21856f, which added QTWEBENGINEPROCESS_PATH
to the list of wrapped variables.  Unfortunately it wouldn't be set, as its
value is a plain file rather than a directory, and the code only checked for
directories.

* guix/build/qt-build-system.scm (variables-for-wrapping): Define a file type
entry for each variable definition, and use it to determine if we should look
for directories versus plain files.
2021-04-10 00:55:18 -04:00
Ludovic Courtès
4863c4304e
build-system/gnu: Give #:bootstrap-scripts a valid default.
Commit 9cfc93be30c516fd6fa32915c61c06e03f23a011 changed the default
value of #:bootstrap-scripts to #f, which is invalid (it must be a list
of strings).  That default value was used by build systems that inherit
phases from 'gnu-build-system', such as 'qt-build-system', which would
lead to wrong-type-arg errors in the 'boostrap' phase.

Reported by Raghav Gururajan <rg@raghavgururajan.name>.

* guix/build/gnu-build-system.scm (%bootstrap-scripts): New variable.
(bootstrap): Change #:bootstrap-scripts to default to it.
* guix/build-system/gnu.scm (%bootstrap-scripts): Change value.
(gnu-build): #:bootstrap-scripts defaults to %bootstrap-scripts.  Remove
call to 'sexp->gexp'.
(gnu-cross-build): Likewise.
2021-04-09 14:19:34 +02:00
Ludovic Courtès
06eb21856f
build-system/qt: Wrappers set 'QTWEBENGINEPROCESS_PATH' if needed.
Suggested by Maxim Cournoyer <maxim.cournoyer@gmail.com>.

* guix/build/qt-build-system.scm (variables-for-wrapping): Add
"QTWEBENGINEPROCESS_PATH".
2021-04-08 23:27:55 +02:00
Ludovic Courtès
c5fd1b0bd3
build-system/qt: Wrappers only include relevant directories to XDG_DATA_DIRS.
Fixes <https://bugs.gnu.org/47569>.

Previously the wrapper's XDG_DATA_DIRS would contain any input that had
a /share sub-directory, which is usually all build-time inputs.

* guix/build/qt-build-system.scm (variables-for-wrapping)[collect-sub-dirs]:
Add 'selectors' parameter and honor it.  Change caller to handle
selectors.  Add selectors for /share.
2021-04-08 23:27:41 +02:00
Jelle Licht
23ea84cdf0
build-system: Rewrite node build system.
* guix/build/node-build-system.scm: Rewrite it.
* guix/build-system/node.scm: Adjust accordingly.
* gnu/packages/node-xyz.scm (node-semver): Likewise.

Co-authored-by: Timothy Sample <samplet@ngyro.com>
2021-04-02 18:04:22 +02:00
zimoun
9f7b599037
build-system/julia: Turn on deprecation warnings.
* guix/build/julia-build-system.scm (check): Set option '--depwarn=yes'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-03-29 16:47:18 +02:00
Efraim Flashner
2aab587f84
Merge remote-tracking branch 'origin/master' into core-updates 2021-03-24 20:50:44 +02:00
Chris Marusich
c29bfbfc78
syscalls: Fix RNDADDTOENTCNT on powerpc64le-linux.
This fixes the failing test add-to-entropy-count in tests/syscalls.scm on
powerpc64le-linux.

* guix/build/syscalls.scm (RNDADDTOENTCNT): When %host-type starts with
"powerpc64le", set this to #x80045201.  Otherwise, set it to #x40045201 as
before.
2021-03-23 23:19:58 -07:00
Chris Marusich
b57de27d03
syscalls: Fix clone on powerpc64le-linux.
This makes the clone procedure work correctly and fixes some test failures on
powerpc64le-linux, including tests/containers.scm.

* guix/build/syscalls.scm (clone): Add an entry for ppc64le.
2021-03-23 23:19:57 -07:00
Ludovic Courtès
43937666ba
download: 'tls-wrap' treats premature TLS termination as EOF.
This is a backport of Guile commit
076276c4f580368b4106316a77752d69c8f1494a.

* guix/build/download.scm (tls-wrap)[read!]: Wrap 'get-bytevector-n!'
call in 'catch' and handle 'error/premature-termination' GnuTLS errors.
2021-03-19 21:44:36 +01:00
Chris Marusich
341dfe7eda
syscalls: mounts: Fix a matching bug.
On some systems, the columns in /proc/self/mountinfo look like this:

23 28 0:21 / /proc rw,nosuid,nodev,noexec,relatime shared:11 - proc proc rw

Before this change, the mounts procedure was written with the assumption that
the type and source could always be found in columns 8 and 9, respectively.
However, the proc(5) man page explains that there can be zero or more optional
fields starting at column 7 (e.g., "shared:11" above), so this assumption is
false in some situations.

* guix/build/syscalls.scm (mounts): Update the match pattern to use ellipsis
to match zero or more optional fields followed by a single hyphen.  Remove the
trailing ellipsis, since multiple ellipses are not allowed in the same level.
The proc(5) man page indicates that there are no additional columns, so it is
probably OK to match an exact number of columns at the end like this.
2021-03-15 21:22:43 -07:00
Efraim Flashner
78e7e178a3
build-system/cargo: Don't clobber packaged crates while building.
This fixes an issue where two packages share a common dependent.

* guix/build/cargo-build-system.scm (unpack-rust-crates): Only copy rust
crates into the target directory if there isn't one already there with
the same name.
2021-03-15 15:53:11 +02:00
Efraim Flashner
4d00185d66
build-system/cargo: Propagate crates across builds.
* guix/build-system/cargo.scm (cargo-build): Add cargo-package-flags,
install-source flags.
* guix/build/cargo-build-system.scm (unpack-rust-crates, package): New
procedures.
(install): Also install crate sources.
(%standard-phases): Add new phases.
* doc/guix.texi (Packaging-guidelines)[Rust Crates]: Adjust to changes
in the cargo-build-system.
2021-03-14 19:52:44 +02:00
Ludovic Courtès
b168acae2a
download: 'tls-wrap' returns an unbuffered custom port.
Partly fixes <https://bugs.gnu.org/46967>.

* guix/build/download.scm (tls-wrap)[unbuffered]: New procedure.
Pass the result of 'make-custom-binary-input/output-port' to
'unbuffered'.
2021-03-11 23:19:52 +01:00
Ludovic Courtès
279d932b1c
download: 'tls-wrap' avoids intermediate buffer.
* guix/build/download.scm (tls-wrap)[read!]: Read straight into BV
instead of calling 'get-bytevector-some' and 'unget-bytevector'.
2021-03-11 23:19:52 +01:00
Ludovic Courtès
9a6ea2f8dc
syscalls: Define the ST_* constants and add 'statfs-flags->mount-flags'.
* guix/build/syscalls.scm (linux?): New variable.
(define-statfs-flags): New macro.
(ST_RDONLY, ST_NOSUID, ST_NODEV, ST_NOEXEC, ST_SYNCHRONOUS)
(ST_MANDLOCK, ST_WRITE, ST_APPEND, ST_IMMUTABLE, ST_NOATIME)
(ST_NODIRATIME, ST_RELATIME): New variables.
(statfs-flags->mount-flags): New procedure.
2021-03-10 23:21:33 +01:00
Christopher Baines
a8448da0f4
Merge branch 'master' into core-updates 2021-03-06 00:18:30 +00:00
Ludovic Courtès
7e9d9f28e9
syscalls: Add 'mounts' and the <mount> record type.
* guix/build/syscalls.scm (<mount>): New record type.
(option-string->mount-flags, mount-flags)
(octal-decode, mounts): New procedures.
(mount-points): Rewrite in terms of 'mount'.
* tests/syscalls.scm ("mounts"): New test.
2021-02-25 11:29:35 +01:00
Ludovic Courtès
46bb1a41ae
syscalls: Define MS_RELATIME.
* guix/build/syscalls.scm (MS_RELATIME): New variable.
2021-02-25 11:29:35 +01:00
Leo Prikler
a1fd8f01b2
guix: renpy-build-system: Quote data directory.
This prevents generated launchers and desktop files from inadvertently
crashing if the directory name contains a space.

* gnu/build/renpy-build-system.scm (install, install-desktop-file): Use ~s
to format data directory.
2021-02-24 00:37:37 +01:00
Ludovic Courtès
e8fc373900
profiles: Fix typo in manifest comment.
* guix/build/profiles.scm (build-profile): Fix typo.
2021-02-22 23:42:08 +01:00
Danny Milosavljevic
abd318ff4b
Merge branch 'master' into core-updates 2021-02-11 19:12:36 +01:00
Leo Prikler
e1bdab4f0f
build-system: Add renpy-build-system.
* guix/build/renpy-build-system.scm: New file.
* guix/build-system/renpy.scm: New file.
* Makefile.am (MODULES): Add them here.
* doc/guix.texi (Build Systems): Document renpy-build-system.
2021-02-07 15:17:55 +01:00
Maxim Cournoyer
39e67ed697
build/gnu: Only make source checkout files writable.
This is a followup commit to 6129ebddbd.

It was suggested by Ludovic in #guix that it's probably safer to leave files
extracted from a tarball alone.  While at it, guard against possible
exceptions that can happen in the presence of dangling symbolic links, for
example.

* guix/build/gnu-build-system.scm (unpack): Wrap the make-file-writable call
in a false-if-exception handler.  Move the for-each loop under the
file-is-directory? cond branch.
2021-02-04 16:42:46 -05:00