Subject: [PATCH] Add a recursive version of mkdir-p
From: divoplade <[email-masked]>
To: [email-masked]
Date: Thu, 22 Oct 2020 01:29:48 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Dear guix,

I need this mkdir-p function in any non-trivial program I write. I had
3 bad choices:

1. Lobby guile to provide this function out of the box (this will take
time);
2. Copy that of guix, or gash, or any other: this does not seem
acceptable to me, because this function will surely evolve (for
instance, if guile gets suport for mingw and we start running guile
programs on windows) and I don't want to update more than one version
of this function;
3. Depend on guix, gash or another package: this would be too large a
dependency for my programs.

So I wrote it in its own package and I intend to depend on it for my
other projects. It would be best if you could accept this package in
guix proper.

What do you think?

Best regards,

divoplade
From 1a1798a99b09ef7df0f183d99ea9a4717b9406d7 Mon Sep 17 00:00:00 2001
From: divoplade <[email-masked]>
Date: Thu, 22 Oct 2020 01:14:27 +0200
Subject: [PATCH] Add guile-mkdir-p

As there is no guile function to create directories recursively, a lot of
packages bundle their own. For instance, Guile as Shell or Guix. This also
happens to me, as I need this function in any substantial program.
---
 gnu/packages/guile-xyz.scm | 39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 88c0586dc9..2504deb3af 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -4007,3 +4007,42 @@ features not found in the standard read procedure such as a compatible mode
 with support for other RnRS standards and a tolerant mode that continues on
 errors.")
     (license license:expat)))
+
+(define-public guile-mkdir-p
+  (package
+    (name "guile-mkdir-p")
+    (version "1.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://code.divoplade.fr/mkdir-p.git")
+             (commit "83e955ba612369336a69fe50fe023ad14fbe5d7c")))
+       (sha256 (base32 "01k20rjcv6p0spmw8ls776aar6bfw0jxw46d2n12w0cb2p79xjv8"))
+       (snippet
+        `(begin
+           (with-output-to-file ".tarball-version"
+             (lambda _ (format #t "~a~%" "1.0.1")))
+           #t))))
+    (build-system gnu-build-system)
+    (arguments `())
+    (native-inputs
+     `(("guile" ,guile-3.0)
+       ("texinfo" ,texinfo)
+       ("autoconf" ,autoconf)
+       ("autoconf-archive" ,autoconf-archive)
+       ("automake" ,automake)
+       ("pkg-config" ,pkg-config)
+       ("gettext" ,gnu-gettext)))
+    (inputs `(("guile" ,guile-3.0)))
+    (propagated-inputs
+     `(("guile" ,guile-3.0)))
+    (synopsis "Implementation of a recursive mkdir for guile")
+    (description
+     "This package provides within the (mkdir-p) module the mkdir-p function
+that tries to create the chain of directories recursively.  It also provides
+new versions of open-output-file, call-with-output-file and
+with-output-to-file to create the directory of its argument if it does not
+exist.")
+    (home-page "https://mkdir-p.divoplade.fr")
+    (license license:asl2.0)))
-- 
2.28.0