diff options
Diffstat (limited to 'mk')
-rw-r--r-- | mk/default.mk | 148 | ||||
-rw-r--r-- | mk/org-fixup.el | 199 | ||||
-rw-r--r-- | mk/targets.mk | 155 | ||||
-rw-r--r-- | mk/version.mk | 2 |
4 files changed, 504 insertions, 0 deletions
diff --git a/mk/default.mk b/mk/default.mk new file mode 100644 index 0000000..3e1c550 --- /dev/null +++ b/mk/default.mk @@ -0,0 +1,148 @@ +##---------------------------------------------------------------------- +## NEVER EDIT THIS FILE, PUT ANY ADAPTATIONS INTO local.mk +##-8<------------------------------------------------------------------- +## CHECK AND ADAPT THE FOLLOWING DEFINITIONS +##---------------------------------------------------------------------- + +# Name of your emacs binary +EMACS = emacs + +# Where local software is found +prefix = /usr/share + +# Where local lisp files go. +lispdir= $(prefix)/emacs/site-lisp/org + +# Where local data files go. +datadir = $(prefix)/emacs/etc/org + +# Where info files go. +infodir = $(prefix)/info + +# Define if you only need info documentation, the default includes html and pdf +#ORG_MAKE_DOC = info # html pdf + +# Define if you want to include some (or all) files from contrib/lisp +# just the filename please (no path prefix, no .el suffix), maybe with globbing +#ORG_ADD_CONTRIB = org-e-* org-md org-export # e.g. the new exporter + +# Where to create temporary files for the testsuite +# respect TMPDIR if it is already defined in the environment +TMPDIR ?= /tmp +testdir = $(TMPDIR)/tmp-orgtest + +# Configuration for testing +# add options before standard load-path +BTEST_PRE = +# add options after standard load path +BTEST_POST = + # -L <path-to>/ert # needed for Emacs23, Emacs24 has ert built in + # -L <path-to>/ess # needed for running R tests + # -L <path-to>/htmlize # need at least version 1.34 for source code formatting +BTEST_OB_LANGUAGES = awk C fortran maxima lilypond octave python sh + # R # requires ESS to be installed and configured +# extra packages to require for testing +BTEST_EXTRA = + # ess-site # load ESS for R tests +##->8------------------------------------------------------------------- +## YOU MAY NEED TO ADAPT THESE DEFINITIONS +##---------------------------------------------------------------------- + +# How to run tests +req-ob-lang = --eval '(require '"'"'ob-$(ob-lang))' +req-extra = --eval '(require '"'"'$(req))' +BTEST = $(BATCH) \ + $(BTEST_PRE) \ + --eval '(add-to-list '"'"'load-path "./lisp")' \ + --eval '(add-to-list '"'"'load-path "./testing")' \ + $(BTEST_POST) \ + -l org-install.el \ + -l testing/org-test.el \ + $(foreach ob-lang,$(BTEST_OB_LANGUAGES),$(req-ob-lang)) \ + $(foreach req,$(BTEST_EXTRA),$(req-extra)) \ + --eval '(setq org-confirm-babel-evaluate nil)' \ + -f org-test-run-batch-tests + +# Using emacs in batch mode. +# BATCH = $(EMACS) -batch -vanilla # XEmacs +BATCH = $(EMACS) -batch -Q + +# Emacs must be started in toplevel directory +BATCHO = $(BATCH) \ + --eval '(add-to-list '"'"'load-path "./lisp")' + +# How to generate local.mk +MAKE_LOCAL_MK = $(BATCHO) \ + --eval '(load "org-compat.el")' \ + --eval '(load "../mk/org-fixup.el")' \ + --eval '(org-make-local-mk)' + +# Emacs must be started in lisp directory +BATCHL = $(BATCH) \ + --eval '(add-to-list '"'"'load-path ".")' + +# How to generate org-install.el +MAKE_ORG_INSTALL = $(BATCHL) \ + --eval '(load "org-compat.el")' \ + --eval '(load "../mk/org-fixup.el")' \ + --eval '(org-make-org-install)' + +# How to generate org-version.el +MAKE_ORG_VERSION = $(BATCHL) \ + --eval '(load "org-compat.el")' \ + --eval '(load "../mk/org-fixup.el")' \ + --eval '(org-make-org-version "$(ORGVERSION)" "$(GITVERSION)" "$(datadir)")' + +# How to byte-compile the whole source directory +ELCDIR = $(BATCHL) \ + --eval '(batch-byte-recompile-directory 0)' + +# How to byte-compile a single file +ELC = $(BATCHL) \ + --eval '(batch-byte-compile)' + +# How to make a pdf file from a texinfo file +TEXI2PDF = texi2pdf --batch --clean + +# How to make a pdf file from a tex file +PDFTEX = pdftex + +# How to create directories with leading path components +# MKDIR = mkdir -m 755 -p # try this if you have no install +MKDIR = install -m 755 -d + +# How to create the info files from the texinfo file +MAKEINFO = makeinfo + +# How to create the HTML file +TEXI2HTML = makeinfo --html --number-sections + +# How to find files +FIND = find + +# How to remove files +RM = rm -f + +# How to remove files recursively +RMR = rm -fr + +# How to copy the lisp files and elc files to their destination. +# CP = cp -p # try this if you have no install +CP = install -m 644 -p + +# How to obtain administrative privileges +# leave blank if you don't need this +# SUDO = +SUDO = sudo + +# Name of the program to install info files +# INSTALL_INFO = ginstall-info # Debian: avoid harmless warning message +INSTALL_INFO = install-info + +# target method for 'compile' +ORGCM = dirall +# ORGCM = dirall # 1x slowdown compared to default compilation method +# ORGCM = single # 4x one Emacs process per compilation +# ORGCM = source # 5x ditto, but remove compiled file immediately +# ORGCM = slint1 # 3x possibly elicit more warnings +# ORGCM = slint2 # 7x possibly elicit even more warnings diff --git a/mk/org-fixup.el b/mk/org-fixup.el new file mode 100644 index 0000000..80439a9 --- /dev/null +++ b/mk/org-fixup.el @@ -0,0 +1,199 @@ +;;; org-fixup.el --- make life easier for folks without GNU make +;; +;; Author: Achim Gratz +;; Keywords: orgmode +;; Homepage: http://orgmode.org +;; +;; This file is not part of GNU Emacs. +;; +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: + +(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 +;; +;;; Code: +;;;\#\#\#autoload +\(defun org-release () + \"The release version of org-mode. + Inserted by installing org-mode or when a release is made.\" + (let ((org-release \"" org-release "\")) + org-release)) +;;;\#\#\#autoload +\(defun org-git-version () + \"The Git version of org-mode. + Inserted by installing org-mode or when a release is made.\" + (let ((org-git-version \"" org-git-version "\")) + org-git-version)) +;;;\#\#\#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") + (toggle-read-only 0) + (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") + (let ((files (directory-files default-directory nil "^\\(org\\|ob\\)\\(-.*\\)?\\.el$"))) + (mapc (lambda (f) (generate-file-autoloads f)) files)) + (insert "\f\n(provide 'org-install)\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-install.el ends here\n") + (toggle-read-only 0) + (save-buffer))) + +(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 "../" )) + (dirodt (if (boundp 'org-odt-data-dir) + org-odt-data-dir + (concat dirorg "etc/")))) + (unwind-protect + (progn + (cd dirlisp) + (org-fixup) + (org-make-org-version (org-release) (org-git-version) dirodt) + (org-make-org-install) + (when compile (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 "mk/default.mk") + (local "local.mk")) + (unwind-protect + (with-temp-buffer + (insert-file-contents default) + (goto-char (point-min)) + (when (search-forward "-8<-" nil t) + (forward-line 1) + (delete-region (point-min) (point))) + (when (search-forward "->8-" nil t) + (forward-line 0) + (delete-region (point) (point-max))) + (goto-char (point-min)) + (insert " +# Remove \"oldorg:\" to switch to \"all\" as the default target. +# Change \"oldorg:\" to an existing target to make that target the default, +# or define your own target here to become the default target. +oldorg: # do what the old Makefile did by default. + +##---------------------------------------------------------------------- +") + (goto-char (point-max)) + (insert "\ +# See default.mk for further configuration options. +") + (toggle-read-only 0) + (write-file local)) + nil))) + +(defun org-make-letterformat (a4name lettername) + "Internal function for the build system." + (unwind-protect + (with-temp-buffer + (insert-file-contents a4name) + (goto-char (point-min)) + (while (search-forward "\\pdflayout=(0l)" nil t) + (replace-match "\\pdflayout=(1l)" nil t)) + (toggle-read-only 0) + (write-file lettername)) + nil)) + +;; redefine version functions + +(defmacro org-fixup () + (let* ((origin default-directory) + (dirlisp (org-find-library-dir "org")) + (dirorg (concat dirlisp "../" )) + (dirgit (concat dirorg ".git/" )) + (org-version "N/A-fixup") + (org-git-version "N/A-fixup !!check installation!!")) + (if (and (boundp 'org-fake-release) (stringp org-fake-release) + (boundp 'org-fake-git-version) (stringp org-fake-git-version)) + (setq org-version org-fake-release + org-git-version org-fake-git-version) + (if (load (concat dirlisp "org-version.el") 'noerror 'nomessage 'nosuffix) + (setq org-version (org-release) + org-git-version (org-git-version)) + (when (and (file-exists-p dirgit) + (executable-find "git")) + (unwind-protect + (progn + (cd dirorg) + (let ((git6 (substring (shell-command-to-string "git describe --abbrev=6 HEAD") 0 -1)) + (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") "-git")) + (if (string-match "^release_" git0) + (setq org-version (substring git0 8)) + (setq org-version git0)))) + (cd origin))))) + (message "org-fixup.el: redefined Org version") + `(progn + (defun org-release () ,org-version) + (defun org-git-version () ,org-git-version)))) + +(provide 'org-fixup) + +;; Local Variables: +;; no-byte-compile: t +;; coding: utf-8 +;; End: +;;; org-fixup.el ends here diff --git a/mk/targets.mk b/mk/targets.mk new file mode 100644 index 0000000..4a9ee60 --- /dev/null +++ b/mk/targets.mk @@ -0,0 +1,155 @@ +.EXPORT_ALL_VARIABLES: +.NOTPARALLEL: .PHONY +# Additional distribution files +DISTFILES_extra= Makefile request-assign-future.txt contrib etc + +LISPDIRS = lisp +OTHERDIRS = doc etc +CLEANDIRS = contrib testing mk +SUBDIRS = $(OTHERDIRS) $(LISPDIRS) +INSTSUB = $(SUBDIRS:%=install-%) +ORG_MAKE_DOC ?= info html pdf + +ifneq ($(wildcard .git),) + GITVERSION ?= $(shell git describe --abbrev=6 HEAD) + ORGVERSION ?= $(subst release_,,$(shell git describe --abbrev=0 HEAD)) + GITSTATUS ?= $(shell git status -uno --porcelain) +else + -include mk/version.mk + GITVERSION ?= N/A + ORGVERSION ?= N/A +endif +DATE = $(shell date +%Y-%m-%d) +ifneq ($(GITSTATUS),) + GITVERSION := $(GITVERSION:.dirty=).dirty +endif + +.PHONY: all oldorg update update2 up0 up1 up2 single $(SUBDIRS) \ + check test install $(INSTSUB) \ + info html pdf card refcard doc docs \ + autoloads cleanall clean $(CLEANDIRS:%=clean%) \ + clean-install cleanelc cleandirs cleanaddcontrib \ + cleanlisp cleandoc cleandocs cleantest \ + compile compile-dirty uncompiled \ + config config-test config-exe config-all config-eol config-version + +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 +config-eol:: EOL = \# +config-eol:: config-all +config config-all:: + $(info ) + $(info ========= Emacs executable and Installation paths) + $(foreach var,$(CONF_BASE),$(info $(var) = $($(var))$(EOL))) + $(foreach var,$(CONF_DEST),$(info $(var) = $(DESTDIR)$($(var))$(EOL))) + $(info ========= Additional files from contrib/lisp) + $(info $(notdir \ + $(wildcard \ + $(addsuffix .el, \ + $(addprefix contrib/lisp/, \ + $(basename \ + $(notdir $(ORG_ADD_CONTRIB)))))))) +config-test config-all:: + $(info ) + $(info ========= Test configuration) + $(foreach var,$(CONF_TEST),$(info $(var) = $($(var))$(EOL))) +config-exe config-all:: + $(info ) + $(info ========= Executables used by make) + $(foreach var,$(CONF_EXEC),$(info $(var) = $($(var))$(EOL))) +config-cmd config-all:: + $(info ) + $(info ========= Commands used by make) + $(foreach var,$(CONF_CALL),$(info $(var) = $($(var))$(EOL))) +config config-test config-exe config-all config-version:: + $(info ========= Org version) + $(info make: Org-mode version $(ORGVERSION) ($(GITVERSION) => $(lispdir))) + @echo "" + +oldorg: compile info # what the old makefile did when no target was specified +uncompiled: cleanlisp autoloads # for developing +refcard: card +update update2:: up0 all + +single: ORGCM=single +single: compile + +.PRECIOUS: local.mk +local.mk: + $(info ======================================================) + $(info = Invoke "make help" for a synopsis of make targets. =) + $(info = Created a default local.mk template. =) + $(info = Setting "oldorg" as the default target. =) + $(info = Please adapt local.mk to your local setup! =) + $(info ======================================================) + -@$(MAKE_LOCAL_MK) + +all compile:: + $(foreach dir, doc lisp, $(MAKE) -C $(dir) clean;) +compile compile-dirty:: + $(MAKE) -C lisp $@ +all clean-install:: + $(foreach dir, $(SUBDIRS), $(MAKE) -C $(dir) $@;) + +check test:: compile +check test test-dirty:: + -$(MKDIR) $(testdir) + TMPDIR=$(testdir) $(BTEST) +ifeq ($(TEST_NO_AUTOCLEAN),) # define this variable to leave $(testdir) around for inspection + $(MAKE) cleantest +endif + +up0 up1 up2:: + git remote update + git pull +up1 up2:: all + $(MAKE) test-dirty +up2 update2:: + $(SUDO) $(MAKE) install + +install: $(INSTSUB) + +install-info: install-doc + +doc docs: $(ORG_MAKE_DOC) + +info html pdf card: + $(MAKE) -C doc $@ + +$(INSTSUB): + $(MAKE) -C $(@:install-%=%) install + +autoloads: lisp + $(MAKE) -C $< $@ + +cleandirs: + $(foreach dir, $(SUBDIRS), $(MAKE) -C $(dir) cleanall;) + +clean: cleanlisp cleandoc + +cleanall: cleandirs cleantest cleanaddcontrib + -$(FIND) . \( -name \*~ -o -name \*# -o -name .#\* \) -exec $(RM) {} \; + -$(FIND) $(CLEANDIRS) \( -name \*~ -o -name \*.elc \) -exec $(RM) {} \; + +$(CLEANDIRS:%=clean%): + -$(FIND) $(@:clean%=%) \( -name \*~ -o -name \*.elc \) -exec $(RM) {} \; + +cleanelc: + $(MAKE) -C lisp $@ + +cleanaddcontrib: + -$(RM) $(wildcard $(addprefix lisp/,$(notdir $(wildcard contrib/lisp/*.el)))) + +cleanlisp: cleanaddcontrib +cleanlisp cleandoc: + $(MAKE) -C $(@:clean%=%) clean + +cleandocs: + $(MAKE) -C doc clean + -$(FIND) doc -name \*~ -exec $(RM) {} \; + +cleantest: + $(RMR) $(testdir) diff --git a/mk/version.mk b/mk/version.mk new file mode 100644 index 0000000..0d9c7af --- /dev/null +++ b/mk/version.mk @@ -0,0 +1,2 @@ +ORGVERSION ?= 7.9.2 +GITVERSION ?= 7.9.2-dist |