From 29e382bebad0214fcb6eae0ae8b563fc70bb785b Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Sun, 9 Dec 2012 17:10:47 +0100 Subject: [PATCH] re-introduce org-install.el * lisp/org-install.el: Delete from version control, is autogenerated again. An empty file should be provided in Emacs and for ELPA as before since it is not used there. * .gitignore: Ignore org-install.el again, ignore org-autoloads.el (for ELPA). * mk/org-fixup.el (org-make-org-loaddefs, org-make-autoloads), mk/default.mk: Rename org-make-org-loaddefs to org-make-org-autoloads. * mk/org-fixup.el (org--autoload-rubric, org--update-file-autoloads, org--update-directory-autoloads): Internal functions that implement functionality missing from older Emacsen, especially for XEmacs. The implementations drop the generality (and complexity) of the original functions and are only useable in the context of the Org build system. * mk/org-fixup.el (org-make-org-autolods): Arrange for org-install to collect the "first-level" autoload definitions for standalone Org (like loaddefs.el for Emacs and org-autoloads.el for package manager). The "second-level" autoloads in org-loaddefs.el will be identical for all installations. The "first-level" autoload definitions are automatically loaded by Emacs or package manager, respectively; for standalone Org, the user has to "(require 'org-install)", as has been customary. * mk/org-install-empty.el: New file, provide compatibility with standalone Org for ELPA and Emacs integration. * mk/server.mk: Drop in compatibility org-install.el before creating the archive. * lisp/Makefile: Arrange for two autoload files to be produced and remove backup files for these. * mk/targets.mk, lisp/Makefile: Rename MAKE_ORG_INSTALL to MAKE_ORG_AUTOLOADS. * lisp/org.el (org-reload): Do not reload org-install.org-install part2 Rationale: The introduction of org-loaddefs has made the standalone version of Org quite different from the versions that are integrated in Emacs or installed via ELPA. To get the autoload definitions, it is necessary to load org-loaddefs for a standalone version of Org, while it is an error to do so otherwise (since the first-level autoload definitions can not be loaded that way and may not be compatible with the Org installation that provides org-loaddefs). Since there is no default place for the "first-level" autoload definitions to go in a standalone installation, this change re-introduces org-install.el to be that place. Since both Emacs and ELPA provide such a place, org-install is an empty file for these installations, provided for backward (and forward) compatibility with a standalone Org installation. --- .gitignore | 6 +++-- lisp/Makefile | 12 ++++----- lisp/org-install.el | 15 ----------- lisp/org.el | 2 +- mk/default.mk | 4 +-- mk/org-fixup.el | 71 ++++++++++++++++++++++++++++++++++++------------- mk/org-install-empty.el | 21 +++++++++++++++ mk/server.mk | 2 ++ mk/targets.mk | 2 +- 9 files changed, 88 insertions(+), 47 deletions(-) delete mode 100644 lisp/org-install.el create mode 100644 mk/org-install-empty.el diff --git a/.gitignore b/.gitignore index a9d73ad..4060186 100644 --- a/.gitignore +++ b/.gitignore @@ -30,8 +30,10 @@ orgcard_letter.tex orgcard.txt org -org-loaddefs.el -org-version.el +lisp/org-autoloads.el +lisp/org-install.el +lisp/org-loaddefs.el +lisp/org-version.el doc/org-version.inc org-*.tar* orgplus-*.tar* diff --git a/lisp/Makefile b/lisp/Makefile index 0e10c23..5dae2d9 100644 --- a/lisp/Makefile +++ b/lisp/Makefile @@ -15,7 +15,7 @@ ifneq ($(ORG_ADD_CONTRIB),) endif LISPV := org-version.el -LISPI := org-loaddefs.el +LISPI := org-loaddefs.el org-install.el LISPA := $(LISPV) $(LISPI) LISPB := $(LISPA:%el=%elc) org-install.elc LISPF := $(filter-out $(LISPA),$(sort $(wildcard *.el) $(_ORG_ADD_EL_))) @@ -64,17 +64,15 @@ ifneq ($(ORG_ADD_CONTRIB),) $(CP) $(addprefix ../contrib/lisp/,$(_ORG_ADD_EL_)) . endif -autoloads: cleanauto addcontrib $(LISPI) $(LISPV) - $(LISPV): $(LISPF) @echo "org-version: $(ORGVERSION) ($(GITVERSION))" @$(RM) $(@) @$(MAKE_ORG_VERSION) -$(LISPI): $(LISPV) $(LISPF) - @echo "org-loaddefs: $(ORGVERSION) ($(GITVERSION))" - @$(RM) $(@) - @$(MAKE_ORG_INSTALL) +autoloads: cleanauto addcontrib $(LISPV) $(LISPF) + @echo "Autoload generation: $(ORGVERSION) ($(GITVERSION))" + @$(MAKE_ORG_AUTOLOADS) + @$(RM) $(LISPA:%=%~) install: compile $(LISPF) if [ ! -d $(DESTDIR)$(lispdir) ] ; then \ diff --git a/lisp/org-install.el b/lisp/org-install.el deleted file mode 100644 index aca019f..0000000 --- a/lisp/org-install.el +++ /dev/null @@ -1,15 +0,0 @@ -;;; org-install.el --- backward compatibility file for obsolete configuration -;; -;;; Code: -(warn "The file org-install is obsolete. -It is provided here so that (require 'org-install) does not -trigger an error for users with obsolete Emacs configuration. -You can safely remove (require 'org-install) from your config.") - -(provide 'org-install) - -;; Local Variables: -;; no-byte-compile: t -;; coding: utf-8 -;; End: -;;; org-install.el ends here diff --git a/lisp/org.el b/lisp/org.el index 3797e97..c5be3c5 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -20224,7 +20224,7 @@ (defun org-reload (&optional uncompiled) (list (if (featurep 'xemacs) "org-colview" "org-colview-xemacs") - "org" "org-loaddefs" "org-version")) + "org" "org-install" "org-loaddefs" "org-version")) "\\|")) (feats (delete-dups (mapcar 'file-name-sans-extension diff --git a/mk/default.mk b/mk/default.mk index dcd2947..d349ff6 100644 --- a/mk/default.mk +++ b/mk/default.mk @@ -82,10 +82,10 @@ BATCHL = $(BATCH) \ --eval '(add-to-list '"'"'load-path ".")' # How to generate org-loaddefs.el -MAKE_ORG_INSTALL = $(BATCHL) \ +MAKE_ORG_AUTOLOADS = $(BATCHL) \ --eval '(load "org-compat.el")' \ --eval '(load "../mk/org-fixup.el")' \ - --eval '(org-make-org-loaddefs)' + --eval '(org-make-org-autoloads)' # How to generate org-version.el MAKE_ORG_VERSION = $(BATCHL) \ diff --git a/mk/org-fixup.el b/mk/org-fixup.el index 7b59efb..4edc9e3 100644 --- a/mk/org-fixup.el +++ b/mk/org-fixup.el @@ -61,26 +61,59 @@ (defun org-make-org-version (org-release org-git-version odt-dir) (toggle-read-only 0) (write-file "org-version.el"))) -(defun org-make-org-loaddefs () - "Make the file org-loaddefs.el in the current directory. -This function is internally used by the build system and should -be used by foreign build systems or installers to produce this -file in the installation directory of org-mode. Org will not -work correctly if this file is not up-to-date." - (with-temp-buffer - (set-visited-file-name "org-loaddefs.el") - (insert ";;; org-loaddefs.el --- autogenerated file, do not edit\n;;\n;;; Code:\n") - (let ((files (directory-files default-directory nil "^\\(org\\|ob\\)\\(-.*\\)?\\.el$"))) - (mapc (lambda (f) (generate-file-autoloads f)) files)) - (insert "\f\n(provide 'org-loaddefs)\n") - (insert "\f\n;; Local Variables:\n;; version-control: never\n") - (insert ";; no-byte-compile: t\n;; no-update-autoloads: t\n") - (insert ";; coding: utf-8\n;; End:\n;;; org-loaddefs.el ends here\n") - (toggle-read-only 0) - (save-buffer))) +(defun org--autoload-rubric (feature) + "Return a string giving the appropriate autoload rubric for FEATURE." + (let ((file (concat feature ".el"))) + (if (functionp 'autoload-rubric) + (autoload-rubric file nil feature) + ;; fallback for older Emacsen + (concat + ";;; " file " --- autogenerated file, do not edit\n;;\n;;; Code:\n\n" + "\f\n(provide '" feature ")\n" + "\f\n;; Local Variables:\n;; version-control: never\n" + ";; no-byte-compile: t\n;; no-update-autoloads: t\n" + ";; coding: utf-8\n;; End:\n;;; " file " ends here\n")))) +(defun org--update-file-autoloads (file) + (let ((no-update-autoloads nil) + (generated-autoload-file (file-name-nondirectory generated-autoload-file))) + (find-file file) + (unless no-update-autoloads + (with-current-buffer generated-autoload-file + (goto-char (point-max))(forward-line -11) + (generate-file-autoloads file))) + (kill-buffer file))) + +(defun org--update-directory-autoloads (dir) + "Update autoload definitions for Lisp files in the directories DIR." + (if (functionp 'update-directory-autoloads) + (update-directory-autoloads dir) + ;; fallback for XEmacs + (defvar no-update-autoloads nil) + (find-file "org-install.el") + (find-file "org-loaddefs.el") + (let ((files (sort + (delq nil + (mapcar + (lambda (f) + (if (string-match "^org-\\(install\\|loaddefs\\).el" f) nil f)) + (directory-files dir nil "^\\(org\\|ob\\)\\(-.*\\)?\\.el$" 'nosort))) + 'string-lessp))) + (mapc (lambda (f) (org--update-file-autoloads f)) files)) + (with-current-buffer "org-install.el" (save-buffer)(kill-buffer "org-install.el")) + (with-current-buffer "org-loaddefs.el" (save-buffer)(kill-buffer "org-loaddefs.el")))) + +(defun org-make-org-autoloads () + "Create the autoload files in the current directory. +This function is internally used by the build system and can be +used by foreign build systems or installers. Org will not work +correctly if these files are not up-to-date." + (write-region (org--autoload-rubric "org-install") 'ignore "org-install.el") + (write-region (org--autoload-rubric "org-loaddefs") nil "org-loaddefs.el") + (let ((generated-autoload-file (expand-file-name "org-install.el" default-directory))) + (org--update-directory-autoloads (file-name-directory generated-autoload-file)))) (defun org-make-autoloads (&optional compile force) - "Make the files org-loaddefs.el and org-version.el in the install directory. + "Make the files org-install.el, org-loaddefs.el and org-version.el in the install directory. Finds the install directory by looking for library \"org\". Optionally byte-compile lisp files in the install directory or force re-compilation. This function is provided for easier @@ -96,7 +129,7 @@ (defun org-make-autoloads (&optional compile force) (cd dirlisp) (org-fixup) (org-make-org-version (org-release) (org-git-version) dirodt) - (org-make-org-loaddefs) + (org-make-org-autoloads) (when compile (byte-recompile-directory dirlisp 0 force))) (cd origin)))) diff --git a/mk/org-install-empty.el b/mk/org-install-empty.el new file mode 100644 index 0000000..81c2bea --- /dev/null +++ b/mk/org-install-empty.el @@ -0,0 +1,21 @@ +;;; org-install.el --- backward compatibility file +;; +;;; Code: + +;; This file contains the first-level extracted autoload definitions +;; in a standalone Org installation and need to be required from +;; startup configuration. For integrated Org installations, these +;; autoload definitions get extracted into different files (Emacs: +;; loaddefs.el, package manager: org-autoloads.el) and are +;; automatically required by the provided startup files. To allow a +;; user to switch between a standalone and an integrated version +;; without having to change the startup configuration, this +;; compatibility file should be present for integrated Org +;; installations. +(provide 'org-install) + +;; Local Variables: +;; no-byte-compile: t +;; coding: utf-8 +;; End: +;;; org-install.el ends here diff --git a/mk/server.mk b/mk/server.mk index a0c93a5..2273997 100644 --- a/mk/server.mk +++ b/mk/server.mk @@ -63,6 +63,7 @@ elpa: cleanall info card elpa-dirty elpa-dirty elpa-up: ORGDIR=org-$(PKG_TAG) elpa-dirty: @$(MAKE) GITVERSION=$(GITVERSION:release_%=%)-elpa version autoloads + $(CP) mk/org-install-empty.el lisp/org-install.el -@$(RM) $(ORGDIR) $(ORGTAR) $(ORGZIP) ln -s . $(ORGDIR) echo "(define-package \"org\"" > org-pkg.el @@ -84,6 +85,7 @@ elpaplus-dirty elpaplus-up: ORG_ADD_CONTRIB=org-* elpaplus-dirty elpaplus-up: ORGDIR=org-plus-contrib-$(PKG_TAG) elpaplus-dirty: @$(MAKE) GITVERSION=$(GITVERSION:release_%=%)-elpaplus version autoloads + $(CP) mk/org-install-empty.el lisp/org-install.el -@$(RM) $(ORGDIR) $(ORGTAR) $(ORGZIP) ln -s . $(ORGDIR) echo "(define-package \"org-plus-contrib\"" > org-plus-contrib-pkg.el diff --git a/mk/targets.mk b/mk/targets.mk index 4a9ee60..e51b35a 100644 --- a/mk/targets.mk +++ b/mk/targets.mk @@ -37,7 +37,7 @@ CONF_BASE = EMACS DESTDIR ORGCM ORG_MAKE_DOC CONF_DEST = lispdir infodir datadir testdir CONF_TEST = BTEST_PRE BTEST_POST BTEST_OB_LANGUAGES BTEST_EXTRA CONF_EXEC = CP MKDIR RM RMR FIND SUDO PDFTEX TEXI2PDF TEXI2HTML MAKEINFO INSTALL_INFO -CONF_CALL = BATCH BATCHL ELC ELCDIR BTEST MAKE_LOCAL_MK MAKE_ORG_INSTALL MAKE_ORG_VERSION +CONF_CALL = BATCH BATCHL ELC ELCDIR BTEST MAKE_LOCAL_MK MAKE_ORG_AUTOLOADS MAKE_ORG_VERSION config-eol:: EOL = \# config-eol:: config-all config config-all:: -- 1.8.0.1