+
+(defvar srcdir (or (getenv "srcdir") "."))
+
+(defun my-getenv (str)
+ (let ((val (getenv str)))
+ (if (equal val "no") nil val)))
+
+(if (my-getenv "lispdir")
+ (push (my-getenv "lispdir") load-path))
+
+(push (or (my-getenv "URLDIR") (expand-file-name "../../url/lisp/" srcdir))
+ load-path)
+
+(push (or (my-getenv "W3DIR") (expand-file-name "../../w3/lisp/" srcdir))
+ load-path)
+
+;(push "/usr/share/emacs/site-lisp" load-path)
+
+(unless (featurep 'xemacs)
+ (define-compiler-macro merge (&whole form type seq1 seq2 pred &rest keys)
+ (if (and (fboundp 'merge)
+ (subrp (symbol-function 'merge)))
+ form
+ `(let ((type ,type)
+ (seq1 ,seq1)
+ (seq2 ,seq2)
+ (pred ,pred))
+ (or (listp seq1) (setq seq1 (append seq1 nil)))
+ (or (listp seq2) (setq seq2 (append seq2 nil)))
+ (let ((res nil))
+ (while (and seq1 seq2)
+ (if (funcall pred (car seq2) (car seq1))
+ (push (pop seq2) res)
+ (push (pop seq1) res)))
+ (let ((x (nconc (nreverse res) seq1 seq2)))
+ (cond ((eq type 'list) (if (listp x) x (append x nil)))
+ ((eq type 'vector) (if (vectorp x) x (vconcat x)))
+ ((eq type 'string) (if (stringp x) x (concat x)))
+ ((eq type 'array) (if (arrayp x) x (vconcat x)))
+ ((and (eq type 'character) (stringp x) (= (length x) 1))
+ (aref x 0))
+ ((and (eq type 'character) (symbolp x))
+ (aref (symbol-name x) 0))
+ ((eq type 'float) (float x))
+ ((typep x type) x)
+ (t (error "Can't coerce %s to type %s" x type))))))))
+
+ (define-compiler-macro copy-list (&whole form list)
+ (if (and (fboundp 'copy-list)
+ (subrp (symbol-function 'copy-list)))
+ form
+ `(let ((list ,list))
+ (if (consp list)
+ (let ((res nil))
+ (while (consp list) (push (pop list) res))
+ (prog1 (nreverse res) (setcdr res list)))
+ (car list)))))
+
+ (define-compiler-macro remove (&whole form item seq)
+ (if (>= emacs-major-version 21)
+ form
+ `(delete ,item (copy-sequence ,seq)))))
+
+;; If we are building w3 in a different directory than the source
+;; directory, we must read *.el from source directory and write *.elc
+;; into the building directory. For that, we define this function
+;; before loading bytecomp. Bytecomp doesn't overwrite this function.
+(defun byte-compile-dest-file (filename)
+ "Convert an Emacs Lisp source file name to a compiled file name.
+ In addition, remove directory name part from FILENAME."
+ (setq filename (byte-compiler-base-file-name filename))
+ (setq filename (file-name-sans-versions filename))
+ (setq filename (file-name-nondirectory filename))
+ (if (memq system-type '(win32 w32 mswindows windows-nt))
+ (setq filename (downcase filename)))
+ (cond ((eq system-type 'vax-vms)
+ (concat (substring filename 0 (string-match ";" filename)) "c"))
+ ((string-match emacs-lisp-file-regexp filename)
+ (concat (substring filename 0 (match-beginning 0)) ".elc"))
+ (t (concat filename ".elc"))))
+
+(require 'bytecomp)
+;; To avoid having defsubsts and inlines happen.
+;(if (featurep 'xemacs)
+; (require 'byte-optimize)
+; (require 'byte-opt))
+;(defun byte-optimize-inline-handler (form)
+; "byte-optimize-handler for the `inline' special-form."
+; (cons 'progn (cdr form)))
+;(defalias 'byte-compile-file-form-defsubst 'byte-compile-file-form-defun)
+
+(push srcdir load-path)
+(load (expand-file-name "lpath.el" srcdir) nil t)