Make --no-site-lisp work for --enable-locallisppath elements
without "site-lisp" in the name. Ref http://debbugs.gnu.org/10208#25, point iii). * configure.in (standardlisppath): New output variable. (lisppath): Use standardlisppath. * Makefile.in (standardlisppath): New, set by configure. (epaths-force): Use standardlisppath and locallisppath rather than lisppath. * src/epaths.in (PATH_SITELOADSEARCH): New. * src/lread.c (init_lread): Use PATH_SITELOADSEARCH. * nt/paths.h (PATH_SITELOADSEARCH): New. Fixes: debbugs:11658
This commit is contained in:
parent
9ff8f76bbc
commit
ca26824cb0
9 changed files with 159 additions and 124 deletions
|
@ -1,3 +1,11 @@
|
|||
2012-06-30 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* configure.in (standardlisppath): New output variable.
|
||||
(lisppath): Use standardlisppath.
|
||||
* Makefile.in (standardlisppath): New, set by configure.
|
||||
(epaths-force): Use standardlisppath and locallisppath rather than
|
||||
lisppath.
|
||||
|
||||
2012-06-28 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
* configure.in: Fix previous change. Remove --enable-asserts.
|
||||
|
|
18
Makefile.in
18
Makefile.in
|
@ -186,16 +186,20 @@ iconsrcdir=$(srcdir)/etc/images/icons
|
|||
lispdir=@lispdir@
|
||||
leimdir=@leimdir@
|
||||
|
||||
# Directories Emacs should search for lisp files specific
|
||||
# to this site (i.e. customizations), before consulting
|
||||
# ${lispdir}. This should be a colon-separated list of
|
||||
# directories.
|
||||
# Directories Emacs should search for standard lisp files.
|
||||
# The default is ${lispdir}:${leimdir}.
|
||||
standardlisppath=@standardlisppath@
|
||||
|
||||
# Directories Emacs should search for lisp files specific to this
|
||||
# site (i.e. customizations), before consulting ${standardlisppath}.
|
||||
# This should be a colon-separated list of directories.
|
||||
locallisppath=@locallisppath@
|
||||
|
||||
# Where Emacs will search to find its lisp files. Before
|
||||
# changing this, check to see if your purpose wouldn't
|
||||
# better be served by changing locallisppath. This
|
||||
# should be a colon-separated list of directories.
|
||||
# The default is ${locallisppath}:${standardlisppath}.
|
||||
lisppath=@lisppath@
|
||||
|
||||
# Where Emacs will search for its lisp files while
|
||||
|
@ -281,12 +285,14 @@ removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g'
|
|||
# to just letting configure generate epaths.h from epaths.in in a
|
||||
# similar way to how Makefile is made from Makefile.in.
|
||||
epaths-force: FRC
|
||||
@(lisppath=`echo ${lisppath} | ${removenullpaths}` ; \
|
||||
@(standardlisppath=`echo ${standardlisppath} | ${removenullpaths}` ; \
|
||||
locallisppath=`echo ${locallisppath} | ${removenullpaths}` ; \
|
||||
buildlisppath=`echo ${buildlisppath} | ${removenullpaths}` ; \
|
||||
x_default_search_path=`echo ${x_default_search_path}`; \
|
||||
gamedir=`echo ${gamedir}`; \
|
||||
sed < ${srcdir}/src/epaths.in > epaths.h.$$$$ \
|
||||
-e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'"$${lisppath}"'";' \
|
||||
-e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'"$${standardlisppath}"'";' \
|
||||
-e 's;\(#.*PATH_SITELOADSEARCH\).*$$;\1 "'"$${locallisppath}"'";' \
|
||||
-e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'"$${buildlisppath}"'";' \
|
||||
-e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";' \
|
||||
-e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";' \
|
||||
|
|
|
@ -38,9 +38,10 @@ dnl (autoconf) Installation Directory Variables
|
|||
dnl See also epaths.h below.
|
||||
lispdir='${datadir}/emacs/${version}/lisp'
|
||||
leimdir='${datadir}/emacs/${version}/leim'
|
||||
standardlisppath='${lispdir}:${leimdir}'
|
||||
locallisppath='${datadir}/emacs/${version}/site-lisp:'\
|
||||
'${datadir}/emacs/site-lisp'
|
||||
lisppath='${locallisppath}:${lispdir}:${datadir}/emacs/${version}/leim'
|
||||
lisppath='${locallisppath}:${standardlisppath}'
|
||||
etcdir='${datadir}/emacs/${version}/etc'
|
||||
archlibdir='${libexecdir}/emacs/${version}/${configuration}'
|
||||
docdir='${datadir}/emacs/${version}/etc'
|
||||
|
@ -3161,6 +3162,7 @@ AC_SUBST(mandir)
|
|||
AC_SUBST(infodir)
|
||||
AC_SUBST(lispdir)
|
||||
AC_SUBST(leimdir)
|
||||
AC_SUBST(standardlisppath)
|
||||
AC_SUBST(locallisppath)
|
||||
AC_SUBST(lisppath)
|
||||
AC_SUBST(x_default_search_path)
|
||||
|
|
|
@ -44,6 +44,10 @@
|
|||
|
||||
;; Add subdirectories to the load-path for files that might get
|
||||
;; autoloaded when bootstrapping.
|
||||
;; This is because PATH_DUMPLOADSEARCH is just "../lisp".
|
||||
;; Note that we reset load-path below just before dumping,
|
||||
;; since lread.c:init_lread checks for changes to load-path
|
||||
;; in deciding whether to modify it.
|
||||
(if (or (equal (nth 3 command-line-args) "bootstrap")
|
||||
(equal (nth 4 command-line-args) "bootstrap")
|
||||
(equal (nth 3 command-line-args) "unidata-gen.el")
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2012-06-30 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* paths.h (PATH_SITELOADSEARCH): New.
|
||||
|
||||
2012-06-28 Juanma Barranquero <lekktu@gmail.com>
|
||||
|
||||
* nmake.defs (CHECKING_CFLAGS):
|
||||
|
|
|
@ -20,10 +20,13 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
|
||||
|
||||
/* The default search path for Lisp function "load".
|
||||
This sets load-path. */
|
||||
Together with PATH_SITELOADSEARCH, this sets load-path. */
|
||||
/* #define PATH_LOADSEARCH "/usr/local/lib/emacs/lisp" */
|
||||
#define PATH_LOADSEARCH "C:/emacs/lisp"
|
||||
|
||||
/* Like PATH_LOADSEARCH, but contains the non-standard pieces. */
|
||||
#define PATH_SITELOADSEARCH "C:/emacs/site-lisp"
|
||||
|
||||
/* Like PATH_LOADSEARCH, but used only when Emacs is dumping. This
|
||||
path is usually identical to PATH_LOADSEARCH except that the entry
|
||||
for the directory containing the installed lisp files has been
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2012-06-30 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* epaths.in (PATH_SITELOADSEARCH): New.
|
||||
* lread.c (init_lread): Use PATH_SITELOADSEARCH.
|
||||
This is rather than relying on --enable-locallisppath elements
|
||||
having "site-lisp" in their names. (Bug#10208#25, 11658)
|
||||
|
||||
2012-06-30 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* w32proc.c (sys_select): Accept and ignore one more argument.
|
||||
|
|
|
@ -19,17 +19,27 @@ You should have received a copy of the GNU General Public License
|
|||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
|
||||
/* The default value of load-path, which is the search path for
|
||||
the Lisp function "load". Configure (using "make epaths-force")
|
||||
sets this to $lisppath, which typically has a value like:
|
||||
<datadir>/emacs/VERSION/site-lisp:<datadir>/emacs/site-lisp:
|
||||
/* Together with PATH_SITELOADSEARCH, this gives the default value of
|
||||
load-path, which is the search path for the Lisp function "load".
|
||||
Configure (using "make epaths-force") sets this to
|
||||
${standardlisppath}, which typically has a value like:
|
||||
<datadir>/emacs/VERSION/lisp:<datadir>/emacs/VERSION/leim
|
||||
where datadir is eg /usr/local/share.
|
||||
Configure prepends any $locallisppath, as set by the
|
||||
--enable-locallisppath argument.
|
||||
*/
|
||||
#define PATH_LOADSEARCH "/usr/local/share/emacs/lisp"
|
||||
|
||||
|
||||
/* Like PATH_LOADSEARCH, but contains the non-standard pieces.
|
||||
These are the site-lisp directories, typically something like
|
||||
<datadir>/emacs/VERSION/site-lisp:<datadir>/emacs/site-lisp
|
||||
Configure prepends any $locallisppath, as set by the
|
||||
--enable-locallisppath argument.
|
||||
This is combined with PATH_LOADSEARCH to make the default load-path.
|
||||
If the --no-site-lisp option is used, this piece is excluded.
|
||||
*/
|
||||
#define PATH_SITELOADSEARCH "/usr/local/share/emacs/site-lisp"
|
||||
|
||||
|
||||
/* Like PATH_LOADSEARCH, but used only during the build process
|
||||
when Emacs is dumping. Configure (using "make epaths-force") sets
|
||||
this to $buildlisppath, which normally has the value: <srcdir>/lisp.
|
||||
|
|
211
src/lread.c
211
src/lread.c
|
@ -4072,15 +4072,15 @@ init_lread (void)
|
|||
int turn_off_warning = 0;
|
||||
|
||||
/* Compute the default Vload-path, with the following logic:
|
||||
If CANNOT_DUMP just use PATH_LOADSEARCH.
|
||||
If CANNOT_DUMP, just use PATH_LOADSEARCH, prepending PATH_SITELOADSEARCH
|
||||
unless --no-site-lisp.
|
||||
Else if purify-flag (ie dumping) start from PATH_DUMPLOADSEARCH;
|
||||
otherwise start from PATH_LOADSEARCH.
|
||||
If !initialized, then just set both Vload_path and dump_path.
|
||||
If initialized, then if Vload_path != dump_path, do nothing.
|
||||
(Presumably the load-path has already been changed by something.)
|
||||
Also do nothing if Vinstallation_directory is nil.
|
||||
Otherwise:
|
||||
Remove site-lisp directories from the front of load-path.
|
||||
(Presumably the load-path has already been changed by something.
|
||||
This can only (?) be from a site-load file during dumping.)
|
||||
If Vinstallation_directory is not nil (ie, running uninstalled):
|
||||
Add installation-dir/lisp (if exists and not already a member),
|
||||
at the front, and turn off warnings about missing directories
|
||||
(because we are presumably running uninstalled).
|
||||
|
@ -4094,8 +4094,7 @@ init_lread (void)
|
|||
install-dir/src/Makefile.in does NOT exist (this is a sanity
|
||||
check), then repeat the above steps for source-dir/lisp,
|
||||
leim and site-lisp.
|
||||
Finally, add the previously removed site-lisp directories back
|
||||
at the front (if !no_site_lisp).
|
||||
Finally, add the site-lisp directories at the front (if !no_site_lisp).
|
||||
|
||||
We then warn about any of the load-path elements that do not
|
||||
exist. The only ones that might not exist are those from
|
||||
|
@ -4111,9 +4110,16 @@ init_lread (void)
|
|||
uninstalled, the eventual installation directories should not yet
|
||||
be included in load-path.
|
||||
*/
|
||||
|
||||
#ifdef CANNOT_DUMP
|
||||
normal = PATH_LOADSEARCH;
|
||||
Vload_path = decode_env_path (0, normal);
|
||||
if (!no_site_lisp)
|
||||
{
|
||||
Lisp_Object sitelisp;
|
||||
sitelisp = decode_env_path (0, PATH_SITELOADSEARCH);
|
||||
if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
|
||||
}
|
||||
#else
|
||||
if (NILP (Vpurify_flag))
|
||||
normal = PATH_LOADSEARCH;
|
||||
|
@ -4131,123 +4137,108 @@ init_lread (void)
|
|||
if (! NILP (Fequal (dump_path, Vload_path)))
|
||||
{
|
||||
Vload_path = decode_env_path (0, normal);
|
||||
if (no_site_lisp || !NILP (Vinstallation_directory))
|
||||
if (!NILP (Vinstallation_directory))
|
||||
{
|
||||
Lisp_Object tem, tem1, sitelisp;
|
||||
Lisp_Object tem, tem1;
|
||||
|
||||
/* Remove "site-lisp" dirs from front of path temporarily
|
||||
and store them in sitelisp, then conc them on at the
|
||||
end so they're always first in path.
|
||||
Note that this won't work if you used a
|
||||
--enable-locallisppath element that does not happen
|
||||
to contain "site-lisp" in its name.
|
||||
*/
|
||||
sitelisp = Qnil;
|
||||
while (1)
|
||||
{
|
||||
tem = Fcar (Vload_path);
|
||||
tem1 = Fstring_match (build_string ("site-lisp"),
|
||||
tem, Qnil);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
Vload_path = Fcdr (Vload_path);
|
||||
sitelisp = Fcons (tem, sitelisp);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
/* Add to the path the lisp subdir of the
|
||||
installation dir, if it exists. */
|
||||
tem = Fexpand_file_name (build_string ("lisp"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
{
|
||||
turn_off_warning = 1;
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
}
|
||||
else
|
||||
/* That dir doesn't exist, so add the build-time
|
||||
Lisp dirs instead. */
|
||||
Vload_path = nconc2 (Vload_path, dump_path);
|
||||
|
||||
if (!NILP (Vinstallation_directory))
|
||||
{
|
||||
/* Add to the path the lisp subdir of the
|
||||
installation dir, if it exists. */
|
||||
tem = Fexpand_file_name (build_string ("lisp"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
{
|
||||
turn_off_warning = 1;
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
}
|
||||
else
|
||||
/* That dir doesn't exist, so add the build-time
|
||||
Lisp dirs instead. */
|
||||
Vload_path = nconc2 (Vload_path, dump_path);
|
||||
/* Add leim under the installation dir, if it exists. */
|
||||
tem = Fexpand_file_name (build_string ("leim"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
|
||||
/* Add leim under the installation dir, if it exists. */
|
||||
tem = Fexpand_file_name (build_string ("leim"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
/* Add site-lisp under the installation dir, if it exists. */
|
||||
if (!no_site_lisp)
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("site-lisp"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add site-lisp under the installation dir, if it exists. */
|
||||
if (!no_site_lisp)
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("site-lisp"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1))
|
||||
{
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
}
|
||||
/* If Emacs was not built in the source directory,
|
||||
and it is run from where it was built, add to load-path
|
||||
the lisp, leim and site-lisp dirs under that directory. */
|
||||
|
||||
/* If Emacs was not built in the source directory,
|
||||
and it is run from where it was built, add to load-path
|
||||
the lisp, leim and site-lisp dirs under that directory. */
|
||||
if (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
|
||||
{
|
||||
Lisp_Object tem2;
|
||||
|
||||
if (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
|
||||
{
|
||||
Lisp_Object tem2;
|
||||
tem = Fexpand_file_name (build_string ("src/Makefile"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
|
||||
tem = Fexpand_file_name (build_string ("src/Makefile"),
|
||||
Vinstallation_directory);
|
||||
tem1 = Ffile_exists_p (tem);
|
||||
/* Don't be fooled if they moved the entire source tree
|
||||
AFTER dumping Emacs. If the build directory is indeed
|
||||
different from the source dir, src/Makefile.in and
|
||||
src/Makefile will not be found together. */
|
||||
tem = Fexpand_file_name (build_string ("src/Makefile.in"),
|
||||
Vinstallation_directory);
|
||||
tem2 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1) && NILP (tem2))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("lisp"),
|
||||
Vsource_directory);
|
||||
|
||||
/* Don't be fooled if they moved the entire source tree
|
||||
AFTER dumping Emacs. If the build directory is indeed
|
||||
different from the source dir, src/Makefile.in and
|
||||
src/Makefile will not be found together. */
|
||||
tem = Fexpand_file_name (build_string ("src/Makefile.in"),
|
||||
Vinstallation_directory);
|
||||
tem2 = Ffile_exists_p (tem);
|
||||
if (!NILP (tem1) && NILP (tem2))
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("lisp"),
|
||||
Vsource_directory);
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
tem = Fexpand_file_name (build_string ("leim"),
|
||||
Vsource_directory);
|
||||
|
||||
tem = Fexpand_file_name (build_string ("leim"),
|
||||
Vsource_directory);
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
if (!no_site_lisp)
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("site-lisp"),
|
||||
Vsource_directory);
|
||||
|
||||
if (!no_site_lisp)
|
||||
{
|
||||
tem = Fexpand_file_name (build_string ("site-lisp"),
|
||||
Vsource_directory);
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
}
|
||||
} /* Vinstallation_directory != Vsource_directory */
|
||||
|
||||
if (NILP (Fmember (tem, Vload_path)))
|
||||
Vload_path = Fcons (tem, Vload_path);
|
||||
}
|
||||
}
|
||||
} /* Vinstallation_directory != Vsource_directory */
|
||||
} /* if Vinstallation_directory */
|
||||
if (!NILP (sitelisp) && !no_site_lisp)
|
||||
Vload_path = nconc2 (Fnreverse (sitelisp), Vload_path);
|
||||
} /* if Vinstallation_directory || no_site_lisp */
|
||||
} /* if dump_path == Vload_path */
|
||||
} /* if Vinstallation_directory */
|
||||
|
||||
/* Add the site-lisp directories at the front. */
|
||||
/* Note: If the site changed the load-path during dumping,
|
||||
--no-site-lisp is ignored. I don't know what to do about this.
|
||||
*/
|
||||
if (!no_site_lisp)
|
||||
{
|
||||
Lisp_Object sitelisp;
|
||||
sitelisp = decode_env_path (0, PATH_SITELOADSEARCH);
|
||||
if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
|
||||
}
|
||||
} /* if dump_path == Vload_path */
|
||||
}
|
||||
else /* !initialized */
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue