summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
Diffstat (limited to 'mk')
-rw-r--r--mk/default.mk148
-rw-r--r--mk/org-fixup.el199
-rw-r--r--mk/targets.mk155
-rw-r--r--mk/version.mk2
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