summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2012-06-30 14:10:50 -0700
committerGlenn Morris <rgm@gnu.org>2012-06-30 14:10:50 -0700
commitca26824cb07d494481a14fea1642d38ad6c2a9e4 (patch)
treec0a3d299f228fd444741729ea0549c1927f96582
parent9ff8f76bbca43e021f842b24493885f1c034f6a4 (diff)
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
-rw-r--r--ChangeLog8
-rw-r--r--Makefile.in18
-rw-r--r--configure.in4
-rw-r--r--lisp/loadup.el4
-rw-r--r--nt/ChangeLog4
-rw-r--r--nt/paths.h5
-rw-r--r--src/ChangeLog7
-rw-r--r--src/epaths.in20
-rw-r--r--src/lread.c237
9 files changed, 171 insertions, 136 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c568a8c66..db3dc32410 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/Makefile.in b/Makefile.in
index fb2530d13d..0900bd1946 100644
--- a/Makefile.in
+++ b/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}";' \
diff --git a/configure.in b/configure.in
index 5c38b041de..20b4cf2d59 100644
--- a/configure.in
+++ b/configure.in
@@ -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)
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 3568171897..11e5f1e583 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -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")
diff --git a/nt/ChangeLog b/nt/ChangeLog
index 6b0785ad25..b3bf4a47f0 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -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):
diff --git a/nt/paths.h b/nt/paths.h
index 5b8bcb4e26..d3a41e3c54 100644
--- a/nt/paths.h
+++ b/nt/paths.h
@@ -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
diff --git a/src/ChangeLog b/src/ChangeLog
index b79319a70f..2391a9b702 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -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.
diff --git a/src/epaths.in b/src/epaths.in
index 17cb65a323..705fe3aab1 100644
--- a/src/epaths.in
+++ b/src/epaths.in
@@ -19,16 +19,26 @@ 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.
+*/
+#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_LOADSEARCH "/usr/local/share/emacs/lisp"
+#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
diff --git a/src/lread.c b/src/lread.c
index 2cd203da5b..7a0b20880e 100644
--- a/src/lread.c
+++ b/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;
-
- /* 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;
- }
-
- 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 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 (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
- {
- Lisp_Object tem2;
-
- 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);
-
- if (NILP (Fmember (tem, Vload_path)))
- Vload_path = Fcons (tem, Vload_path);
-
- tem = Fexpand_file_name (build_string ("leim"),
- Vsource_directory);
-
- 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 (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 */
+ Lisp_Object tem, tem1;
+
+ /* 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 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 (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
+ {
+ Lisp_Object tem2;
+
+ 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);
+
+ if (NILP (Fmember (tem, Vload_path)))
+ Vload_path = Fcons (tem, Vload_path);
+
+ tem = Fexpand_file_name (build_string ("leim"),
+ Vsource_directory);
+
+ 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 (NILP (Fmember (tem, Vload_path)))
+ Vload_path = Fcons (tem, Vload_path);
+ }
+ }
+ } /* Vinstallation_directory != Vsource_directory */
+
+ } /* 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 */
{