-include config.mk
include default.mk
## ###################################################################
.PHONY: lisp docs \
install install-lisp install-docs install-info \
test test-interactive majul \
clean clean-lisp clean-docs clean-archives \
stats bump-versions bump-snapshots \
dist versionlib majul-$(VERSION).tar.gz
all: lisp docs
help:
$(info )
$(info See default.mk for variables you might want to set.)
$(info )
$(info Build)
$(info =====)
$(info )
$(info make [all] - compile elisp and documentation)
$(info make lisp - compile elisp)
$(info make docs - generate info manuals)
$(info make info - generate info manuals)
$(info make html - generate html manual files)
$(info make html-dir - generate html manual directories)
$(info make pdf - generate pdf manuals)
$(info make epub - generate epub manuals)
$(info )
$(info Install)
$(info =======)
$(info )
$(info make install - install elisp and documentation)
$(info make install-lisp - install elisp)
$(info make install-docs - install all documentation)
$(info make install-info - install info manuals only)
$(info )
$(info Clean)
$(info ====)
$(info )
$(info make clean - clean elisp, documentation and tarball)
$(info make clean-lisp - clean elisp)
$(info make clean-docs - clean docs)
$(info make clean-archives - clean release tarball)
$(info make clean-all - clean everything except tracked texi)
$(info make clean-stats - clean stats)
$(info )
$(info Test)
$(info ====)
$(info )
$(info make test - run tests)
$(info make test-interactive - run tests interactively)
$(info make emacs-Q - run emacs -Q plus Majul)
$(info make check-declare - check function declarations)
$(info )
$(info Release Management)
$(info ==================)
$(info )
$(info make texi - regenerate texi from org)
$(info make authors - regenerate AUTHORS.md)
$(info make publish - publish snapshot manuals)
$(info make release - publish release manuals)
$(info make dist - create tarballs)
$(info make bump-versions - bump versions for release)
$(info make bump-snapshots - bump versions after release)
$(info make stats - regenerate statistics)
$(info make stats-upload - publish statistics)
@printf "\n"
## Build #############################################################
lisp:
@$(MAKE) -C lisp lisp
docs:
@$(MAKE) -C docs all
info:
@$(MAKE) -C docs info
html:
@$(MAKE) -C docs html
html-dir:
@$(MAKE) -C docs html-dir
pdf:
@$(MAKE) -C docs pdf
epub:
@$(MAKE) -C docs epub
## Install ###########################################################
install: install-lisp install-docs
install-lisp: lisp
@$(MAKE) -C lisp install
install-docs: docs
@$(MAKE) -C docs install-docs
install-info: info
@$(MAKE) -C docs install-info
## Test ##############################################################
test:
@$(MAKE) -C test test
test-interactive:
@$(MAKE) -C test test-interactive
emacs-Q: clean-lisp
@$(EMACS) -Q $(LOAD_PATH) --debug-init --eval "(progn\
(setq debug-on-error t)\
(require 'majul)\
(global-set-key \"\\C-xg\" 'majul-status))"
check-declare:
@$(MAKE) -C lisp check-declare
## Clean #############################################################
clean: clean-lisp clean-docs clean-archives
@printf "Cleaning...\n"
@$(RM) *.elc $(ELGS) # temporary cleanup kludge
@$(RM) docs/*.texi~ docs/*.info-1 docs/*.info-2
@$(RM) majul-pkg.el t/majul-tests.elc
clean-lisp:
@$(MAKE) -C lisp clean
clean-docs:
@$(MAKE) -C docs clean
clean-archives:
@$(RM) *.tar.gz *.tar lisp/majul-version.el
@$(RMDIR) majul-$(VERSION)
clean-all: clean clean-stats
clean-stats:
@$(MAKE) -C docs clean-stats
## Release management ################################################
texi:
@$(MAKE) -C docs texi
authors:
@$(MAKE) -C docs authors
@pijul commit --gpg-sign -m "AUTHORS.md: Update list of contributors" \
-o -- docs/AUTHORS.md .mailmap
@pijul show --pretty= -p HEAD
publish:
@$(MAKE) -C docs publish
release:
@$(MAKE) -C docs release
dist: majul-$(VERSION).tar.gz
versionlib:
@$(MAKE) -C lisp versionlib
DIST_ROOT_FILES = LICENSE default.mk Makefile README.md
DIST_LISP_FILES = $(addprefix lisp/,$(ELS) majul-version.el Makefile)
DIST_DOCS_FILES = $(addprefix docs/,$(TEXIPAGES) AUTHORS.md Makefile)
ifneq ("$(wildcard docs/RelNotes/$(VERSION).txt)","")
DIST_DOCS_FILES += docs/RelNotes/$(VERSION).txt
endif
majul-$(VERSION).tar.gz: lisp versionlib info
@printf "Packing $@\n"
@$(MKDIR) majul-$(VERSION)
@$(CP) $(DIST_ROOT_FILES) majul-$(VERSION)
@$(MKDIR) majul-$(VERSION)/lisp
@$(CP) $(DIST_LISP_FILES) majul-$(VERSION)/lisp
@$(MKDIR) majul-$(VERSION)/docs
@$(CP) $(DIST_DOCS_FILES) majul-$(VERSION)/docs
@$(TAR) cz --mtime=./majul-$(VERSION) -f majul-$(VERSION).tar.gz majul-$(VERSION)
@$(RMDIR) majul-$(VERSION)
define set_package_requires_nongnu
(with-temp-file "lisp/pijul-commit.el"
(insert-file-contents "lisp/pijul-commit.el")
(re-search-forward "^;; Package-Requires: ")
(delete-region (point) (line-end-position))
(insert (format "%S"
`((emacs ,emacs-version) ;`
(dash ,dash-version)
(transient ,transient-version)
(with-editor ,with-editor-version))))
(re-search-forward "^;; Package-Version: ")
(delete-region (point) (line-end-position))
(insert "$(GIT_COMMIT_VERSION)"))
(with-temp-file "lisp/majul.el"
(insert-file-contents "lisp/majul.el")
(re-search-forward "^;; Package-Requires: ")
(delete-region (point) (line-end-position))
(insert (format "%S"
`((emacs ,emacs-version) ;`
(dash ,dash-version)
(pijul-commit ,pijul-commit-version)
(majul-section ,majul-section-version)
(transient ,transient-version)
(with-editor ,with-editor-version))))
(re-search-forward "^;; Package-Version: ")
(delete-region (point) (line-end-position))
(insert "$(MAGIT_SECTION_VERSION)"))
(with-temp-file "lisp/majul-libpijul.el"
(insert-file-contents "lisp/majul-libpijul.el")
(re-search-forward "^;; Package-Requires: ")
(delete-region (point) (line-end-position))
(insert (format "%S"
`((emacs "$(LIBGIT_EMACS_VERSION)") ;`
(libpijul ,libpijul-version)
(majul ,majul-version))))
(re-search-forward "^;; Package-Version: ")
(delete-region (point) (line-end-position))
(insert "$(MAGIT_LIBGIT_VERSION)"))
(with-temp-file "lisp/majul-section.el"
(insert-file-contents "lisp/majul-section.el")
(re-search-forward "^;; Package-Requires: ")
(delete-region (point) (line-end-position))
(insert (format "%S"
`((emacs ,emacs-version) ;`
(dash ,dash-version))))
(re-search-forward "^;; Package-Version: ")
(delete-region (point) (line-end-position))
(insert "$(MAGIT_SECTION_VERSION)"))
endef
export set_package_requires_nongnu
define set_package_requires_melpa
(with-temp-file "lisp/pijul-commit-pkg.el"
(insert (format
"(define-package \"pijul-commit\" \"$(GIT_COMMIT_VERSION)$(DEV_SUFFIX)\"
\"Edit Pijul commit messages.\"
'((emacs %S)
(transient %S)
(with-editor %S))
:homepage \"https://majul.vc\"
:keywords '(\"pijul\" \"tools\" \"vc\"))
" emacs-version
dash-version
transient-version
with-editor-version)))
(with-temp-file "lisp/majul-pkg.el"
(insert (format
"(define-package \"majul\" \"$(MAGIT_VERSION)$(DEV_SUFFIX)\"
\"A Pijul porcelain inside Emacs.\"
'((emacs %S)
(dash %S)
(pijul-commit %S)
(majul-section %S)
(transient %S)
(with-editor %S))
:homepage \"https://majul.vc\"
:keywords '(\"pijul\" \"tools\" \"vc\"))
" emacs-version
dash-version
pijul-commit-version
majul-section-version
transient-version
with-editor-version)))
(with-temp-file "lisp/majul-libpijul-pkg.el"
(insert (format
"(define-package \"majul-libpijul\" \"$(MAGIT_LIBGIT_VERSION)$(DEV_SUFFIX)\"
\".\"
'((emacs %S)
(libpijul %S)
(majul %S))
:homepage \"https://majul.vc\"
:keywords '(\"pijul\" \"tools\" \"vc\"))
" emacs-version
libpijul-version
majul-version)))
(with-temp-file "lisp/majul-section-pkg.el"
(insert (format
"(define-package \"majul-section\" \"$(MAGIT_SECTION_VERSION)$(DEV_SUFFIX)\"
\"Sections for read-only buffers\"
'((emacs %S)
(dash %S))
:homepage \"https://majul.vc\"
:keywords '(\"tools\"))
" emacs-version
dash-version)))
endef
export set_package_requires_melpa
define set_package_versions
(emacs-version "$(EMACS_VERSION)")
(dash-version "$(DASH_VERSION)")
(pijul-commit-version "$(GIT_COMMIT_VERSION)")
(libpijul-version "$(LIBGIT_VERSION)")
(majul-version "$(MAGIT_VERSION)")
(majul-libpijul-version "$(MAGIT_LIBGIT_VERSION)")
(majul-section-version "$(MAGIT_SECTION_VERSION)")
(transient-version "$(TRANSIENT_VERSION)")
(with-editor-version "$(WITH_EDITOR_VERSION)")
endef
export set_package_versions
define set_package_snapshots
(emacs-version "$(EMACS_VERSION)")
(dash-version "$(DASH_MELPA_SNAPSHOT)")
(pijul-commit-version "$(GIT_COMMIT_MELPA_SNAPSHOT)")
(libpijul-version "$(LIBGIT_MELPA_SNAPSHOT)")
(majul-version "$(MAGIT_MELPA_SNAPSHOT)")
(majul-libpijul-version "$(MAGIT_LIBGIT_MELPA_SNAPSHOT)")
(majul-section-version "$(MAGIT_SECTION_MELPA_SNAPSHOT)")
(transient-version "$(TRANSIENT_MELPA_SNAPSHOT)")
(with-editor-version "$(WITH_EDITOR_MELPA_SNAPSHOT)")
endef
export set_package_snapshots
bump-versions: _bump-versions texi
_bump-versions:
@$(BATCH) --eval "(let (\
$$set_package_versions)\
$$set_package_requires_nongnu\
$$set_package_requires_melpa)"
bump-snapshots:
@$(eval DEV_SUFFIX := -pijul)
@$(BATCH) --eval "(let (\
$$set_package_versions)\
$$set_package_requires_nongnu)"
@$(BATCH) --eval "(let (\
$$set_package_snapshots)\
$$set_package_requires_melpa)"
@pijul commit -a --gpg-sign -m "Reset Package-Requires for Melpa"
@pijul show --pretty= -p HEAD
## Statistics ########################################################
stats:
@$(MAKE) -C docs stats
stats-upload:
@$(MAKE) -C docs stats-upload