GNU bug report logs - #70829
[PATCH] guix: gexp: Add assume-source-relative-file-name

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Richard Sent <richard@HIDDEN>; Keywords: patch; dated Wed, 8 May 2024 12:19:01 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at 70829 <at> debbugs.gnu.org:


Received: (at 70829) by debbugs.gnu.org; 8 May 2024 18:34:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 08 14:34:58 2024
Received: from localhost ([127.0.0.1]:50203 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s4m82-0007DC-02
	for submit <at> debbugs.gnu.org; Wed, 08 May 2024 14:34:58 -0400
Received: from mail-108-mta163.mxroute.com ([136.175.108.163]:36859)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <richard@HIDDEN>) id 1s4m7z-0007D6-Bm
 for 70829 <at> debbugs.gnu.org; Wed, 08 May 2024 14:34:56 -0400
Received: from filter006.mxroute.com ([136.175.111.2] filter006.mxroute.com)
 (Authenticated sender: mN4UYu2MZsgR)
 by mail-108-mta163.mxroute.com (ZoneMTA) with ESMTPSA id
 18f597c3b120008ca2.001 for <70829 <at> debbugs.gnu.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 08 May 2024 18:34:24 +0000
X-Zone-Loop: f171d798167e38549921c283ece4aeda0178129c29ff
X-Originating-IP: [136.175.111.2]
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
 d=freakingpenguin.com; s=x; h=Content-Transfer-Encoding:MIME-Version:
 References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:
 Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From:
 Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:
 List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive;
 bh=7k94FEsj0CXh+Ie+kUgRyejF/HnqZnGu1HS2+wB8DFs=; b=Z/CWiVUaFrMr0zzZqQPEoqS94O
 d6auQWNle6/uhAdjIfZgn2QJUCj7Y2lRzLp3l4iOqGc+3A86BdFRBxJgTyQPcClgAyYE+xnjPCU1p
 BwDxQPdTxogBba/q9pc+2Jp2tKqw8NEoUlAPPndGPub40cVT7ZSjmjvzq4hwqhhb86gDKV7cHsl0W
 FUP6vteR5BAXLzyyN0u9P/WkgyPhKaii5Zwa8CSy8ZgCOh8L7v6TudZ8zQ0ZJ53ImBLgIl5udZMnd
 cUYPTFsEgbGXprLJRwQK0Pj8CpjeVcIFLF+EXgsTvAqfFl/eR/Q2l/0ntO6oBkGC7hFkRfXtnOKcP
 tixJB63A==;
From: Richard Sent <richard@HIDDEN>
To: 70829 <at> debbugs.gnu.org
Subject: [PATCH v2 2/2] guix: gexp: Add assume-source-relative-file-name
Date: Wed,  8 May 2024 14:32:47 -0400
Message-ID: <822a1c5009d33b5e994fac9e21f087cbb3255972.1715193167.git.richard@HIDDEN>
In-Reply-To: <23ca145e6087ea18559fdd71d0c92db572abc8a3.1715193167.git.richard@HIDDEN>
References: <23ca145e6087ea18559fdd71d0c92db572abc8a3.1715193167.git.richard@HIDDEN>
MIME-Version: 1.0
X-Debbugs-Cc: Christopher Baines <guix@HIDDEN>, Florian Pelz <pelzflorian@HIDDEN>, Josselin Poiret <dev@HIDDEN>, Ludovic Courtès <ludo@HIDDEN>, Mathieu Othacehe <othacehe@HIDDEN>, Ricardo Wurmus <rekado@HIDDEN>, Simon Tournier <zimon.toutoune@HIDDEN>, Tobias Geerinckx-Rice <me@HIDDEN>
Content-Transfer-Encoding: 8bit
X-Authenticated-Id: richard@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70829
Cc: Richard Sent <richard@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

guix/gexp.scm (assume-source-relative-file-name): Create syntax rule
(local-file): Use assume-source-relative-file-name to look up a non-literal
file relative to the current source directory.
doc/guix.texi (G-expressions): Document it.
tests: gexp.scm: Test it.
---
 doc/guix.texi  |  5 +++++
 guix/gexp.scm  | 15 ++++++++++++++-
 tests/gexp.scm |  6 ++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 221db5c022..1fc7be7cd8 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12166,6 +12166,11 @@ G-Expressions
 (local-file (assume-valid-file-name alice-key-file-path))
 @end lisp
 
+@var{file} can be wrapped in the @code{assume-source-relative-file-name}
+syntactic keyword.  When this is done, the file name will be looked up
+relative to the source file where it appears even when it is not a
+string literal.
+
 This is the declarative counterpart of the @code{interned-file} monadic
 procedure (@pxref{The Store Monad, @code{interned-file}}).
 @end deffn
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 74b4c49f90..871e59cfdc 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -52,6 +52,7 @@ (define-module (guix gexp)
             gexp-input-native?
 
             assume-valid-file-name
+            assume-source-relative-file-name
             local-file
             local-file?
             local-file-file
@@ -485,6 +486,12 @@ (define-syntax-rule (assume-valid-file-name file)
 warn about it."
   file)
 
+(define-syntax-rule (assume-source-relative-file-name file)
+  "This is a syntactic keyword to tell 'local-file' that it can assume that
+the given file is relative to the source directory, even if it's not a string
+literal."
+  file)
+
 (define-syntax local-file
   (lambda (s)
     "Return an object representing local file FILE to add to the store; this
@@ -503,13 +510,19 @@ (define-syntax local-file
 This is the declarative counterpart of the 'interned-file' monadic procedure.
 It is implemented as a macro to capture the current source directory where it
 appears."
-    (syntax-case s (assume-valid-file-name)
+    (syntax-case s (assume-valid-file-name assume-source-relative-file-name)
       ((_ file rest ...)
        (string? (syntax->datum #'file))
        ;; FILE is a literal, so resolve it relative to the source directory.
        #'(%local-file file
                       (delay (absolute-file-name file (current-source-directory)))
                       rest ...))
+      ((_ (assume-source-relative-file-name file) rest ...)
+       ;; FILE is not a literal, but the user requested we look it up
+       ;; relative to the current source directory.
+       #'(%local-file file
+                      (delay (absolute-file-name file (current-source-directory)))
+                      rest ...))
       ((_ (assume-valid-file-name file) rest ...)
        ;; FILE is not a literal, so resolve it relative to the current
        ;; directory.  Since the user declared FILE is valid, do not pass
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 905009caee..8774097bd0 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -244,6 +244,12 @@ (define %extension-package
       (let ((file (local-file (string-copy "../base32.scm"))))
         (local-file-absolute-file-name file)))))
 
+(test-equal "local-file, non-literal source relative file name"
+  (current-filename)
+  (let ((file (local-file (assume-source-relative-file-name
+                           (string-append "gexp" ".scm")))))
+    (local-file-absolute-file-name file)))
+
 (test-assert "local-file, relative file name, within gexp"
   (let* ((file     (search-path %load-path "guix/base32.scm"))
          (interned (add-to-store %store "base32.scm" #f "sha256" file)))
-- 
2.41.0





Information forwarded to guix@HIDDEN, pelzflorian@HIDDEN, dev@HIDDEN, ludo@HIDDEN, othacehe@HIDDEN, rekado@HIDDEN, zimon.toutoune@HIDDEN, me@HIDDEN, guix-patches@HIDDEN:
bug#70829; Package guix-patches. Full text available.

Message received at 70829 <at> debbugs.gnu.org:


Received: (at 70829) by debbugs.gnu.org; 8 May 2024 18:34:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 08 14:34:53 2024
Received: from localhost ([127.0.0.1]:50200 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s4m7w-0007Cz-Jg
	for submit <at> debbugs.gnu.org; Wed, 08 May 2024 14:34:52 -0400
Received: from mail-108-mta133.mxroute.com ([136.175.108.133]:44309)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <richard@HIDDEN>) id 1s4m7u-0007Ct-7y
 for 70829 <at> debbugs.gnu.org; Wed, 08 May 2024 14:34:51 -0400
Received: from filter006.mxroute.com ([136.175.111.2] filter006.mxroute.com)
 (Authenticated sender: mN4UYu2MZsgR)
 by mail-108-mta133.mxroute.com (ZoneMTA) with ESMTPSA id
 18f597c2efd0008ca2.001 for <70829 <at> debbugs.gnu.org>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 08 May 2024 18:34:21 +0000
X-Zone-Loop: 2f01149c2e27682e8851b09fc15998b3fa99407a80c4
X-Originating-IP: [136.175.111.2]
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
 d=freakingpenguin.com; s=x; h=Content-Transfer-Encoding:MIME-Version:
 Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:
 Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
 :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:
 List-Subscribe:List-Post:List-Owner:List-Archive;
 bh=5EpOFjh9Kf5sg43uVarK9Xk/XGf8vhABgrttwJpMsW0=; b=T/7slP/5obo2b9l1zK3p6qzyPp
 L+b7l1cG7kSm8o9M6xTlINCEpddp726zwTF2ZUqXTtWTA22E7YMf35zT9pYlZsZAiWdve2U7MtM64
 gOfWbWaEkwBzzJWl7vz5x9jIfqjQgJs6plffru2ozx6mzn58VSCPBA+LhMRT0hK4K8cQMPkggU19D
 IEFIRvVYZemEPFaHSRcw5RvzApEE+Ho2PD+TV7/yg+/8k3vwYvEsmBYQ5l6RErLFZYDxuA7lO4JBL
 5TQQ0oKPJgN3U7t6256PvmHv3rTpcC0whUj02wVlfB8UmwBVxV66bHgHPODKOag8HDl5O4vCug2yG
 2/MS0Now==;
From: Richard Sent <richard@HIDDEN>
To: 70829 <at> debbugs.gnu.org
Subject: [PATCH v2 1/2] doc: Document assume-valid-file-name in local-file
Date: Wed,  8 May 2024 14:32:46 -0400
Message-ID: <23ca145e6087ea18559fdd71d0c92db572abc8a3.1715193167.git.richard@HIDDEN>
MIME-Version: 1.0
X-Debbugs-Cc: Florian Pelz <pelzflorian@HIDDEN>, Ludovic Courtès <ludo@HIDDEN>
Content-Transfer-Encoding: 8bit
X-Authenticated-Id: richard@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70829
Cc: Richard Sent <richard@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

doc/guix.texi (G-Expressions): Document the use of assume-valid-file-name with
local-file.
---

Missed a commit that my original revision depended on. I initially
submitted that previous commit to https://qa.guix.gnu.org/issue/70830,
but since both commits change the same guix.texi section on similar
subject matter, I'm resubmitting as a series.

 doc/guix.texi | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 1c1e0164e7..221db5c022 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12154,6 +12154,18 @@ G-Expressions
 absolute file name and @var{stat} is the result of @code{lstat}; exclude
 entries for which @var{select?} does not return true.
 
+@var{file} can be wrapped in the @code{assume-valid-file-name} syntactic
+keyword. When this is done, there will not be a warning when
+@code{local-file} is used with a non-literal path.  The path is still
+looked up relative to the current working directory at run time.
+Wrapping is done like this:
+
+@lisp
+(define alice-key-file-path "alice.pub")
+;; ...
+(local-file (assume-valid-file-name alice-key-file-path))
+@end lisp
+
 This is the declarative counterpart of the @code{interned-file} monadic
 procedure (@pxref{The Store Monad, @code{interned-file}}).
 @end deffn

base-commit: 7b7f299bb493e485c5534b8c554e51d4f3a8c026
-- 
2.41.0





Information forwarded to pelzflorian@HIDDEN, ludo@HIDDEN, guix-patches@HIDDEN:
bug#70829; Package guix-patches. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 8 May 2024 12:18:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 08 08:18:43 2024
Received: from localhost ([127.0.0.1]:48579 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s4gFu-0002o1-JJ
	for submit <at> debbugs.gnu.org; Wed, 08 May 2024 08:18:43 -0400
Received: from lists.gnu.org ([2001:470:142::17]:46438)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <richard@HIDDEN>) id 1s4gFr-0002nj-SC
 for submit <at> debbugs.gnu.org; Wed, 08 May 2024 08:18:41 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <richard@HIDDEN>)
 id 1s4gFJ-00023P-R5
 for guix-patches@HIDDEN; Wed, 08 May 2024 08:18:06 -0400
Received: from mail-108-mta241.mxroute.com ([136.175.108.241])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <richard@HIDDEN>)
 id 1s4gF0-0006Tz-Hz
 for guix-patches@HIDDEN; Wed, 08 May 2024 08:18:05 -0400
Received: from filter006.mxroute.com ([136.175.111.2] filter006.mxroute.com)
 (Authenticated sender: mN4UYu2MZsgR)
 by mail-108-mta241.mxroute.com (ZoneMTA) with ESMTPSA id
 18f58234b090008ca2.001 for <guix-patches@HIDDEN>
 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384);
 Wed, 08 May 2024 12:17:39 +0000
X-Zone-Loop: f24c586c5477e6a6c9d25b18f3c773576a89945ed7f4
X-Originating-IP: [136.175.111.2]
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
 d=freakingpenguin.com; s=x; h=Content-Transfer-Encoding:MIME-Version:
 Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:
 Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
 :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:
 List-Subscribe:List-Post:List-Owner:List-Archive;
 bh=A/b04iMHYk5hzXF3qnMQmQb2OAak6jwSM9cnhQ7+6hw=; b=Ci0kNQcollpJkw4wy+BuURBmhq
 9GhEargLzWZ+VHpd25Yv6KThtmU+zwDiMe/RdjLGF8QTMFK6+b7bY5tEm5retS7XV8Af4hTJCjl+A
 CD0HGgFXWy7nJxoCxvuZzetbkSQiSMBdF88J4hj/S3FF1VL6vZXqScUeB7p+F58MjWKFeZMxXVYdV
 PfziwgI2T3P/o9bGGgTiZg90kLoWd5++Br5o1Sbl3GgCR9NoV0j4MRSrjIK+pcLQXtuBYWKvQOLm4
 zs9HRDVgDvt8bmOWAhbDukwD5HgiWSsrSzlXsNcOmHX04LyOOBbexlDGGtUjNNnP6GtpFBQ+KVtGX
 Mlqb5XUA==;
From: Richard Sent <richard@HIDDEN>
To: guix-patches@HIDDEN
Subject: [PATCH] guix: gexp: Add assume-source-relative-file-name
Date: Wed,  8 May 2024 08:15:17 -0400
Message-ID: <c4afb74adfc96591f9723c91eecf6a4c6330da28.1715170517.git.richard@HIDDEN>
MIME-Version: 1.0
X-Debbugs-Cc: Christopher Baines <guix@HIDDEN>, Florian Pelz <pelzflorian@HIDDEN>, Josselin Poiret <dev@HIDDEN>, Ludovic Courtès <ludo@HIDDEN>, Mathieu Othacehe <othacehe@HIDDEN>, Ricardo Wurmus <rekado@HIDDEN>, Simon Tournier <zimon.toutoune@HIDDEN>, Tobias Geerinckx-Rice <me@HIDDEN>
Content-Transfer-Encoding: 8bit
X-Authenticated-Id: richard@HIDDEN
Received-SPF: pass client-ip=136.175.108.241;
 envelope-from=richard@HIDDEN; helo=mail-108-mta241.mxroute.com
X-Spam_score_int: -16
X-Spam_score: -1.7
X-Spam_bar: -
X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1,
 DKIM_SIGNED=0.1, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
Cc: Richard Sent <richard@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

guix/gexp.scm (assume-source-relative-file-name): Create syntax rule
(local-file): Use assume-source-relative-file-name to look up a non-literal
file relative to the current source directory.
doc/guix.texi (G-expressions): Document it.
tests: gexp.scm: Test it.
---
Hi Guix!

In the current local file setup is it is impossible to use
(local-file) with a non-literal source-relative file name. With this
patch, it is possible.

 doc/guix.texi  |  5 +++++
 guix/gexp.scm  | 15 ++++++++++++++-
 tests/gexp.scm |  6 ++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 221db5c022..1fc7be7cd8 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12166,6 +12166,11 @@ G-Expressions
 (local-file (assume-valid-file-name alice-key-file-path))
 @end lisp
 
+@var{file} can be wrapped in the @code{assume-source-relative-file-name}
+syntactic keyword.  When this is done, the file name will be looked up
+relative to the source file where it appears even when it is not a
+string literal.
+
 This is the declarative counterpart of the @code{interned-file} monadic
 procedure (@pxref{The Store Monad, @code{interned-file}}).
 @end deffn
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 74b4c49f90..871e59cfdc 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -52,6 +52,7 @@ (define-module (guix gexp)
             gexp-input-native?
 
             assume-valid-file-name
+            assume-source-relative-file-name
             local-file
             local-file?
             local-file-file
@@ -485,6 +486,12 @@ (define-syntax-rule (assume-valid-file-name file)
 warn about it."
   file)
 
+(define-syntax-rule (assume-source-relative-file-name file)
+  "This is a syntactic keyword to tell 'local-file' that it can assume that
+the given file is relative to the source directory, even if it's not a string
+literal."
+  file)
+
 (define-syntax local-file
   (lambda (s)
     "Return an object representing local file FILE to add to the store; this
@@ -503,13 +510,19 @@ (define-syntax local-file
 This is the declarative counterpart of the 'interned-file' monadic procedure.
 It is implemented as a macro to capture the current source directory where it
 appears."
-    (syntax-case s (assume-valid-file-name)
+    (syntax-case s (assume-valid-file-name assume-source-relative-file-name)
       ((_ file rest ...)
        (string? (syntax->datum #'file))
        ;; FILE is a literal, so resolve it relative to the source directory.
        #'(%local-file file
                       (delay (absolute-file-name file (current-source-directory)))
                       rest ...))
+      ((_ (assume-source-relative-file-name file) rest ...)
+       ;; FILE is not a literal, but the user requested we look it up
+       ;; relative to the current source directory.
+       #'(%local-file file
+                      (delay (absolute-file-name file (current-source-directory)))
+                      rest ...))
       ((_ (assume-valid-file-name file) rest ...)
        ;; FILE is not a literal, so resolve it relative to the current
        ;; directory.  Since the user declared FILE is valid, do not pass
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 905009caee..8774097bd0 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -244,6 +244,12 @@ (define %extension-package
       (let ((file (local-file (string-copy "../base32.scm"))))
         (local-file-absolute-file-name file)))))
 
+(test-equal "local-file, non-literal source relative file name"
+  (current-filename)
+  (let ((file (local-file (assume-source-relative-file-name
+                           (string-append "gexp" ".scm")))))
+    (local-file-absolute-file-name file)))
+
 (test-assert "local-file, relative file name, within gexp"
   (let* ((file     (search-path %load-path "guix/base32.scm"))
          (interned (add-to-store %store "base32.scm" #f "sha256" file)))

base-commit: da41a8f5e85774e2a507d821b5d52e600fb9d1d7
prerequisite-patch-id: 5c8bedc278ab541b86ee4af63042a5893109639e
-- 
2.41.0





Acknowledgement sent to Richard Sent <richard@HIDDEN>:
New bug report received and forwarded. Copy sent to guix@HIDDEN, pelzflorian@HIDDEN, dev@HIDDEN, ludo@HIDDEN, othacehe@HIDDEN, rekado@HIDDEN, zimon.toutoune@HIDDEN, me@HIDDEN, guix-patches@HIDDEN. Full text available.
Report forwarded to guix@HIDDEN, pelzflorian@HIDDEN, dev@HIDDEN, ludo@HIDDEN, othacehe@HIDDEN, rekado@HIDDEN, zimon.toutoune@HIDDEN, me@HIDDEN, guix-patches@HIDDEN:
bug#70829; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Wed, 8 May 2024 18:45:01 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.