all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Emacs C source
@ 2023-12-15 14:56 Kristoffer Ström
  2023-12-17 11:27 ` Tomas Volf
  2023-12-17 22:03 ` Ian Eure
  0 siblings, 2 replies; 6+ messages in thread
From: Kristoffer Ström @ 2023-12-15 14:56 UTC (permalink / raw)
  To: help-guix


Hello! I'm running emacs in a guix shell, and wonder how/where to get
the C source code directory for xref-find-definitions.

I've grepped the /gnu/store/*emacs but cannot find the C source, is
there some special package/output or procedure needed to get it included
in the shell environment?


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Emacs C source
  2023-12-15 14:56 Emacs C source Kristoffer Ström
@ 2023-12-17 11:27 ` Tomas Volf
  2023-12-17 13:18   ` Kristoffer Ström
  2023-12-17 22:03 ` Ian Eure
  1 sibling, 1 reply; 6+ messages in thread
From: Tomas Volf @ 2023-12-17 11:27 UTC (permalink / raw)
  To: Kristoffer Ström; +Cc: help-guix

[-- Attachment #1: Type: text/plain, Size: 1369 bytes --]

On 2023-12-15 15:56:34 +0100, Kristoffer Ström wrote:
>
> Hello! I'm running emacs in a guix shell, and wonder how/where to get
> the C source code directory for xref-find-definitions.
>
> I've grepped the /gnu/store/*emacs but cannot find the C source, is
> there some special package/output or procedure needed to get it included
> in the shell environment?

You can download source archives for any package using build --sources, like
this:

    $ guix build --sources emacs
    substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
    43.3 MB will be downloaded:
      /gnu/store/c4xfnis0g5g2v1ssl3wqgk8h6s3xjfk6-emacs-29.1.tar.xz
    substituting /gnu/store/c4xfnis0g5g2v1ssl3wqgk8h6s3xjfk6-emacs-29.1.tar.xz...
    downloading from https://bordeaux.guix.gnu.org/nar/lzip/c4xfnis0g5g2v1ssl3wqgk8h6s3xjfk6-emacs-29.1.tar.xz ...
     emacs-29.1.tar.xz  41.3MiB                                                                                                                         16.6MiB/s 00:02 ▕██████████████████▏ 100.0%

    /gnu/store/c4xfnis0g5g2v1ssl3wqgk8h6s3xjfk6-emacs-29.1.tar.xz

You can then extract the archive somewhere.

Hope this helps,
Tomas

--
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Emacs C source
  2023-12-17 11:27 ` Tomas Volf
@ 2023-12-17 13:18   ` Kristoffer Ström
  2023-12-19 15:35     ` Simon Tournier
  0 siblings, 1 reply; 6+ messages in thread
From: Kristoffer Ström @ 2023-12-17 13:18 UTC (permalink / raw)
  To: help-guix


> You can download source archives for any package using build --sources, like
> this:

That's nice to know! However i would greatly prefer if there was some
way to make it be available as part of a manifest, i'm building multiple
environments using guix shell containers, and doing this as an extra
step in each one is not very pleasant.

something along the lines of `guix shell -D emacs` but for sources


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Emacs C source
  2023-12-15 14:56 Emacs C source Kristoffer Ström
  2023-12-17 11:27 ` Tomas Volf
@ 2023-12-17 22:03 ` Ian Eure
  1 sibling, 0 replies; 6+ messages in thread
From: Ian Eure @ 2023-12-17 22:03 UTC (permalink / raw)
  To: help-guix


Kristoffer Ström <kristoffer@rymdkoloni.se> writes:

> Hello! I'm running emacs in a guix shell, and wonder how/where 
> to get
> the C source code directory for xref-find-definitions.
>
> I've grepped the /gnu/store/*emacs but cannot find the C source, 
> is
> there some special package/output or procedure needed to get it 
> included
> in the shell environment?
>

There is no C source for xref-find-definitions, it’s written in 
Emacs Lisp:

    xref-find-definitions is an interactive native-compiled Lisp 
    function
    in ‘xref.el’.

The source is available in any environment the Emacs package is 
installed.

  — Ian


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Emacs C source
  2023-12-17 13:18   ` Kristoffer Ström
@ 2023-12-19 15:35     ` Simon Tournier
  2023-12-19 16:07       ` Kristoffer Ström
  0 siblings, 1 reply; 6+ messages in thread
From: Simon Tournier @ 2023-12-19 15:35 UTC (permalink / raw)
  To: Kristoffer Ström, help-guix

Hi,

On Sun, 17 Dec 2023 at 14:18, Kristoffer Ström <kristoffer@rymdkoloni.se> wrote:

> That's nice to know! However i would greatly prefer if there was some
> way to make it be available as part of a manifest,

Well, I am not aware of such out-of-box feature.

>                                                    i'm building multiple
> environments using guix shell containers, and doing this as an extra
> step in each one is not very pleasant.

Hum, I am missing context but I do not see what would be the workflow.

> something along the lines of `guix shell -D emacs` but for sources

Somehow Guix will manipulate read-only items in the store; thus the
source is not directly useful.  Something like that ugly,

--8<---------------cut here---------------start------------->8---
(use-modules (guix scripts build))

(specifications->manifest
 (map
  (lambda (spec)
    (begin
      (guix-build "--source" spec)
      spec))
  (list
   "emacs"
   "coreutils"
   )))
--8<---------------cut here---------------end--------------->8---

allows to fetch the corresponding source of each package.  However, the
source (tarball) are not part of the ’manifest’ and thus not visible
inside the container.

It is possible to do it using some plumbing Guix procedures, I
guess. :-)

Aside, I initially wrote a Guix script (see below) for mainly demoing
and now, I am using more or more. :-) I think something in this area is
missing.  I would like such workflow

   guix <something> emacs custom/path/to/emacs
   cd custom/path/to/emacs
   guix shell -C -D emacs
   … hack …

And the script just shows how to download the source of a package.

    (Please note that “guix build --source” returns the source after the
applying snippets, and the tiny script manipulated the URL of source,
i.e., before the applications of snippets.)

Cheers,
simon


--8<---------------cut here---------------start------------->8---
$ cat examples/scripts/show-me-fetch.scm 
#!/usr/bin/env -S guix repl -q --
;; -*- mode: scheme -*-
!#
;;; Copyright © 2023 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;;
;;; This script show URL of packages.
;;;

(use-modules
 (ice-9 match)

 ((gnu packages) #:select (specification->package))
 (guix packages)

 ((web uri) #:select (string->uri
                      uri->string))
 ((guix build download) #:select (maybe-expand-mirrors))
 ((guix download) #:select (%mirrors))
 (guix git-download))

(let ((pkgs (match (command-line)
              ((prog-name pkgs ...)
               (map specification->package pkgs))
              (_
               (begin
                 (format #t "Error. Try: ./show-me-url.scm hello")
                 (exit 1))))))
  (for-each
   (lambda (pkg)
     (match (package-source pkg)
       ;; See 'origin->json' from file build-package-metadata.scm in repository
       ;; maintenance.git for an exhaustive case handling.
       ((? origin? o)
        (match (origin-uri o)
          ((? string? s)
           ;; Pick only the first (car) of the potenial long list
           (let ((url (car (map uri->string
                                (maybe-expand-mirrors (string->uri s) %mirrors)))))
             (format #t "wget      ~a~%" url)))
          ((? git-reference? g)
           (let* ((url (git-reference-url g))
                 (revision (git-reference-commit g))
                 (tmpdir (string-append "/tmp/" (package-name pkg)))
                 (git (string-append "git -C " tmpdir)))
             (format #t "mkdir -p ~a ~%" tmpdir)
             (format #t "&& ~a init --initial-branch=main ~%" git)
             (format #t "&& ~a remote add origin ~a ~%" git url)
             (format #t "&& ~a fetch --depth 1 origin ~a ~%" git revision)
             (format #t "&& ~a checkout FETCH_HEAD ~%" git)))
          ;; All the other cases
          (_ #f)))))
   pkgs)
  (exit 0))
--8<---------------cut here---------------end--------------->8---


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Emacs C source
  2023-12-19 15:35     ` Simon Tournier
@ 2023-12-19 16:07       ` Kristoffer Ström
  0 siblings, 0 replies; 6+ messages in thread
From: Kristoffer Ström @ 2023-12-19 16:07 UTC (permalink / raw)
  To: Simon Tournier, help-guix


> --8<---------------cut here---------------start------------->8---
> (use-modules (guix scripts build))
>
> (specifications->manifest
>  (map
>   (lambda (spec)
>     (begin
>       (guix-build "--source" spec)
>       spec))
>   (list
>    "emacs"
>    "coreutils"
>    )))
> --8<---------------cut here---------------end--------------->8---
>
> allows to fetch the corresponding source of each package.  However, the
> source (tarball) are not part of the ’manifest’ and thus not visible
> inside the container.

This looks like a good start to get somehting automatic. Thank you!


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-12-20 12:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-15 14:56 Emacs C source Kristoffer Ström
2023-12-17 11:27 ` Tomas Volf
2023-12-17 13:18   ` Kristoffer Ström
2023-12-19 15:35     ` Simon Tournier
2023-12-19 16:07       ` Kristoffer Ström
2023-12-17 22:03 ` Ian Eure

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.