From 6fbc226ca5881afc94632a63778ae7e2216ab3ae Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Sun, 15 Jul 2012 10:41:27 +0200 Subject: [PATCH] further cleanup for org version * UTILITIES/org-fixup.el (org-make-org-version): Provide feature 'org-version. * lisp/org-compat.el (org-check-version): New macro. Check if org-version.el exists and provide autoloads to that. Otherwise check if org-fixup.el exists and use it to provide definitions. Finally if nothing worked, complain about a botched installation and provide fallback definitions. * lisp/org.el: Use org-check-version. This should finally provide the correct behaviour in all supported use-cases as well as a few corner scenarios that were reported on the mailing list and allow to always build on Git, ELPA and Emacs Bzr correctly. The file org-version.el must be added to the Emacs sources and should be re-generated each time orgmode Git is synced to Emacs Bzr (it would be best to automate this). Note that the internal functions (org-release) and (org-git-release) are not autoloaded when org-version is not present and become only available when org.el is loaded. This should pose no problem since they are only used by (org-version), which is autoloaded from org.el. --- UTILITIES/org-fixup.el | 1 + lisp/org-compat.el | 17 +++++++++++++++++ lisp/org.el | 10 +--------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/UTILITIES/org-fixup.el b/UTILITIES/org-fixup.el index f34423b9e..e9483491c 100644 --- a/UTILITIES/org-fixup.el +++ b/UTILITIES/org-fixup.el @@ -54,6 +54,7 @@ the Git work tree)." ;;;\#\#\#autoload \(defconst org-odt-data-dir \"" odt-dir "\" \"The location of ODT styles.\") +\f\n\(provide 'org-version\) \f\n;; Local Variables:\n;; version-control: never ;; no-byte-compile: t ;; coding: utf-8\n;; End:\n;;; org-version.el ends here\n") diff --git a/lisp/org-compat.el b/lisp/org-compat.el index 09a36a20e..51461e8a9 100644 --- a/lisp/org-compat.el +++ b/lisp/org-compat.el @@ -443,6 +443,23 @@ With two arguments, return floor and remainder of their quotient." 'condition-case-unless-debug 'condition-case-no-debug)) +(defmacro org-check-version () + "Try very hard to provide sensible version strings." + (let* ((org-dir (org-find-library-dir "org")) + (org-version.el (concat org-dir "org-version.el")) + (org-fixup.el (concat org-dir "../UTILITIES/org-fixup.el"))) + (if (require 'org-version org-version.el 'noerror) + '(progn + (autoload 'org-release "org-version.el") + (autoload 'org-git-version "org-version.el")) + (if (require 'org-fixup org-fixup.el 'noerror) + '(org-fixup) + ;; provide fallback definitions and complain + (warn "Could not define org version correctly. Check installation!") + '(progn + (defun org-release () "N/A") + (defun org-git-version () "N/A !!check installation!!")))))) + (provide 'org-compat) ;;; org-compat.el ends here diff --git a/lisp/org.el b/lisp/org.el index 3ad80cb19..4241168d0 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -209,15 +209,7 @@ identifier." :group 'org-id) ;;; Version -;; fallback definitions if everything goes wrong -(defun org-release () "N/A") -(defun org-git-version () "N/A !!check installation!!") -;; re-define them with something sensible if possible -(when (eval-when-compile - (require 'org-fixup - (concat (org-find-library-dir "org") "../UTILITIES/org-fixup.el") - 'noerror)) - (org-fixup)) +(org-check-version) ;;;###autoload (defun org-version (&optional here full message) "Show the org-mode version in the echo area.