unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* dir-locals.el process-environment
@ 2018-02-19 18:44 edgar
  0 siblings, 0 replies; 11+ messages in thread
From: edgar @ 2018-02-19 18:44 UTC (permalink / raw)
  To: help-gnu-emacs

Hi, I am trying to customise my building environment (debugging 
included). I have this in my .dir-locals.el

(("src"                   ;https://stackoverflow.com/a/19521152
   . ((c++-mode            
;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
       .
       ((eval              ;https://emacs.stackexchange.com/a/35965
         . (progn
             (make-local-variable 'process-environment)
             (setq process-environment
                   (copy-sequence process-environment))
             (setenv "CC" "mpicc"))))))))

However, if I printf "$CC" I get nothing. How can I achieve this? 
Thanks.

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

* dir-locals.el process-environment
@ 2018-02-26  4:30 edgar
  2018-02-26 19:15 ` Eli Zaretskii
  0 siblings, 1 reply; 11+ messages in thread
From: edgar @ 2018-02-26  4:30 UTC (permalink / raw)
  To: help-gnu-emacs

Did someone receive my question? Is this the right mailing list? Thanks!

Hi, I am trying to customise my building environment (debugging 
included). I have this in my .dir-locals.el

(("src"                   ;https://stackoverflow.com/a/19521152
   . ((c++-mode            
;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
       .
       ((eval              ;https://emacs.stackexchange.com/a/35965
         . (progn
             (make-local-variable 'process-environment)
             (setq process-environment
                   (copy-sequence process-environment))
             (setenv "CC" "mpicc"))))))))

However, if I printf "$CC" I get nothing. How can I achieve this? 
Thanks.

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

* Re: dir-locals.el process-environment
  2018-02-26  4:30 edgar
@ 2018-02-26 19:15 ` Eli Zaretskii
  0 siblings, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2018-02-26 19:15 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Mon, 26 Feb 2018 04:30:02 +0000
> From: edgar@openmail.cc
> 
> (("src"                   ;https://stackoverflow.com/a/19521152
>    . ((c++-mode            
> ;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
>        .
>        ((eval              ;https://emacs.stackexchange.com/a/35965
>          . (progn
>              (make-local-variable 'process-environment)
>              (setq process-environment
>                    (copy-sequence process-environment))
>              (setenv "CC" "mpicc"))))))))
> 
> However, if I printf "$CC" I get nothing. How can I achieve this? 

What exactly do you do to 'printf "$CC"'?



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

* Re: dir-locals.el process-environment
       [not found] <mailman.25.1519750804.23377.help-gnu-emacs@gnu.org>
@ 2018-02-28  5:47 ` edgar
  2018-02-28 16:37   ` Eli Zaretskii
  0 siblings, 1 reply; 11+ messages in thread
From: edgar @ 2018-02-28  5:47 UTC (permalink / raw)
  To: help-gnu-emacs

> Message: 1
> Date: Mon, 26 Feb 2018 21:15:13 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> To: help-gnu-emacs@gnu.org
> Subject: Re: dir-locals.el process-environment
> Message-ID: <83k1uz1s1q.fsf@gnu.org>
> 
>> However, if I printf "$CC" I get nothing. How can I achieve this?
> 
> What exactly do you do to 'printf "$CC"'?

Thanks for your reply, Eli! I'm sorry that I was not clear. This is how
I do it:

┌──── emacs-lisp
│ (
│  ("src"                   ;https://stackoverflow.com/a/19521152
│   . ((c++-mode            
;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
│       .
│       ((eval              ;https://emacs.stackexchange.com/a/35965
│         . (progn
│             (make-local-variable 'process-environment)
│             (setq process-environment
│                   (copy-sequence process-environment))
│             (setenv "CC" "mpicc")))
│        (compile-command . "printf x$CC"))))))
└────

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

* Re: dir-locals.el process-environment
  2018-02-28  5:47 ` edgar
@ 2018-02-28 16:37   ` Eli Zaretskii
  0 siblings, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2018-02-28 16:37 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Wed, 28 Feb 2018 05:47:57 +0000
> From: edgar@openmail.cc
> Cc: eliz@gnu.org
> 
> >> However, if I printf "$CC" I get nothing. How can I achieve this?
> > 
> > What exactly do you do to 'printf "$CC"'?
> 
> Thanks for your reply, Eli! I'm sorry that I was not clear. This is how
> I do it:
> 
> ┌──── emacs-lisp
> │ (
> │  ("src"                   ;https://stackoverflow.com/a/19521152
> │   . ((c++-mode            
> ;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
> │       .
> │       ((eval              ;https://emacs.stackexchange.com/a/35965
> │         . (progn
> │             (make-local-variable 'process-environment)
> │             (setq process-environment
> │                   (copy-sequence process-environment))
> │             (setenv "CC" "mpicc")))
> │        (compile-command . "printf x$CC"))))))
> └────

So you are saying that in some buffer that visits a file from that
directory, you verified that compile-command's value is "printf x$CC",
but running "M-x compile RET" from that same buffer produces an empty
result?



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

* Re: dir-locals.el process-environment
@ 2018-02-28 22:18 edgar
  2018-03-01  3:32 ` Eli Zaretskii
  0 siblings, 1 reply; 11+ messages in thread
From: edgar @ 2018-02-28 22:18 UTC (permalink / raw)
  To: help-gnu-emacs

Yes! Sorry again. Thank you for your help. The whole process is like 
this:

1. create .dir-locals.el in the top directory with this:

      (
       ("src"                   ;https://stackoverflow.com/a/19521152
        . ((c++-mode
     
;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
            .
            ((eval              ;https://emacs.stackexchange.com/a/35965
              . (progn
                  (make-local-variable 'process-environment)
                  (setq process-environment
                        (copy-sequence process-environment))
                  (setenv "CC" "mpicc")))
             (compile-command . "printf x$CC"))))))

2. visit src/main.C (it can be empty)
3. press F5 (or M-x compile RET)

Actual output
The result is a buffer with the following contents.
     -*- mode: compilation; default-directory: "src/" -*-
     Compilation started at DATE

     printf x$CC
     x
     Compilation finished at DATE

Expected output
I was expecting
     -*- mode: compilation; default-directory: "src/" -*-
     Compilation started at DATE

     printf x$CC
     xmpicc
     Compilation finished at DATE

System specifications
- GNU Emacs 25.2.2 (x86_64-pc-linux-gnu, GTK+ Version 3.22.21) of 
2017-09-22, modified by Debian
- Linux 4.13.0-32-generic #35-Ubuntu (it's not like Ubuntu is my cup of 
tea, but it was the best compromise at the time)

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

* Re: dir-locals.el process-environment
  2018-02-28 22:18 dir-locals.el process-environment edgar
@ 2018-03-01  3:32 ` Eli Zaretskii
  0 siblings, 0 replies; 11+ messages in thread
From: Eli Zaretskii @ 2018-03-01  3:32 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Wed, 28 Feb 2018 22:18:50 +0000
> From: edgar@openmail.cc
> 
> 1. create .dir-locals.el in the top directory with this:
> 
>       (
>        ("src"                   ;https://stackoverflow.com/a/19521152
>         . ((c++-mode
>      
> ;https://www.gnu.org/software/emacs/manual/html_node/emacs/Directory-Variables.html
>             .
>             ((eval              ;https://emacs.stackexchange.com/a/35965
>               . (progn
>                   (make-local-variable 'process-environment)
>                   (setq process-environment
>                         (copy-sequence process-environment))
>                   (setenv "CC" "mpicc")))
>              (compile-command . "printf x$CC"))))))
> 
> 2. visit src/main.C (it can be empty)
> 3. press F5 (or M-x compile RET)
> 
> Actual output
> The result is a buffer with the following contents.
>      -*- mode: compilation; default-directory: "src/" -*-
>      Compilation started at DATE
> 
>      printf x$CC
>      x
>      Compilation finished at DATE
> 
> Expected output
> I was expecting
>      -*- mode: compilation; default-directory: "src/" -*-
>      Compilation started at DATE
> 
>      printf x$CC
>      xmpicc
>      Compilation finished at DATE

You make process-environment local to the buffer main.c, but
compilation runs in its own buffer, *compilation*, where
process-environment doesn't include the $CC setting.



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

* Re: dir-locals.el process-environment
       [not found] <mailman.23.1519923605.5908.help-gnu-emacs@gnu.org>
@ 2018-03-02  2:25 ` edgar
  2018-03-02 14:13   ` Stefan Monnier
  0 siblings, 1 reply; 11+ messages in thread
From: edgar @ 2018-03-02  2:25 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Thu, 01 Mar 2018 05:32:53 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> To: help-gnu-emacs@gnu.org
> Subject: Re: dir-locals.el process-environment>
> 
> You make process-environment local to the buffer main.c, but
> compilation runs in its own buffer, *compilation*, where
> process-environment doesn't include the $CC setting.

Thanks, Eli. I removed the line

   (make-local-variable 'process-environment)

and now the compile command shows what I expected :) . Than you for your 
time!

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

* Re: dir-locals.el process-environment
  2018-03-02  2:25 ` edgar
@ 2018-03-02 14:13   ` Stefan Monnier
  0 siblings, 0 replies; 11+ messages in thread
From: Stefan Monnier @ 2018-03-02 14:13 UTC (permalink / raw)
  To: help-gnu-emacs

>> You make process-environment local to the buffer main.c, but
>> compilation runs in its own buffer, *compilation*, where
>> process-environment doesn't include the $CC setting.

Maybe `compile` should take its process-environment from the buffer from
which it is invoked, rather than from the buffer in which the command is run.


        Stefan




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

* Re: dir-locals.el process-environment
       [not found] <mailman.23.1520010004.25009.help-gnu-emacs@gnu.org>
@ 2018-03-03  5:40 ` edgar
  0 siblings, 0 replies; 11+ messages in thread
From: edgar @ 2018-03-03  5:40 UTC (permalink / raw)
  To: help-gnu-emacs

> Date: Fri, 02 Mar 2018 09:13:07 -0500
> From: Stefan Monnier <monnier@iro.umontreal.ca>
> To: help-gnu-emacs@gnu.org
> Subject: Re: dir-locals.el process-environment
> Message-ID: <jwv4llybm7s.fsf-monnier+gmane.emacs.help@gnu.org>
> 
> Maybe `compile` should take its process-environment from the buffer 
> from
> which it is invoked, rather than from the buffer in which the command 
> is run.
> 
> 
>         Stefan

It's not a bad idea Stefan, but I am not a fan of buffer-local variables 
(if that is what you mean). I find it intrusive for other users. Thanks 
for the suggestion.

I still have to check if the debugging will use those environmental 
variables :P .

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

* Re: dir-locals.el process-environment
@ 2018-05-17 19:55 edgar
  0 siblings, 0 replies; 11+ messages in thread
From: edgar @ 2018-05-17 19:55 UTC (permalink / raw)
  To: help-gnu-emacs

On Sat, 03 Mar 2018 05:40:03 +0000
> I still have to check if the debugging will use those environmental 
> variables :P .

Hello,

I want to report on my progress. This allows me to source environment
variables for process-environment, which is used for compilation and
debugging (gdb). The variables are set with a BASH script. I hope
that it is useful to others.

Note that
1. the name of the sourced file needs to be changed:
    `/path/to/environment/file.sh'
2. Emac's `compile-command' may not need the `METHOD=dbg' (it's
    something for me)
3. `$ENV_VAR_CPU' sets set the number of processes to run with
    make. This variable is defined in `/path/to/environment/file.sh'.

┌────
│ (
│  ("src"                   ;https://stackoverflow.com/a/19521152
│   .
│   (
│    (c++-mode
│     .
│     (
│      (eval              ;https://emacs.stackexchange.com/a/35965
│       . (progn
│           (with-temp-buffer           
;https://stackoverflow.com/a/16789182
│             (call-process "bash" nil t nil "-c"
│                           "source /path/to/environment/file.sh; env")
│             (goto-char (point-min))
│             (while (not (eobp))
│               (setq process-environment
│                     (cons (buffer-substring (point) 
(line-end-position))
│                           process-environment))
│               (forward-line 1)))
│           ))
│
│      (compile-command
│       . (concat
│          "METHOD=dbg make -j $ENV_VAR_CPU -C ../"))
│      )
│     )
│    )
│   )
│  )
└────

This is how I check if the environment is working:
┌────
│ # https://stackoverflow.com/a/32917097
│ xargs -0 printf %s\\n < /proc/($pidof gdb)/environ
└────

These threads may be related:

[https://stackoverflow.com/a/9669183]
[https://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00158.html]
[https://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00063.html]
[https://lists.gnu.org/archive/html/help-gnu-emacs/2018-02/msg00162.html]
[https://lists.gnu.org/archive/html/help-gnu-emacs/2018-03/msg00007.html]

Thanks for your help!

-------------------------------------------------

ONLY AT VFEmail! - Use our Metadata Mitigator to keep your email out of the NSA's hands!
$24.95 ONETIME Lifetime accounts with Privacy Features!  
15GB disk! No bandwidth quotas!
Commercial and Bulk Mail Options!  



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

end of thread, other threads:[~2018-05-17 19:55 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-28 22:18 dir-locals.el process-environment edgar
2018-03-01  3:32 ` Eli Zaretskii
  -- strict thread matches above, loose matches on Subject: below --
2018-05-17 19:55 edgar
     [not found] <mailman.23.1520010004.25009.help-gnu-emacs@gnu.org>
2018-03-03  5:40 ` edgar
     [not found] <mailman.23.1519923605.5908.help-gnu-emacs@gnu.org>
2018-03-02  2:25 ` edgar
2018-03-02 14:13   ` Stefan Monnier
     [not found] <mailman.25.1519750804.23377.help-gnu-emacs@gnu.org>
2018-02-28  5:47 ` edgar
2018-02-28 16:37   ` Eli Zaretskii
2018-02-26  4:30 edgar
2018-02-26 19:15 ` Eli Zaretskii
2018-02-19 18:44 edgar

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