From 0224bf74b28fea8cc64e80390b0210e3909dd81b Mon Sep 17 00:00:00 2001
From: Glenn Morris <rgm@gnu.org>
Date: Mon, 30 Jun 2014 14:26:34 -0400
Subject: [PATCH] Get rid of the AUTOGEN_VCS variable in lisp/Makefile

* lisp/emacs-lisp/autoload.el (autoload-ensure-writable): New variable.
(autoload-ensure-default-file): Maybe make existing output writable.

* lisp/Makefile.in (AUTOGEN_VCS): Remove.
(autoloads): Use autoload-ensure-writable rather than AUTOGEN_VCS.
---
 lisp/ChangeLog              |  7 +++++++
 lisp/Makefile.in            | 14 +-------------
 lisp/emacs-lisp/autoload.el | 21 +++++++++++++++++++--
 3 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index cbf8329d583..877560e5f62 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
+2014-06-30  Glenn Morris  <rgm@gnu.org>
+
+	* emacs-lisp/autoload.el (autoload-ensure-writable): New variable.
+	(autoload-ensure-default-file): Maybe make existing output writable.
+	* Makefile.in (AUTOGEN_VCS): Remove.
+	(autoloads): Use autoload-ensure-writable rather than AUTOGEN_VCS.
+
 2014-06-30  Fabián Ezequiel Gallina  <fgallina@gnu.org>
 
 	* emacs-lisp/subr-x.el (string-reverse): Use `reverse'.
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index 45a964b0d70..eba63666ddb 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -70,17 +70,6 @@ AUTOGENEL = loaddefs.el \
 	cedet/srecode/loaddefs.el \
 	org/org-loaddefs.el
 
-# Versioned files that are the value of someone's `generated-autoload-file'.
-AUTOGEN_VCS = \
-	ps-print.el \
-	obsolete/tpu-edt.el \
-	mail/rmail.el \
-	dired.el \
-	ibuffer.el \
-	htmlfontify.el \
-	emacs-lisp/eieio.el \
-	textmodes/reftex.el
-
 # Value of max-lisp-eval-depth when compiling initially.
 # During bootstrapping the byte-compiler is run interpreted when compiling
 # itself, and uses more stack than usual.
@@ -182,7 +171,6 @@ finder-data:
 	  --eval '(setq generated-finder-keywords-file (unmsys--file-name "$(srcdir)/finder-inf.el"))' \
 	  -f finder-compile-keywords-make-dist $$wins
 
-# The chmod +w is to handle env var CVSREAD=1.
 # Use expand-file-name rather than $abs_scrdir so that Emacs does not
 # get confused when it compares file-names for equality.
 #
@@ -190,10 +178,10 @@ finder-data:
 # If you want to allow autoloads in such files, remove that,
 # and make this depend on leim.
 autoloads: $(LOADDEFS)
-	cd $(lisp) && chmod +w $(AUTOGEN_VCS)
 	$(setwins_almost); \
 	echo Directories: $$wins; \
 	$(emacs) -l autoload \
+	    --eval '(setq autoload-ensure-writable t)' \
 	    --eval '(setq autoload-builtin-package-versions t)' \
 	    --eval '(setq generated-autoload-file (expand-file-name (unmsys--file-name "$(srcdir)/loaddefs.el")))' \
 	    -f batch-update-autoloads $$wins
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index 361e8fa7c68..38956df66de 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -351,9 +351,26 @@ not be relied upon."
 	    ";;; " basename
 	    " ends here\n")))
 
+(defvar autoload-ensure-writable nil
+  "Non-nil means `autoload-ensure-default-file' makes existing file writable.")
+;; Just in case someone tries to get you to overwrite a file that you
+;; don't want to.
+;;;###autoload
+(put 'autoload-ensure-writable 'risky-local-variable t)
+
 (defun autoload-ensure-default-file (file)
-  "Make sure that the autoload file FILE exists and if not create it."
-  (unless (file-exists-p file)
+  "Make sure that the autoload file FILE exists, creating it if needed.
+If the file already exists and `autoload-ensure-writable' is non-nil,
+make it writable."
+  (if (file-exists-p file)
+      ;; Probably pointless, but replaces the old AUTOGEN_VCS in lisp/Makefile,
+      ;; which was designed to handle CVSREAD=1 and equivalent.
+      (and autoload-ensure-writable
+	   (let ((modes (file-modes file)))
+	     (if (zerop (logand modes #o0200))
+		 ;; Ignore any errors here, and let subsequent attempts
+		 ;; to write the file raise any real error.
+		 (ignore-errors (set-file-modes file (logior modes #o0200))))))
     (write-region (autoload-rubric file) nil file))
   file)
 
-- 
2.39.5