mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-05 11:21:04 -08:00
(init_cmdargs): Set Vinstallation_directory.
(syms_of_emacs): staticpro it.
This commit is contained in:
parent
0736cafe0d
commit
07f4d1231f
1 changed files with 82 additions and 0 deletions
82
src/emacs.c
82
src/emacs.c
|
|
@ -63,6 +63,10 @@ Lisp_Object Vinvocation_name;
|
|||
/* The directory name from which Emacs was invoked. */
|
||||
Lisp_Object Vinvocation_directory;
|
||||
|
||||
/* The directory name in which to find subdirs such as lisp and etc.
|
||||
nil means get them only from PATH_LOADSEARCH. */
|
||||
Lisp_Object Vinstallation_directory;
|
||||
|
||||
/* Hook run by `kill-emacs' before it does really anything. */
|
||||
Lisp_Object Vkill_emacs_hook;
|
||||
|
||||
|
|
@ -179,6 +183,7 @@ init_cmdargs (argc, argv, skip_args)
|
|||
int skip_args;
|
||||
{
|
||||
register int i;
|
||||
Lisp_Object name, dir;
|
||||
|
||||
Vinvocation_name = Ffile_name_nondirectory (build_string (argv[0]));
|
||||
Vinvocation_directory = Ffile_name_directory (build_string (argv[0]));
|
||||
|
|
@ -193,6 +198,81 @@ init_cmdargs (argc, argv, skip_args)
|
|||
Vinvocation_directory = Ffile_name_directory (found);
|
||||
}
|
||||
|
||||
Vinstallation_directory = Qnil;
|
||||
|
||||
if (!NILP (Vinvocation_directory))
|
||||
{
|
||||
dir = Vinvocation_directory;
|
||||
name = Fexpand_file_name (Vinvocation_name, dir);
|
||||
while (1)
|
||||
{
|
||||
Lisp_Object tem, lisp_exists, lib_src_exists;
|
||||
Lisp_Object etc_exists, info_exists;
|
||||
|
||||
/* See if dir contains subdirs for use by Emacs. */
|
||||
tem = Fexpand_file_name (build_string ("lisp"), dir);
|
||||
lisp_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (lisp_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("lib-src"), dir);
|
||||
lib_src_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (lib_src_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("etc"), dir);
|
||||
etc_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (etc_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("info"), dir);
|
||||
info_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (info_exists))
|
||||
{
|
||||
Vinstallation_directory
|
||||
= Ffile_name_as_directory (dir);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* See if dir's parent contains those subdirs. */
|
||||
tem = Fexpand_file_name (build_string ("../lisp"), dir);
|
||||
lisp_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (lisp_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("../lib-src"), dir);
|
||||
lib_src_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (lib_src_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("../etc"), dir);
|
||||
etc_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (etc_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("../info"), dir);
|
||||
info_exists = Ffile_exists_p (tem);
|
||||
if (!NILP (info_exists))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string (".."), dir);
|
||||
Vinstallation_directory
|
||||
= Ffile_name_as_directory (tem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the Emacs executable is actually a link,
|
||||
next try the dir that the link points into. */
|
||||
tem = Ffile_symlink_p (name);
|
||||
if (!NILP (tem))
|
||||
{
|
||||
name = tem;
|
||||
dir = Ffile_name_directory (name);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Vcommand_line_args = Qnil;
|
||||
|
||||
for (i = argc - 1; i >= 0; i--)
|
||||
|
|
@ -962,6 +1042,8 @@ and only if the Emacs executable is installed with setuid to permit\n\
|
|||
it to change priority. (Emacs sets its uid back to the real uid.)");
|
||||
emacs_priority = 0;
|
||||
|
||||
staticpro (&Vinstallation_directory);
|
||||
Vinstallation_directory = Qnil;
|
||||
staticpro (&Vinvocation_name);
|
||||
Vinvocation_name = Qnil;
|
||||
staticpro (&Vinvocation_directory);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue