[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: A flaw in current emacsen package setup?



Manoj Srivastava <srivasta@debian.org> writes:

> I have noticed a problem recently in in the way packages modify the
> load path.

I've finally had a chance to work on this.  I looked at the
add-after-local function, but thought that we ought to scan the whole
path so we can make sure to insert elements after the final occurrence
of a /usr/local/ prefixed element.

Here's the function that all add-on packages would be required to
call.  It will be a part of emacsen-common and available at startup,
unless --no-site-file is specified.

  (defun debian-pkg-add-load-path-item (item)
    "Takes a path item (a string) and adds it to load path in the correct
  position for an add-on package, before the emacs system directories,
  but after any /usr/local/ directories."

    (let ((pos 0)
          (last-local-pos nil)
          (lp-rest load-path))

      ;; Find the last /usr/local/ element.
      (while (not (null lp-rest))
        (if (string-match "^/usr/local" (car lp-rest))
            (setq last-local-pos pos))
        (setq pos (+ pos 1))
        (setq lp-rest (cdr lp-rest)))

      (if (not last-local-pos)
          (error "No /usr/local/ prefixed paths in load-path"))

      (let ((result '())
            (pos 0))
        (dolist (elt load-path (nreverse result))
          (setq result (cons elt result))
          (if (= pos last-local-pos)
              (setq result (cons item result)))
          (setq pos (+ pos 1))))))

If no one has any serious objections to this, I'll upload a new
version of emacsen-common shortly containing this function and the
requisite changes to policy.

-- 
Rob Browning
rlb @defaultvalue.org, @linuxdevel.com, and @debian.org
Previously @cs.utexas.edu
GPG=1C58 8B2C FB5E 3F64 EA5C  64AE 78FE E5FE F0CB A0AD



Reply to: