diff options
author | Achim Gratz <Stromeko@Stromeko.DE> | 2012-07-15 10:41:27 +0200 |
---|---|---|
committer | Achim Gratz <Stromeko@Stromeko.DE> | 2012-07-15 13:53:53 +0200 |
commit | 6fbc226ca5881afc94632a63778ae7e2216ab3ae (patch) | |
tree | 48503ac906e88f7263cca7a544f6977c69113339 | |
parent | e6a88820bf61a4cfa9ab80120b16e5089122d134 (diff) | |
download | org-mode-6fbc226ca5881afc94632a63778ae7e2216ab3ae.tar.gz |
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.
-rw-r--r-- | UTILITIES/org-fixup.el | 1 | ||||
-rw-r--r-- | lisp/org-compat.el | 17 | ||||
-rw-r--r-- | lisp/org.el | 10 |
3 files changed, 19 insertions, 9 deletions
diff --git a/UTILITIES/org-fixup.el b/UTILITIES/org-fixup.el index f34423b..e948349 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 09a36a2..51461e8 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 3ad80cb..4241168 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. |