unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#66111: is there a problem with --prefix?
@ 2023-09-19 17:59 Ambrose Kofi Laing
  2023-09-20 12:30 ` Eli Zaretskii
  0 siblings, 1 reply; 4+ messages in thread
From: Ambrose Kofi Laing @ 2023-09-19 17:59 UTC (permalink / raw)
  To: 66111

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

Hello,

I'm trying to install emacs_29.1 at a nonstandard location, with the
following commands:

cd src/emacs-29.1
> ./autogen.sh
> ./configure --prefix=/home/myname/my/custom/emacs29
> --with-native-compilation=aot --with-imagemagick --with-json
> --with-tree-sitter --with-xft --without-compress-install
> make -j 4


and I get an error message because of permission denied while trying to
write under /usr/local (that is where the script stops).  In addition,
there are two locations where it says the following:

make -C src BIN_DESTDIR=''/usr/local/bin/'' \
ELN_DESTDIR='/usr/local/lib/emacs/29.1/' all

And I don't think it should be trying to put anything under those two
directories?

This happens twice (please see below the ps under my signature for the full
transcript of "make install" to see the exact context in which it
happens).  It seems to be that the --prefix does not override certain
locations that it is supposed to?

Are there other variables I need to set (other than the --prefix option to
configure) that will ensure that the compilation and installation will not
try to write under /usr/local ?

Thanks for any pointers,

Ambrose

ps.

myhost:emacs-29.1$ make install
> make -C lib all
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lib'
> make[1]: Nothing to be done for 'all'.
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lib'
> make -C lib-src all
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lib-src'
> make[1]: Nothing to be done for 'all'.
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lib-src'
> make -C src BIN_DESTDIR=''/usr/local/bin/'' \
> ELN_DESTDIR='/usr/local/lib/emacs/29.1/' all
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/src'
> make -C ../admin/charsets all
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make -C ../admin/unidata charscript.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make[2]: Nothing to be done for 'charscript.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make -C ../admin/unidata emoji-zwj.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make[2]: Nothing to be done for 'emoji-zwj.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make -C ../admin/unidata all EMACS="../../src/bootstrap-emacs"
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make -C ../admin/charsets cp51932.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[2]: Nothing to be done for 'cp51932.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make -C ../admin/charsets eucjp-ms.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[2]: Nothing to be done for 'eucjp-ms.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/src'
> make -C lisp all
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make -C ../leim all EMACS="../src/emacs"
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/leim'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/leim'
> make -C ../admin/grammars all EMACS="../../src/emacs"
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/grammars'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/grammars'
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make[2]: Nothing to be done for 'compile-targets'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
>   GEN      autoloads
>   INFO     Scraping files for loaddefs...
>   INFO     Scraping files for loaddefs...done
>   INFO     Scraping files for loaddefs...
>   INFO     Scraping files for loaddefs...done
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make[2]: Nothing to be done for 'compile-targets'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/leim'
> make[2]: Nothing to be done for 'generate-ja-dic'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/leim'
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make[2]: Nothing to be done for 'compile-targets'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/misc'
> make[2]: 'org.texi' is up to date.
> make[2]: 'modus-themes.texi' is up to date.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/misc'
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/lisp'
> make -C doc/lispref info
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/lispref'
> make[1]: Nothing to be done for 'info'.
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/lispref'
> make -C doc/lispintro info
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/lispintro'
> make[1]: Nothing to be done for 'info'.
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/lispintro'
> make -C doc/emacs info
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/emacs'
> make[1]: Nothing to be done for 'info'.
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/emacs'
> make -C doc/misc info
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/misc'
> make[1]: Nothing to be done for 'info'.
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/doc/misc'
> make -C src BIN_DESTDIR=''/usr/local/bin/''
> ELN_DESTDIR='/usr/local/lib/emacs/29.1/'
> make[1]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/src'
> make -C ../admin/charsets all
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make -C ../admin/unidata charscript.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make[2]: Nothing to be done for 'charscript.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make -C ../admin/unidata emoji-zwj.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make[2]: Nothing to be done for 'emoji-zwj.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make -C ../admin/unidata all EMACS="../../src/bootstrap-emacs"
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make[2]: Nothing to be done for 'all'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/unidata'
> make -C ../admin/charsets cp51932.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[2]: Nothing to be done for 'cp51932.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make -C ../admin/charsets eucjp-ms.el
> make[2]: Entering directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[2]: Nothing to be done for 'eucjp-ms.el'.
> make[2]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/admin/charsets'
> make[1]: Leaving directory
> '/home/myname/my/custom/emacs29/src/emacs-29.1/src'
> umask 022; /usr/bin/mkdir -p "/usr/local/share/info"
> /usr/bin/mkdir: cannot create directory ‘/usr/local/share/info’:
> Permission denied
> make: *** [Makefile:779: install-info] Error 1
> myhost:emacs-29.1$

[-- Attachment #2: Type: text/html, Size: 10164 bytes --]

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

* bug#66111: is there a problem with --prefix?
  2023-09-19 17:59 bug#66111: is there a problem with --prefix? Ambrose Kofi Laing
@ 2023-09-20 12:30 ` Eli Zaretskii
  2023-09-20 17:04   ` Ambrose Kofi Laing
  0 siblings, 1 reply; 4+ messages in thread
From: Eli Zaretskii @ 2023-09-20 12:30 UTC (permalink / raw)
  To: Ambrose Kofi Laing; +Cc: 66111

> From: Ambrose Kofi Laing <aklaing@gmail.com>
> Date: Tue, 19 Sep 2023 13:59:26 -0400
> 
> I'm trying to install emacs_29.1 at a nonstandard location, with the following commands:
> 
>  cd src/emacs-29.1
>  ./autogen.sh
>  ./configure --prefix=/home/myname/my/custom/emacs29 --with-native-compilation=aot -
>  -with-imagemagick --with-json --with-tree-sitter --with-xft --without-compress-install
>  make -j 4
> 
> and I get an error message because of permission denied while trying to write under /usr/local (that is
> where the script stops).  In addition, there are two locations where it says the following:
> 
> make -C src BIN_DESTDIR=''/usr/local/bin/'' \
> ELN_DESTDIR='/usr/local/lib/emacs/29.1/' all

I don't see how this could have happened.  BIN_DESTDIR and ELN_DESTDIR
are set in the top-level Makefile.ion like this:

  ifeq (${ns_self_contained},no)
  BIN_DESTDIR='$(DESTDIR)${bindir}/'
  ELN_DESTDIR = $(DESTDIR)${libdir}/emacs/${version}/
  else
  BIN_DESTDIR='${ns_appbindir}/'
  ELN_DESTDIR = ${ns_applibdir}/
  endif

Are you building the NS build on macOS?  If not, the upper part of the
conditional above should be true for you, and the values should have
obeyed the --prefix value you used at configure time.

However, I don't understand why you ran autogen.sh.  Are you building
from the Emacs 29.1 release tarball?  If so, the configure script is
already produced and provided in the tarball, you just need to run it.
Could you please unpack the Emacs 29.1 tarball in a fresh directory,
run the configure script without running autogen.sh, and then say
"make" and "make install", and see if the problem still happens.

> This happens twice (please see below the ps under my signature for the full transcript of "make
> install" to see the exact context in which it happens).  It seems to be that the --prefix does not override
> certain locations that it is supposed to?

It should, and I see the code to do that in Makefile.in, so I wonder
why it didn't happen for you.

> Are there other variables I need to set (other than the --prefix option to configure) that will ensure that
> the compilation and installation will not try to write under /usr/local ?

Please show the part of top-level Makefile where bindir and other
variables are set.





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

* bug#66111: is there a problem with --prefix?
  2023-09-20 12:30 ` Eli Zaretskii
@ 2023-09-20 17:04   ` Ambrose Kofi Laing
  2023-09-30 23:29     ` Stefan Kangas
  0 siblings, 1 reply; 4+ messages in thread
From: Ambrose Kofi Laing @ 2023-09-20 17:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 66111

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

Hi Eli,

Thanks for your response.  I was indeed building from the tarball.

I commented out the autogen.sh call, and still the installation went into
/usr/local, instead of to the /nonstandard/location.  So that was not the
only
problem.  After fiddling with it some more I discovered the following
(sequence of errors):

- One of the arguments to my configure script was: --with-tree-sitter

- libtree-sitter-dev was not available on my system [First Mistake]

- I was running configure inside a bash shell script, and I had not put "set
  -e" at the top of that bash script. [Second Mistake]

- As a result, configure correctly detected that libtree-sitter was missing
and failed (and did not produce a Makefile).

- Since I hadn't "set -e", the bash script went on ahead to run make anyway,
  instead of stopping right there.

- make did not find a Makefile, but found a GNUMakefile, and since there was
  no Makefile, make ran configure (without arguments) to generate a
Makefile,
  and naturally this invocation of configure did not include my setting of
  --prefix=/nonstandard/location from the previous call which failed.

- Finally when the install happened, it went into /usr/local instead of
  /nonstandard/location.

- To fix, this, I have to provide  tree-sitter obviously, but the quick
  fix was to remove --with-tree-sitter from the arguments of configure.

- Once that was done, configure ran correctly and generated a Makefile, I
  would assume including my setting of /nonstandard/location.  By this time
I had removed the autogen.sh call.

- Then running configure and make and make install installed correctly to
  /nonstandard/location.

So technically there is nothing wrong, but I can't help wondering if it
would
not be more helpful for the GNUMakefile to echo a message saying "I can't
find
a Makefile, please run configure yourself to generate one", instead of being
helpful and trying to run configure for me and not quite doing it the way I
wanted.  I know however that things like GNUMakefiles have a lot of history
and this behavior is probably unlikely to change.

Anyway, I'm all set now, thank you for your help!!

Best,

Ambrose

On Wed, Sep 20, 2023 at 8:30 AM Eli Zaretskii <eliz@gnu.org> wrote:

> > From: Ambrose Kofi Laing <aklaing@gmail.com>
> > Date: Tue, 19 Sep 2023 13:59:26 -0400
> >
> > I'm trying to install emacs_29.1 at a nonstandard location, with the
> following commands:
> >
> >  cd src/emacs-29.1
> >  ./autogen.sh
> >  ./configure --prefix=/home/myname/my/custom/emacs29
> --with-native-compilation=aot -
> >  -with-imagemagick --with-json --with-tree-sitter --with-xft
> --without-compress-install
> >  make -j 4
> >
> > and I get an error message because of permission denied while trying to
> write under /usr/local (that is
> > where the script stops).  In addition, there are two locations where it
> says the following:
> >
> > make -C src BIN_DESTDIR=''/usr/local/bin/'' \
> > ELN_DESTDIR='/usr/local/lib/emacs/29.1/' all
>
> I don't see how this could have happened.  BIN_DESTDIR and ELN_DESTDIR
> are set in the top-level Makefile.ion like this:
>
>   ifeq (${ns_self_contained},no)
>   BIN_DESTDIR='$(DESTDIR)${bindir}/'
>   ELN_DESTDIR = $(DESTDIR)${libdir}/emacs/${version}/
>   else
>   BIN_DESTDIR='${ns_appbindir}/'
>   ELN_DESTDIR = ${ns_applibdir}/
>   endif
>
> Are you building the NS build on macOS?  If not, the upper part of the
> conditional above should be true for you, and the values should have
> obeyed the --prefix value you used at configure time.
>
> However, I don't understand why you ran autogen.sh.  Are you building
> from the Emacs 29.1 release tarball?  If so, the configure script is
> already produced and provided in the tarball, you just need to run it.
> Could you please unpack the Emacs 29.1 tarball in a fresh directory,
> run the configure script without running autogen.sh, and then say
> "make" and "make install", and see if the problem still happens.
>
> > This happens twice (please see below the ps under my signature for the
> full transcript of "make
> > install" to see the exact context in which it happens).  It seems to be
> that the --prefix does not override
> > certain locations that it is supposed to?
>
> It should, and I see the code to do that in Makefile.in, so I wonder
> why it didn't happen for you.
>
> > Are there other variables I need to set (other than the --prefix option
> to configure) that will ensure that
> > the compilation and installation will not try to write under /usr/local ?
>
> Please show the part of top-level Makefile where bindir and other
> variables are set.
>

[-- Attachment #2: Type: text/html, Size: 5773 bytes --]

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

* bug#66111: is there a problem with --prefix?
  2023-09-20 17:04   ` Ambrose Kofi Laing
@ 2023-09-30 23:29     ` Stefan Kangas
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Kangas @ 2023-09-30 23:29 UTC (permalink / raw)
  To: Ambrose Kofi Laing; +Cc: Eli Zaretskii, 66111-done

Ambrose Kofi Laing <aklaing@gmail.com> writes:

> Hi Eli,
>
> Thanks for your response.  I was indeed building from the tarball.
>
> I commented out the autogen.sh call, and still the installation went into
> /usr/local, instead of to the /nonstandard/location.  So that was not the only
> problem.  After fiddling with it some more I discovered the following (sequence of errors):
>
> - One of the arguments to my configure script was: --with-tree-sitter
>
> - libtree-sitter-dev was not available on my system [First Mistake]
>
> - I was running configure inside a bash shell script, and I had not put "set
>   -e" at the top of that bash script. [Second Mistake]
>
> - As a result, configure correctly detected that libtree-sitter was missing and failed (and did not produce a Makefile).
>
> - Since I hadn't "set -e", the bash script went on ahead to run make anyway,
>   instead of stopping right there.
>
> - make did not find a Makefile, but found a GNUMakefile, and since there was
>   no Makefile, make ran configure (without arguments) to generate a Makefile,
>   and naturally this invocation of configure did not include my setting of
>   --prefix=/nonstandard/location from the previous call which failed.
>
> - Finally when the install happened, it went into /usr/local instead of
>   /nonstandard/location.
>
> - To fix, this, I have to provide  tree-sitter obviously, but the quick
>   fix was to remove --with-tree-sitter from the arguments of configure.
>
> - Once that was done, configure ran correctly and generated a Makefile, I
>   would assume including my setting of /nonstandard/location.  By this time I had removed the autogen.sh call.
>
> - Then running configure and make and make install installed correctly to
>   /nonstandard/location.
>
> So technically there is nothing wrong, but I can't help wondering if it would
> not be more helpful for the GNUMakefile to echo a message saying "I can't find
> a Makefile, please run configure yourself to generate one", instead of being
> helpful and trying to run configure for me and not quite doing it the way I
> wanted.  I know however that things like GNUMakefiles have a lot of history
> and this behavior is probably unlikely to change.
>
> Anyway, I'm all set now, thank you for your help!!

The issue seems resolved, so I'm closing the bug report.





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

end of thread, other threads:[~2023-09-30 23:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-19 17:59 bug#66111: is there a problem with --prefix? Ambrose Kofi Laing
2023-09-20 12:30 ` Eli Zaretskii
2023-09-20 17:04   ` Ambrose Kofi Laing
2023-09-30 23:29     ` Stefan Kangas

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.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).