diff options
author | Achim Gratz <Stromeko@Stromeko.DE> | 2012-07-14 20:13:25 +0200 |
---|---|---|
committer | Achim Gratz <Stromeko@Stromeko.DE> | 2012-07-14 20:42:18 +0200 |
commit | 6762c7ea60b39aa5dc25a873cd0ddc4bf84cf884 (patch) | |
tree | 8ecb563b11b8c53aab7520cb587f5fc8c2593a15 | |
parent | f0d5d935ce4046351d7bc9afae930769db4d17b4 (diff) | |
download | org-mode-6762c7ea60b39aa5dc25a873cd0ddc4bf84cf884.tar.gz |
Clean-up for build system support and a fix for org-version.
* UTILITIES/org-fixup.el: Clean up and add doc strings.
* UTILITIES/org-fixup.el (org-make-autoloads): Add optional arguments
and implementation for comopiling and force compiling.
* UTILITIES/org-fixup.el (org-make-autoloads-compile,
org-make-autoloads-compile-force): Convenience definitions with
pre-selected arguments, avoids complicated quoted on invocation from
command line.
* UTILITIES/org-fixup.el (org-fixup): Add "-git" to git version when
run from a bare Git worktree. Give message instead of returning
string inside quoted progn for easier tracing.
* lisp/org.el: Fix a subtle error resulting in version functions
sometimes not being defined and byte-compiling failing. Always
compile in fallback definitions into org.elc -- org-fixup either
provides re-definitions at compile-time or checks org-version.el and
then the git work tree when run uncompiled. So the fallback
definitions will only come into effect when org-fixup is not
available.
-rw-r--r-- | UTILITIES/org-fixup.el | 61 | ||||
-rw-r--r-- | lisp/org.el | 15 |
2 files changed, 51 insertions, 25 deletions
diff --git a/UTILITIES/org-fixup.el b/UTILITIES/org-fixup.el index 20613d2..f34423b 100644 --- a/UTILITIES/org-fixup.el +++ b/UTILITIES/org-fixup.el @@ -1,7 +1,7 @@ -;;; org-fixup.el - to make life easier for folks without GNU make +;;; org-fixup.el --- make life easier for folks without GNU make ;; ;; Author: Achim Gratz -;; Keywords: outlines, hypermedia, calendar, wp +;; Keywords: orgmode ;; Homepage: http://orgmode.org ;; ;; This file is not part of GNU Emacs. @@ -24,10 +24,16 @@ ;; ;;; Commentary: -(load "autoload" nil 'nomessage) -(load "org-compat.el" nil 'nomessage 'nosuffix) +(require 'autoload) +(require 'org-compat "org-compat.el") (defun org-make-org-version (org-release org-git-version odt-dir) + "Make the file org-version.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 present (except directly from +the Git work tree)." (with-temp-buffer (insert "\ ;;; org-version.el --- autogenerated file, do not edit @@ -55,6 +61,11 @@ (write-file "org-version.el"))) (defun org-make-org-install () + "Make the file org-install.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-install.el") (insert ";;; org-install.el --- autogenerated file, do not edit\n;;\n;;; Code:\n") @@ -67,7 +78,12 @@ (toggle-read-only 0) (save-buffer))) -(defun org-make-autoloads () +(defun org-make-autoloads (&optional compile force) + "Make the files org-install 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 +manual install when the build system can't be used." (let* ((origin default-directory) (dirlisp (org-find-library-dir "org")) (dirorg (concat dirlisp "../" )) @@ -79,20 +95,24 @@ (cd dirlisp) (org-fixup) (org-make-org-version (org-release) (org-git-version) dirodt) - (org-make-org-install)) + (org-make-org-install) + (when compile (byte-recompile-directory dirlisp 0 force))) (cd origin)))) -(defun org-make-autoloads-compile (&rest force) - (let* ((origin default-directory) - (dirlisp (org-find-library-dir "org"))) - (unwind-protect - (progn - (cd dirlisp) - (org-make-autoloads) - (byte-recompile-directory dirlisp 0 force)) - (cd origin)))) +(defun org-make-autoloads-compile () + "Call org-make-autoloads with compile argument. +Convenience function for easier invocation from command line." + (org-make-autoloads 'compile nil)) + +(defun org-make-autoloads-compile-force () + "Call org-make-autoloads with compile force arguments. +Convenience function for easier invocation from command line." + (org-make-autoloads 'compile 'force)) + +;; Internal functions (defun org-make-local-mk () + "Internal function for the build system." (let ((default "default.mk") (local "local.mk")) (unwind-protect @@ -123,6 +143,7 @@ oldorg: # do what the old Makfile did by default nil))) (defun org-make-letterformat (a4name lettername) + "Internal function for the build system." (unwind-protect (with-temp-buffer (insert-file-contents a4name) @@ -133,6 +154,8 @@ oldorg: # do what the old Makfile did by default (write-file lettername)) nil)) +;; redefine version functions + (defmacro org-fixup () (let* ((origin default-directory) (dirlisp (org-find-library-dir "org")) @@ -156,15 +179,15 @@ oldorg: # do what the old Makfile did by default (git0 (substring (shell-command-to-string "git describe --abbrev=0 HEAD") 0 -1)) (gitd (string-match "\\S-" (shell-command-to-string "git status -uno --porcelain")))) - (setq org-git-version (concat git6 (when gitd ".dirty"))) + (setq org-git-version (concat git6 (when gitd ".dirty") "-git")) (if (string-match "^release_" git0) (setq org-version (substring git0 8)) (setq org-version git0)))) - (cd origin))))) + (cd origin))))) + (message "org-fixup.el: redefined org version.") `(progn (defun org-release () ,org-version) - (defun org-git-version () ,org-git-version) - "org-fixup.el: redefined org version."))) + (defun org-git-version () ,org-git-version)))) (provide 'org-fixup) diff --git a/lisp/org.el b/lisp/org.el index 969bbea..3ad80cb 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -209,12 +209,15 @@ identifier." :group 'org-id) ;;; Version -(eval-when-compile - (defun org-release () "N/A") - (defun org-git-version () "N/A !!check installation!!") - (and (load (concat (org-find-library-dir "org") "../UTILITIES/org-fixup.el") - 'noerror 'nomessage 'nosuffix) - (org-no-warnings (org-fixup)))) +;; 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)) ;;;###autoload (defun org-version (&optional here full message) "Show the org-mode version in the echo area. |