Update copyright year to 2016
[gnus] / lisp / dgnushack.el
index 384db33..e276756 100644 (file)
@@ -1,7 +1,5 @@
 ;;; dgnushack.el --- a hack to set the load path for byte-compiling
-;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003,
-;; 2004, 2005, 2006, 2007, 2008, 2009, 2010
-;;        Free Software Foundation, Inc.
+;; Copyright (C) 1994-2016 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Version: 4.19
@@ -20,9 +18,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 
 (defvar dgnushack-default-load-path (copy-sequence load-path))
 
+(when (featurep 'xemacs)
+  (defmacro declare-function (fn file &optional arglist fileonly)
+    (unless (fboundp fn) (autoload fn file))
+    nil))
+
 (defalias 'facep 'ignore)
 
 (require 'cl)
 (require 'iswitchb)
 
+(condition-case nil
+    (require 'org-entities)
+  (error nil))
+
 (defvar srcdir (or (getenv "srcdir") "."))
 (defvar loaddir (and load-file-name (file-name-directory load-file-name)))
 
 (if (my-getenv "lispdir")
     (push (my-getenv "lispdir") load-path))
 
-(push (or (my-getenv "URLDIR") (expand-file-name "../../url/lisp/" loaddir))
-      load-path)
-
-(push (or (my-getenv "W3DIR") (expand-file-name "../../w3/lisp/" loaddir))
-      load-path)
-
 ;(push "/usr/share/emacs/site-lisp" load-path)
 
-;; If we are building w3 in a different directory than the source
+;; If we are building Gnus 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.
 (defalias 'efs-re-read-dir 'ignore)
 (defalias 'ange-ftp-re-read-dir 'ignore)
 (defalias 'define-mail-user-agent 'ignore)
+(defalias 'debbugs-gnu-summary-mode 'ignore)
+(defvar debbugs-gnu-bug-number nil)
 
 (eval-and-compile
   (unless (featurep 'xemacs)
 
 (eval-and-compile
   (when (featurep 'xemacs)
+    (defvar window-point-insertion-type nil)
     (unless (fboundp 'defadvice)
       (autoload 'defadvice "advice" nil nil 'macro))
+    (unless (boundp 'help-echo-owns-message)
+      (defvar help-echo-owns-message))
+    (unless (boundp 'gnus-registry-enabled)
+      (defvar gnus-registry-enabled nil))
+    (unless (boundp 'mail-dont-reply-to-names)
+      (defvar mail-dont-reply-to-names nil))
+    (unless (fboundp 'url-retrieve-synchronously)
+      (defalias 'url-retrieve-synchronously 'url-retrieve))
+    (unless (fboundp 'url-queue-retrieve)
+      (defun url-queue-retrieve (url callback &optional cbargs silent
+                                    inhibit-cookies)
+       (url-retrieve url callback cbargs)))
+    (unless (boundp 'w3-configuration-directory)
+      (setq w3-configuration-directory "~/.w3/"))
     (autoload 'Info-directory "info" nil t)
     (autoload 'Info-index "info" nil t)
     (autoload 'Info-index-next "info" nil t)
     (autoload 'customize-set-variable "cus-edit" nil t)
     (autoload 'customize-variable "cus-edit" nil t)
     (autoload 'debug "debug" nil t)
+    (autoload 'sha1 "sha1")
     (if (featurep 'mule)
        (unless (locate-library "mule-ccl")
          (autoload 'define-ccl-program "ccl" nil nil 'macro))
     (autoload 'mail-fetch-field "mail-utils")
     (autoload 'make-annotation "annotations")
     (autoload 'make-display-table "disp-table")
-    (autoload 'pgg-snarf-keys-region "pgg" nil t)
     (autoload 'pp "pp")
     (autoload 'ps-despool "ps-print" nil t)
     (autoload 'ps-spool-buffer "ps-print" nil t)
     (autoload 'read-passwd "passwd")
     (autoload 'regexp-opt "regexp-opt")
     (autoload 'reporter-submit-bug-report "reporter")
+    (if (condition-case nil
+           (progn
+             (require 'rot13)
+             (not (fboundp 'rot13-string)))
+         (error nil))
+       (defmacro rot13-string (string)
+         "Return ROT13 encryption of STRING."
+         `(let ((string ,string))
+            (with-temp-buffer
+              (insert string)
+              (translate-region (point-min) (point-max) ,rot13-display-table)
+              (buffer-string)))))
     (if (and (emacs-version>= 21 5)
             (not (featurep 'sxemacs)))
        (autoload 'setenv "process" nil t)
     (autoload 'toggle-truncate-lines "view-less" nil t)
     (autoload 'trace-function-background "trace" nil t)
     (autoload 'unmorse-region "morse" nil t)
-    (autoload 'w3-do-setup "w3")
-    (autoload 'w3-prepare-buffer "w3-display")
-    (autoload 'w3-region "w3-display" nil t)
     (defalias 'frame-char-height 'frame-height)
     (defalias 'frame-char-width 'frame-width)
     (defalias 'frame-parameter 'frame-property)
-    (defalias 'make-overlay 'ignore)
-    (defalias 'overlay-end 'ignore)
-    (defalias 'overlay-get 'ignore)
-    (defalias 'overlay-put 'ignore)
-    (defalias 'overlay-start 'ignore)
-    (defalias 'overlays-in 'ignore)
     (defalias 'replace-dehighlight 'ignore)
     (defalias 'replace-highlight 'ignore)
-    (defalias 'w3-coding-system-for-mime-charset 'ignore)))
+    (defalias 'gnutls-available-p 'ignore)
+    (defvar timer-list nil)
+    (defvar scroll-margin 0)
+    (dolist (fn '(copy-overlay
+                 delete-overlay make-overlay move-overlay next-overlay-change
+                 overlay-buffer overlay-end overlay-get overlay-lists
+                 overlay-properties overlay-put overlay-recenter overlay-start
+                 overlayp overlays-at overlays-in previous-overlay-change
+                 remove-overlays))
+      (autoload fn "overlay"))))
 
 (defun dgnushack-emacs-compile-defcustom-p ()
   "Return non-nil if Emacs byte compiles `defcustom' forms.
@@ -232,7 +260,8 @@ in `defcustom' forms."
            (search-forward " 'foo '(byte-code " nil t))
        (kill-buffer outbuf)))))
 
-(when (dgnushack-emacs-compile-defcustom-p)
+(when (and (featurep 'xemacs)
+          (dgnushack-emacs-compile-defcustom-p))
   (maybe-fbind '(defined-colors face-attribute))
   (maybe-bind '(idna-program installation-directory)))
 
@@ -243,9 +272,17 @@ in `defcustom' forms."
       (when (and (eq last (third form))
                 (consp last)
                 (eq 'mapcar (car last))
-                (equal (nth 1 form) ''nconc))
+                (member (nth 1 form) '('nconc #'nconc)))
        (setq form (cons 'mapcan (cdr last)))))))
 
+(if (featurep 'emacs)
+    (defun dgnushack-compile-file (file)
+      "Byte-compile FILE after reporting that it's being compiled."
+      (message "Compiling %s..." (file-name-nondirectory file))
+      ;; The Emacs 25 version of it doesn't say much.
+      (byte-compile-file file))
+  (defalias 'dgnushack-compile-file 'byte-compile-file))
+
 (defun dgnushack-compile-verbosely ()
   "Call dgnushack-compile with warnings ENABLED.  If you are compiling
 patches to gnus, you should consider modifying make.bat to call
@@ -253,12 +290,19 @@ dgnushack-compile-verbosely.  All other users should continue to use
 dgnushack-compile."
   (dgnushack-compile t))
 
-(defun dgnushack-compile (&optional warn)
+(defun dgnushack-compile-error-on-warn ()
+  "Call dgnushack-compile with minimal warnings, but with error-on-warn ENABLED.
+This means that every warning will be reported as an error."
+  (unless (dgnushack-compile nil t)
+    (error "Error during byte compilation (warnings were reported as errors!).")))
+
+(defun dgnushack-compile (&optional warn error-on-warn)
   ;;(setq byte-compile-dynamic t)
   (unless warn
     (setq byte-compile-warnings
          '(free-vars unresolved callargs redefine suspicious)))
   (let ((files (directory-files srcdir nil "^[^=].*\\.el$"))
+       (compilesuccess t)
        ;;(byte-compile-generate-call-tree t)
        file elc)
     ;; Avoid barfing (from gnus-xmas) because the etc directory is not yet
@@ -269,12 +313,6 @@ dgnushack-compile."
       (setq files (delete file files)))
     (when (featurep 'base64)
       (setq files (delete "base64.el" files)))
-    (condition-case code
-       (require 'w3-parse)
-      (error
-       (message "No w3: %s %s" (cadr code) (or (locate-library "w3-parse") ""))
-       (dolist (file '("webmail.el" "nnwfm.el"))
-        (setq files (delete file files)))))
     (condition-case code
        ;; Under XEmacs 21.4 this loads easy-mmode.elc that provides
        ;; the Emacs functions `propertize' and `replace-regexp-in-string'.
@@ -296,8 +334,17 @@ dgnushack-compile."
                 ;; lpath.el binds it.
                 (not (eq (symbol-function 'libxml-parse-html-region)
                          'ignore)))
-      (setq files (delete "shr.el" files)))
-
+      (dolist (file '("color.el"))
+       (setq files (delete file files))))
+    (unless (locate-library "epg")
+      (setq files (delete "plstore.el" files)))
+    ;; Temporary code until we fix pcase and defmethod stuff.
+    (when (or (featurep 'xemacs)
+             (or (< emacs-major-version 24)
+                 (< emacs-minor-version 3)))
+      (setq files (delete "gnus-icalendar.el" files))
+      ;; Temporary during development.
+      (setq files (delete "gnus-cloud.el" files)))
     (dolist (file files)
       (setq file (expand-file-name file srcdir))
       (when (and (file-exists-p
@@ -310,8 +357,14 @@ dgnushack-compile."
       (when (or (not (file-exists-p
                      (setq elc (concat (file-name-nondirectory file) "c"))))
                (file-newer-than-file-p file elc))
-       (ignore-errors
-         (byte-compile-file file))))))
+       (if error-on-warn
+           (let ((byte-compile-error-on-warn t))
+             (unless (ignore-errors
+                       (dgnushack-compile-file file))
+               (setq compilesuccess nil)))
+         (ignore-errors
+           (dgnushack-compile-file file)))))
+    compilesuccess))
 
 (defun dgnushack-recompile ()
   (require 'gnus)
@@ -506,4 +559,47 @@ or remove them using `make remove-installed-shadows'.\n\n"))))))))
              (error (princ "failed\n")))))
        (setq path (cdr path))))))
 
+(unless (fboundp 'with-demoted-errors)
+  (defmacro with-demoted-errors (&rest body)
+    "Run BODY and demote any errors to simple messages.
+If `debug-on-error' is non-nil, run BODY without catching its errors.
+This is to be used around code which is not expected to signal an error
+but which should be robust in the unexpected case that an error is signaled."
+    (declare (debug t) (indent 0))
+    (let ((err (make-symbol "err")))
+      `(condition-case ,err
+          (progn ,@body)
+        (error (message "Error: %S" ,err) nil)))))
+
+;; `define-obsolete-function-alias' and `define-obsolete-variable-alias'
+;; take only two arguments in XEmacs:
+;; (define-obsolete-function-alias OLDFUN NEWFUN)
+;; (define-obsolete-variable-alias OLDVAR NEWVAR)
+(condition-case nil
+    (define-obsolete-function-alias
+      'dgnushack-obsolete-name 'dgnushack-current-name "0")
+  (wrong-number-of-arguments
+   (defadvice define-obsolete-function-alias (around ignore-rest-args
+                                                    (oldfun newfun &rest args)
+                                                    activate)
+     "Ignore arguments other than the 1st and the 2nd ones."
+     ad-do-it)
+   (put 'define-obsolete-function-alias 'byte-optimizer
+       (lambda (form)
+         (setcdr (nthcdr 2 form) nil)
+         form))))
+(condition-case nil
+    (define-obsolete-variable-alias
+      'dgnushack-obsolete-name 'dgnushack-current-name "0")
+  (wrong-number-of-arguments
+   (defadvice define-obsolete-variable-alias (around ignore-rest-args
+                                                    (oldvar newvar &rest args)
+                                                    activate)
+     "Ignore arguments other than the 1st and the 2nd ones."
+     ad-do-it)
+   (put 'define-obsolete-variable-alias 'byte-optimizer
+       (lambda (form)
+         (setcdr (nthcdr 2 form) nil)
+         form))))
+
 ;;; dgnushack.el ends here