* [bug#41428] [PATCH 0/5] Wrappers for c compilers
@ 2020-05-21 0:51 Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
2020-05-22 9:42 ` [bug#41428] [PATCH 0/5] Wrappers for c compilers Ludovic Courtès
0 siblings, 2 replies; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-21 0:51 UTC (permalink / raw)
To: 41428
As an end-user, I want to create a manifest that to hack on some code where
the upstream build system badly wants to use `cc' and provides no practical
way to avoid this. At present, I have to create symlinks myself or patch the
build system; either way is non-obvious to other people who might try and use
my manifest when I share it.
With this patch in Guix I can just specify `gcc-toolchain-wrapper' in my
manifest and have that be the end of it. For consistency's sake I have applied
this to all other c compilers I could find in Guix as well.
Ryan Prior (5):
gnu: Add tcc-wrapper.
gnu: Add pcc-wrapper.
gnu: Add gcc-toolchain-wrapper.
gnu: Add sdcc-wrapper.
gnu: Add bcc-wrapper.
gnu/packages/assembly.scm | 3 +++
gnu/packages/c.scm | 32 ++++++++++++++++++++++++++++++++
gnu/packages/commencement.scm | 3 +++
gnu/packages/sdcc.scm | 3 +++
4 files changed, 41 insertions(+)
--
2.26.2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper.
2020-05-21 0:51 [bug#41428] [PATCH 0/5] Wrappers for c compilers Ryan Prior via Guix-patches via
@ 2020-05-21 0:57 ` Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 2/5] gnu: Add pcc-wrapper Ryan Prior via Guix-patches via
` (3 more replies)
2020-05-22 9:42 ` [bug#41428] [PATCH 0/5] Wrappers for c compilers Ludovic Courtès
1 sibling, 4 replies; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-21 0:57 UTC (permalink / raw)
To: 41428
* gnu/packages/c.scm (tcc-wrapper): New variable.
* gnu/packages/c.scm (wrap-cc): New variable.
---
gnu/packages/c.scm | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 5718ec66ac..757cfa7fba 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -288,3 +289,33 @@ address space pointers point to, or what locks a function acquires or
releases.")
(home-page "https://sparse.wiki.kernel.org/index.php/Main_Page")
(license license:expat)))
+
+(define-public wrap-cc
+ (lambda* (cc #:optional
+ (bin (package-name cc))
+ (name (string-append (package-name cc) "-wrapper")))
+ (package/inherit cc
+ (name name)
+ (source #f)
+ (build-system trivial-build-system)
+ (outputs '("out"))
+ (native-inputs '())
+ (inputs '())
+ (propagated-inputs `(("cc" ,cc)))
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let ((bin-dir (string-append (assoc-ref %build-inputs "cc") "/bin/"))
+ (wrapper-dir (string-append (assoc-ref %outputs "out") "/bin/")))
+ (mkdir-p wrapper-dir)
+ (symlink (string-append bin-dir ,bin)
+ (string-append wrapper-dir "cc"))))))
+ (synopsis (string-append "Wrapper for " bin))
+ (description
+ (string-append
+ "Wraps " (package-name cc) " such that @command{" bin "} can be invoked
+under the name @command{cc}.")))))
+
+(define-public tcc-wrapper (wrap-cc tcc))
--
2.26.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 2/5] gnu: Add pcc-wrapper.
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
@ 2020-05-21 0:57 ` Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 3/5] gnu: Add gcc-toolchain-wrapper Ryan Prior via Guix-patches via
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-21 0:57 UTC (permalink / raw)
To: 41428
* gnu/packages/c.scm (pcc-wrapper): New variable.
---
gnu/packages/c.scm | 1 +
1 file changed, 1 insertion(+)
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 757cfa7fba..e83a1d5c61 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -319,3 +319,4 @@ releases.")
under the name @command{cc}.")))))
(define-public tcc-wrapper (wrap-cc tcc))
+(define-public pcc-wrapper (wrap-cc pcc))
--
2.26.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 3/5] gnu: Add gcc-toolchain-wrapper.
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 2/5] gnu: Add pcc-wrapper Ryan Prior via Guix-patches via
@ 2020-05-21 0:57 ` Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 4/5] gnu: Add sdcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 5/5] gnu: Add bcc-wrapper Ryan Prior via Guix-patches via
3 siblings, 0 replies; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-21 0:57 UTC (permalink / raw)
To: 41428
* gnu/packages/commencement.scm (gcc-toolchain-wrapper): New variable.
---
gnu/packages/commencement.scm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 59ef5d078b..e6ef3c301c 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -3870,6 +3870,9 @@ binaries, plus debugging symbols in the @code{debug} output), and Binutils.")
(define-public gcc-toolchain
(make-gcc-toolchain gcc-final))
+(define-public gcc-toolchain-wrapper
+ (wrap-cc gcc-toolchain "gcc"))
+
(define-public gcc-toolchain-4.8
(make-gcc-toolchain gcc-4.8))
--
2.26.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 4/5] gnu: Add sdcc-wrapper.
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 2/5] gnu: Add pcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 3/5] gnu: Add gcc-toolchain-wrapper Ryan Prior via Guix-patches via
@ 2020-05-21 0:57 ` Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 5/5] gnu: Add bcc-wrapper Ryan Prior via Guix-patches via
3 siblings, 0 replies; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-21 0:57 UTC (permalink / raw)
To: 41428
* gnu/packages/sdcc.scm (sdcc-wrapper): New variable.
---
gnu/packages/sdcc.scm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/gnu/packages/sdcc.scm b/gnu/packages/sdcc.scm
index 6d05470101..a95ef2ac0f 100644
--- a/gnu/packages/sdcc.scm
+++ b/gnu/packages/sdcc.scm
@@ -20,6 +20,7 @@
(define-module (gnu packages sdcc)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages c)
#:use-module (gnu packages flex)
#:use-module (gnu packages python)
#:use-module (gnu packages texinfo)
@@ -68,3 +69,5 @@ HC08-based (hc08, s08), Zilog Z80-based MCUs (z80, z180, gbz80, Rabbit
Work is in progress on supporting the Microchip PIC16 and PIC18 targets.
It can be retargeted for other microprocessors.")
(license license:gpl2+)))
+
+(define-public sdcc-wrapper (wrap-cc sdcc))
--
2.26.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 5/5] gnu: Add bcc-wrapper.
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
` (2 preceding siblings ...)
2020-05-21 0:57 ` [bug#41428] [PATCH 4/5] gnu: Add sdcc-wrapper Ryan Prior via Guix-patches via
@ 2020-05-21 0:57 ` Ryan Prior via Guix-patches via
3 siblings, 0 replies; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-21 0:57 UTC (permalink / raw)
To: 41428
* gnu/packages/assembly.scm (bcc-wrapper): New variable.
---
gnu/packages/assembly.scm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index c775603445..a8fe135ded 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -36,6 +36,7 @@
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bison)
+ #:use-module (gnu packages c)
#:use-module (gnu packages compression)
#:use-module (gnu packages flex)
#:use-module (gnu packages gettext)
@@ -223,6 +224,8 @@ assembler, a C compiler and a linker. The assembler uses Intel syntax
(supported-systems '("i686-linux" "x86_64-linux"))
(license license:gpl2+)))
+(define-public bcc-wrapper (wrap-cc dev86 "bcc" "bcc-wrapper"))
+
(define-public libjit
(let ((commit "554c9f5c750daa6e13a6a5cd416873c81c7b8226"))
(package
--
2.26.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 0/5] Wrappers for c compilers
2020-05-21 0:51 [bug#41428] [PATCH 0/5] Wrappers for c compilers Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
@ 2020-05-22 9:42 ` Ludovic Courtès
2020-05-22 18:27 ` Ryan Prior via Guix-patches via
1 sibling, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2020-05-22 9:42 UTC (permalink / raw)
To: Ryan Prior; +Cc: 41428
Hi Ryan,
Ryan Prior <rprior@protonmail.com> skribis:
> As an end-user, I want to create a manifest that to hack on some code where
> the upstream build system badly wants to use `cc' and provides no practical
> way to avoid this. At present, I have to create symlinks myself or patch the
> build system; either way is non-obvious to other people who might try and use
> my manifest when I share it.
>
> With this patch in Guix I can just specify `gcc-toolchain-wrapper' in my
> manifest and have that be the end of it. For consistency's sake I have applied
> this to all other c compilers I could find in Guix as well.
A long time ago, we decided against it, which is not to say that this is
set in stone but at least there’s a discussion to be had. :-)
For packages, the workaround usually boils down to setting shell or
Makefile variable ‘CC’ to “gcc” or similar. As for users, they can have
a shell alias.
In a nutshell, the reasons to not have a ‘cc’ program are that (1) it’s
easily worked around, and (2) our guideline is to follow what upstream
does, and none of these compilers provides a ‘cc’ program. (There are
threads in the mailing list archives discussing this.)
I’m personally in favor of the status quo on this topic.
Thoughts?
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 0/5] Wrappers for c compilers
2020-05-22 9:42 ` [bug#41428] [PATCH 0/5] Wrappers for c compilers Ludovic Courtès
@ 2020-05-22 18:27 ` Ryan Prior via Guix-patches via
2020-05-27 21:01 ` Ludovic Courtès
0 siblings, 1 reply; 9+ messages in thread
From: Ryan Prior via Guix-patches via @ 2020-05-22 18:27 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 41428
On Friday, May 22, 2020 9:42 AM, Ludovic Courtès <ludo@gnu.org> wrote:
> For packages, the workaround usually boils down to setting shell or Makefile variable ‘CC’ to “gcc” or similar.
Agreed, packages have what they need already.
> As for users, they can have a shell alias.
At present, there's no way to specify a shell alias as part of an environment/profile manifest. These patches would fill that gap for this narrow use-case, as the `python-wrapper` package fills it for another narrow use case.
> it’s easily worked around
Fair.
> our guideline is to follow what upstream does, and none of these compilers provides a ‘cc’ program. (There are
> threads in the mailing list archives discussing this.)
I find this persuasive locally, but in a global sense it results in a less compelling end-user experience which outweighs my partiality towards this guideline.
> I’m personally in favor of the status quo on this topic.
Thank you for weighing in!
My use-case, my vision, is that I want to provide end-users an environment manifest such that `guix environment -m build-env.scm` sets everything up so that `make && make check` succeed.
I created these wrappers in service of this vision, to save end-users the trouble of creating and managing aliases on a per-environment basis when they already don't have to do that using the working set they're familiar with. I want to position Guix as a total win for tooling simplicity; but a lot of small complexities, each of which is easily worked-around, add up quickly to undermine my message.
I would lose all interest in this patch set if I had a more general purpose way of extending a manifest with more things than just packages. I picture, for example, a manifest with three parts:
- packages
- env variables
- aliases
Right now afaict a manifest only has the first of those things. Given I've got this nice packagehammer, I'm inclined to insist upon the usefulness of this patch set as a means of turning `cc` into a nail.
But I'd be happier to use a better tool anyhow. What do y'all guix think is the best pattern to apply for my use case?
Sincerely,
Ryan
^ permalink raw reply [flat|nested] 9+ messages in thread
* [bug#41428] [PATCH 0/5] Wrappers for c compilers
2020-05-22 18:27 ` Ryan Prior via Guix-patches via
@ 2020-05-27 21:01 ` Ludovic Courtès
0 siblings, 0 replies; 9+ messages in thread
From: Ludovic Courtès @ 2020-05-27 21:01 UTC (permalink / raw)
To: Ryan Prior; +Cc: 41428
Hi,
Ryan Prior <rprior@protonmail.com> skribis:
> My use-case, my vision, is that I want to provide end-users an environment manifest such that `guix environment -m build-env.scm` sets everything up so that `make && make check` succeed.
>
> I created these wrappers in service of this vision, to save end-users the trouble of creating and managing aliases on a per-environment basis when they already don't have to do that using the working set they're familiar with. I want to position Guix as a total win for tooling simplicity; but a lot of small complexities, each of which is easily worked-around, add up quickly to undermine my message.
>
> I would lose all interest in this patch set if I had a more general purpose way of extending a manifest with more things than just packages. I picture, for example, a manifest with three parts:
>
> - packages
> - env variables
> - aliases
>
> Right now afaict a manifest only has the first of those things. Given I've got this nice packagehammer, I'm inclined to insist upon the usefulness of this patch set as a means of turning `cc` into a nail.
I understand your goal and I agree that it’s good to avoid building a
pile of small complexities that all add up.
I don’t think lack of ‘cc’ is one them though. First, because it’s a
developer tool, and developers will know they can type ‘gcc’, ‘clang’,
or whatever, create an alias, etc. Second, because most build systems
(Autoconf-generated ‘configure’ scripts, CMake) accommodate the lack of
‘cc’, which thus goes unnoticed.
My 2¢!
Ludo’.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-05-27 21:03 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-21 0:51 [bug#41428] [PATCH 0/5] Wrappers for c compilers Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 1/5] gnu: Add tcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 2/5] gnu: Add pcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 3/5] gnu: Add gcc-toolchain-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 4/5] gnu: Add sdcc-wrapper Ryan Prior via Guix-patches via
2020-05-21 0:57 ` [bug#41428] [PATCH 5/5] gnu: Add bcc-wrapper Ryan Prior via Guix-patches via
2020-05-22 9:42 ` [bug#41428] [PATCH 0/5] Wrappers for c compilers Ludovic Courtès
2020-05-22 18:27 ` Ryan Prior via Guix-patches via
2020-05-27 21:01 ` Ludovic Courtès
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).