From: Glenn Morris Date: Sat, 30 Jun 2012 21:10:50 +0000 (-0700) Subject: Make --no-site-lisp work for --enable-locallisppath elements X-Git-Tag: emacs-24.2.90~1199^2~271 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ca26824cb07d494481a14fea1642d38ad6c2a9e4;p=emacs.git 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 --- diff --git a/ChangeLog b/ChangeLog index 4c568a8c664..db3dc32410d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-06-30 Glenn Morris + + * 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 * configure.in: Fix previous change. Remove --enable-asserts. diff --git a/Makefile.in b/Makefile.in index fb2530d13df..0900bd1946f 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 5c38b041dec..20b4cf2d593 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 35681718976..11e5f1e5833 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 6b0785ad25e..b3bf4a47f06 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog @@ -1,3 +1,7 @@ +2012-06-30 Glenn Morris + + * paths.h (PATH_SITELOADSEARCH): New. + 2012-06-28 Juanma Barranquero * nmake.defs (CHECKING_CFLAGS): diff --git a/nt/paths.h b/nt/paths.h index 5b8bcb4e264..d3a41e3c541 100644 --- a/nt/paths.h +++ b/nt/paths.h @@ -20,10 +20,13 @@ along with GNU Emacs. If not, see . */ /* 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 b79319a70ff..2391a9b7022 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2012-06-30 Glenn Morris + + * 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 * w32proc.c (sys_select): Accept and ignore one more argument. diff --git a/src/epaths.in b/src/epaths.in index 17cb65a3234..705fe3aab1b 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 . */ -/* 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: - /emacs/VERSION/site-lisp:/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: /emacs/VERSION/lisp:/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 + /emacs/VERSION/site-lisp:/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 2cd203da5b9..7a0b20880e9 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 */ {