* [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).