diff --git a/Makefile b/Makefile index 214357707..3e9ca5622 100644 --- a/Makefile +++ b/Makefile @@ -48,12 +48,16 @@ $(call def-help-heading,TODO: some of these need updating) $(call def-help-heading,---------------------------------------) $(call def-help-heading, ) -# just to include "make help" in help: -help2: $(call def-help,[help], list documented rules in this makefile. "make RULE -n" shows more detail. ) +add-to-help-1: $(call def-help,[help], list documented rules in this makefile ) -help-%: $(call def-help,[help-SECTION], list documented rules in one section of this makefile. ) +help-%: $(call def-help,help-SECTION, list documented rules in the given section ) make help 2>&1 | sed -n '/$*/,/: $$/p' +%-help: $(call def-help,SECTION-help, same but easier to type (can append "-help" to any "make RULE") ) + @make help 2>&1 | sed -n '/$*/,/: $$/p' + +add-to-help-2: $(call def-help,RULE -n, show what RULE would do ) + ############################################################################### # VARS @@ -176,10 +180,10 @@ VERSIONSENSITIVEFILES=\ VERSIONFILE=.version # two or three-part version string, whatever's in VERSION -VERSION:=$(shell cat $(VERSIONFILE)) +VERSION=$(shell cat $(VERSIONFILE)) # the number of commits since the last tag -PATCHLEVEL:=$(shell git describe --tags --match 'hledger-[0-9]*' --long | awk -F- '{print $$3}') +PATCHLEVEL=$(shell git describe --tags --match 'hledger-[0-9]*' --long | awk -F- '{print $$3}') #PATCHLEVEL:=$(shell git describe --tags --match 'hledger-web-[0-9]*' --long | awk -F- '{print $$4}') # the number of commits since the last_release tag #PATCHLEVEL:=$(shell git rev-list last_release..HEAD | wc -l) @@ -223,8 +227,8 @@ WARNINGS:=\ # from stack's dist dir, hopefully there's just one. If not (after cabal upgrade), will get warnings. Maybe obsolete ? #CABALMACROSFLAGS=-optP-include -optP hledger/.stack-work/dist/*/*/build/autogen/cabal_macros.h -BUILDFLAGS1:=-rtsopts $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) $(GHCMEMFLAGS) $(CABALMACROSFLAGS) -DPATCHLEVEL=$(PATCHLEVEL) -DDEVELOPMENT -BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(VERSION)dev"' +BUILDFLAGS1=-rtsopts $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) $(GHCMEMFLAGS) $(CABALMACROSFLAGS) -DPATCHLEVEL=$(PATCHLEVEL) -DDEVELOPMENT +BUILDFLAGS=$(BUILDFLAGS1) -DVERSION='"$(VERSION)dev"' # PROFBUILDFLAGS:=-prof -fprof-auto -osuf hs_p # # sp needs different quoting: # AUTOBUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='\"$(VERSION)dev\"' # $(PROFBUILDFLAGS) @@ -240,8 +244,8 @@ BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(VERSION)dev"' # # some other thing for linux binary filenames # RELEASEBINARYSUFFIX=$(shell echo "-$(VERSION)-`uname`-`arch`" | tr '[:upper:]' '[:lower:]') -TIME:=$(shell date +"%Y%m%d%H%M") -MONTHYEAR:=$(shell date +'%B %Y') +TIME=$(shell date +"%Y%m%d%H%M") +MONTHYEAR=$(shell date +'%B %Y') ############################################################################### $(call def-help-subheading,INSTALLING:) @@ -1100,47 +1104,6 @@ haddock: \ # # cd site/api && \ # # hoogle --convert=main.txt --output=default.hoo -# changelogs -# -# commits are appended as date-ordered org nodes to doc/CHANGES.org -# for easy editing. This is used as the basis for package changelogs -# (hledger*/CHANGES) and release notes (site/release-notes.md). - -DRAFTCHANGELOG=doc/CHANGES.org -LASTCHANGELOGREF:=`grep -E '^[a-f0-9]{8}$$' $(DRAFTCHANGELOG) | tail -1` -#TODO: list only from LASTTAG if no refs are present -#LASTTAG:=`git describe --tags --abbrev=0` -#GREPCHANGELOGREF:=grep -E '^[a-f0-9]{8}$$' $(DRAFTCHANGELOG) -#LASTCHANGELOGREF:=`($(GREPCHANGELOGREF) -q && ($(GREPCHANGELOGREF) | tail -1))` || `echo $(LASTTAG)` - -draft-changelog-start: \ - $(call def-help,draft-changelog-start, add an empty changelog outline to $(DRAFTCHANGELOG) ) - @make draft-changelog-template >>$(DRAFTCHANGELOG) - -draft-changelog-template: \ - $(call def-help,draft-changelog-template, print an empty org outline for drafting changelogs. ) - @echo "* draft changelog for `git describe --tags --abbrev=0`" - @echo "** hledger-lib" - @echo "** hledger" - @echo "** hledger-ui" - @echo "** hledger-web" - @echo "** hledger-api" - @echo "** project" - -draft-changelog-update: \ - $(call def-help,draft-changelog-update, add any new commits as org nodes to $(DRAFTCHANGELOG) ) - @make draft-changelog-$(LASTCHANGELOGREF) >> $(DRAFTCHANGELOG) - -draft-changelog-%: \ - $(call def-help,draft-changelog-STARTREF, print commits from STARTREF as org nodes. Eg: make draft-changelog-hledger-1.3 ) - @git log --abbrev-commit --reverse --pretty=format:'ORGNODE %s (%an)%n%b%h' $*.. \ - | sed -e 's/^\*/-/' -e 's/^ORGNODE/***/' \ - | sed -e 's/ (Simon Michael)//' - -draft-changelog-add-%: \ - $(call def-help,draft-changelog-add-STARTREF, add commits from STARTREF as org nodes to $(DRAFTCHANGELOG). Eg: make draft-changelog-add-HEAD~1 ) - @make draft-changelog-$* >>$(DRAFTCHANGELOG) - # # in subsequent rules, allow automatic variables to be used in prerequisites (use $$) @@ -1219,6 +1182,71 @@ site/manual2-1.md: site/manual-start.md site/manual-end.md $(MANPAGES) \ # echo pandoc $< -t man -s --template doc/webmanual.template -o $@ # too hard, see Shake.hs +######################## +# 2017 changelog process +# make help-changenotes + +# Commit messages are periodically appended to this org outline, +# and before release it is edited down to make the package changelogs +# (hledger*/CHANGES) and release notes (site/release-notes.md). +# The notes for past releases are kept in the outline, +# in case they might come in handy again. +# It is not specific to any particular branch, and not tracked with git. +CHANGENOTES=CHANGENOTES.org + +LASTTAG=$(shell git describe --tags --abbrev=0) + +# The last git revision referenced in the change notes. +# (Or, if there are no change notes, the last tag. +# Tries hard to be warning free and run shell commands only when needed.) +CHANGENOTESLASTREV=$(subst %,,$(subst %%,$(LASTTAG),%$(shell [ -f $(CHANGENOTES) ] && (grep -E '^[a-f0-9]{8}$$' $(CHANGENOTES) | tail -1) )%)) + +# create change notes file if it doesn't exist.. shouldn't happen much. +$(CHANGENOTES): + @make changenotes-start + +changenotes-start: \ + $(call def-help,changenotes-start, add a new outline named after $(VERSIONFILE) in $(CHANGENOTES). Run after bumping $(VERSIONFILE). ) + @(\ + echo "* change notes for hledger-$(VERSION)" ;\ + echo "** hledger-lib" ;\ + echo "** hledger" ;\ + echo "** hledger-ui" ;\ + echo "** hledger-web" ;\ + echo "** hledger-api" ;\ + echo "** hledger-install" ;\ + echo "** project" ;\ + ) >>$(CHANGENOTES) + +# TODO problem: this only checks the last (bottom-most) git rev in the +# change notes file, so after manual editing has begun this may re-add +# commits which are already in the file. +changenotes-update: $(CHANGENOTES) \ + $(call def-help,changenotes-update, add any not-yet-added(*) commits to $(CHANGENOTES). Run periodically (* it may get this wrong once manual editing has begun). ) + @make changenotes-show-from-$(CHANGENOTESLASTREV) >>$(CHANGENOTES) + @echo "Latest items in $(CHANGENOTES):" + @make changenotes-show | tail -10 + @make changenotes-show-last + +changenotes-update-from-%: \ +# $(call def-help,changenotes-update-from-REV, add commits from this git revision onward to $(CHANGENOTES) ) + @make changenotes-show-from-$* >>$(CHANGENOTES) + +changenotes-show-from-%: \ +# $(call def-help,changenotes-show-from-REV, show commits from this git revision onward as org nodes ) + @git log --abbrev-commit --reverse --pretty=format:'ORGNODE %s (%an)%n%b%h' $*.. \ + | sed -e 's/^\*/-/' -e 's/^ORGNODE/***/' \ + | sed -e 's/ (Simon Michael)//' + +changenotes-show: $(CHANGENOTES) \ + $(call def-help,changenotes-show, show all the org headlines recorded in $(CHANGENOTES) ) + @cat $(CHANGENOTES) | grep '*' + +# git l is a local alias with output like "2017-08-16 0a0e6d18 tools: make help-SECTION (HEAD -> master)" +changenotes-show-last: $(CHANGENOTES) \ + $(call def-help,changenotes-show-last, show the last commit recorded in $(CHANGENOTES) ) + @git l -1 $(CHANGENOTESLASTREV) + ############################################################################### $(call def-help-subheading,RELEASING:) #$(call def-help-subheading,see also developer guide -> how to -> do a release) @@ -1433,9 +1461,9 @@ hackageupload: \ describe: $(call def-help,describe, show a precise git-describe version string ) @git describe --tags --match 'hledger-[0-9]*' --dirty -showreleaseauthors: $(call def-help,showreleaseauthors, show author names since last release) - @echo Commit authors since last release: - @git shortlog -sn $(CHANGELOGSTART).. +# showreleaseauthors: $(call def-help,showreleaseauthors, show author names since last release) +# @echo Commit authors since last release: +# @git shortlog -sn $(CHANGELOGSTART).. # TODO undefined cloc: $(call def-help,cloc, count lines of source code ) @echo Lines of code including tests: