From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2790 invoked by alias); 17 Apr 2011 14:01:08 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 29008 Received: (qmail 15210 invoked from network); 17 Apr 2011 14:01:01 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.1 Received-SPF: none (ns1.primenet.com.au: domain at bewatermyfriend.org does not designate permitted sender hosts) From: Frank Terbeck To: zsh-workers@zsh.org Subject: PATCH: Add `--enable-additional-fpath' configure option Date: Sun, 17 Apr 2011 15:49:36 +0200 Message-Id: <1303048176-10073-1-git-send-email-ft@bewatermyfriend.org> X-Mailer: git-send-email 1.7.4.1.140.g89781 X-Df-Sender: 430444 We (as in the debian zsh maintainer team) got a request for adding additional directories to `$fpath' for people's packages to drop function files into. We do have "/usr/local/share/zsh/site-functions", but "/usr/local" should not be touched by debian packages. We were first contemplated to add something reasonable to the global zshenv file. That would work in almost all cases, except for when zsh is started in sh-mode. With this, we can do: % ./configure --enable-additional-fpath=/usr/share/zsh/vendor-functions ...and have every shell get the right initial fpath. `setupvals()' is a little crowded with #ifdefs, but I think I got it right... It adds the added paths right after the site-functions entry, so a local admin could still supersede any function file if he'd chose to do so. Documentation update in INSTALL included. Comments? I won't be committing this before I get ACKs. :) Regards, Frank --- Config/defs.mk.in | 3 +++ INSTALL | 7 +++++++ Src/init.c | 21 +++++++++++++++++++-- Src/zsh.mdd | 4 ++++ configure.ac | 13 +++++++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Config/defs.mk.in b/Config/defs.mk.in index cd3afa6..58ef110 100644 --- a/Config/defs.mk.in +++ b/Config/defs.mk.in @@ -86,6 +86,9 @@ INSTALL_DATA = @INSTALL_DATA@ # variables used in determining what to install FUNCTIONS_SUBDIRS = @FUNCTIONS_SUBDIRS@ +# Additional fpath entries (eg. for vendor specific directories). +additionalfpath = @additionalfpath@ + # flags passed to recursive makes in subdirectories MAKEDEFS = \ prefix='$(prefix)' exec_prefix='$(exec_prefix)' bindir='$(bindir)' \ diff --git a/INSTALL b/INSTALL index 9829ea3..fe03c8d 100644 --- a/INSTALL +++ b/INSTALL @@ -472,6 +472,12 @@ $fpath array on shell startup. This directory will not be affected by `make uninstall' or `make uninstall.fns', although the version-specific directory and its contents will be deleted. +The --enable-additional-fpath option may be used to add arbitrary +directories to the shell's default $fpath array. This may be useful to +have vendor specific function directories available for vendor specific +addons. You may add more than one directory this way by listing them with +the option separated by commas. + Function depth -------------- @@ -593,6 +599,7 @@ fndir=directory # the directory where shell functions will go # [DATADIR/zsh/VERSION/functions] site-fndir=directory # the directory where site-specific functions can go # [DATADIR/zsh/site-functions] +additional-path # add directories to default function path [] function-subdirs # if functions will be installed into subdirectories [no] dynamic # allow dynamically loaded binary modules [yes] largefile # allow configure check for large files [yes] diff --git a/Src/init.c b/Src/init.c index aa052d8..0fcecef 100644 --- a/Src/init.c +++ b/Src/init.c @@ -676,11 +676,15 @@ setupvals(void) struct timezone dummy_tz; char *ptr; int i, j; -#if defined(SITEFPATH_DIR) || defined(FPATH_DIR) +#if defined(SITEFPATH_DIR) || defined(FPATH_DIR) || defined (ADDITIONAL_FPATH) char **fpathptr; # if defined(FPATH_DIR) && defined(FPATH_SUBDIRS) char *fpath_subdirs[] = FPATH_SUBDIRS; # endif +# if defined(ADDITIONAL_FPATH) + char *more_fndirs[] = ADDITIONAL_FPATH; + int more_fndirs_len; +# endif # ifdef SITEFPATH_DIR int fpathlen = 1; # else @@ -764,7 +768,7 @@ setupvals(void) manpath = mkarray(NULL); fignore = mkarray(NULL); -#if defined(SITEFPATH_DIR) || defined(FPATH_DIR) +#if defined(SITEFPATH_DIR) || defined(FPATH_DIR) || defined(ADDITIONAL_FPATH) # ifdef FPATH_DIR # ifdef FPATH_SUBDIRS fpathlen += sizeof(fpath_subdirs)/sizeof(char *); @@ -772,15 +776,28 @@ setupvals(void) fpathlen++; # endif # endif +# if defined(ADDITIONAL_FPATH) + more_fndirs_len = sizeof(more_fndirs)/sizeof(char *); + fpathlen += more_fndirs_len; +# endif fpath = fpathptr = (char **)zalloc((fpathlen+1)*sizeof(char *)); # ifdef SITEFPATH_DIR *fpathptr++ = ztrdup(SITEFPATH_DIR); fpathlen--; # endif +# if defined(ADDITIONAL_FPATH) + for (j = 0; j < more_fndirs_len; j++) + *fpathptr++ = ztrdup(more_fndirs[j]); +# endif # ifdef FPATH_DIR # ifdef FPATH_SUBDIRS +# ifdef ADDITIONAL_FPATH + for (j = more_fndirs_len; j < fpathlen; j++) + *fpathptr++ = tricat(FPATH_DIR, "/", fpath_subdirs[j - more_fndirs_len]); +# else for (j = 0; j < fpathlen; j++) *fpathptr++ = tricat(FPATH_DIR, "/", fpath_subdirs[j]); +#endif # else *fpathptr++ = ztrdup(FPATH_DIR); # endif diff --git a/Src/zsh.mdd b/Src/zsh.mdd index 537aa4d..c420bcc 100644 --- a/Src/zsh.mdd +++ b/Src/zsh.mdd @@ -86,6 +86,10 @@ zshpaths.h: Makemod $(CONFIG_INCS) >>zshpaths.h.tmp; \ fi; \ fi + @if test x$(additionalfpath) != x; then \ + fpath_tmp="`echo $(additionalfpath) | sed -e 's:,:\", \":'`"; \ + echo "#define ADDITIONAL_FPATH { \"$$fpath_tmp\" }" >> zshpaths.h.tmp; \ + fi @if cmp -s zshpaths.h zshpaths.h.tmp; then \ rm -f zshpaths.h.tmp; \ echo "\`zshpaths.h' is up to date." ; \ diff --git a/configure.ac b/configure.ac index fca1dd6..116de2e 100644 --- a/configure.ac +++ b/configure.ac @@ -276,6 +276,16 @@ else FUNCTIONS_SUBDIRS=no fi +ifdef([additionalfpath],[undefine([additionalfpath])])dnl +AC_ARG_ENABLE(additional-fpath, +AC_HELP_STRING([--enable-additional-fpath=DIR], [add directories to default function path]), +[if test x$enableval = xyes; then + additionalfpath="" +else + additionalfpath="${enableval}" +fi], [additionalfpath=""]) + +AC_SUBST(additionalfpath)dnl AC_SUBST(fndir)dnl AC_SUBST(sitefndir)dnl AC_SUBST(FUNCTIONS_SUBDIRS)dnl @@ -3088,6 +3098,9 @@ info install path : ${zshinfo}" if test "$zshfndir" != no; then echo "functions install path : ${zshfndir}" fi +if test "x$additionalfpath" != x; then + echo "additional fpath entries : ${additionalfpath}" +fi echo "See config.modules for installed modules and functions. " -- 1.7.4.1.140.g89781