tools: make: update RELEASING rules; misc cleanups

This commit is contained in:
Simon Michael 2017-07-31 16:12:59 -07:00
parent f4e1d5aaec
commit 69a272178a

183
Makefile
View File

@ -29,7 +29,12 @@
# This makefile mostly uses stack to get things done (slow but robust).
# Secondarily it uses ghc directly to do some developer tasks (faster).
# # Also if needed it uses cabal directly for a few tasks.
#
# XXX do we need this ?
#SHELL=/bin/bash
#.SHELLFLAGS="-O extglob -c" # example
# help system
# Every user-relevant rule in this makefile should use def-help to define
# a help string. Use "make help" to see the available rules.
@ -39,7 +44,7 @@ include help-system.mk
$(call def-help-section, hledger make rules )
help2: \
$(call def-help,[help], list documented rules in this makefile. make -n RULE shows more detail. )
$(call def-help,[help], list documented rules in this makefile. "make RULE -n" shows more detail. )
###############################################################################
# VARS
@ -120,29 +125,41 @@ SOURCEFILES:= \
hledger-web/tests/*.hs \
hledger-web/Handler/*.hs \
hledger-web/Hledger/*.hs \
hledger-web/Settings/*.hs
CABALFILES:= \
hledger/hledger.cabal \
hledger-*/*.cabal \
site/hakyll-std/hakyll-std.cabal
hledger-web/Settings/*.hs \
HPACKFILES:= \
hledger/*package.yaml \
hledger-*/*package.yaml \
site/hakyll-std/*package.yaml
WEBFILES:= \
CABALFILES:= \
hledger/hledger.cabal \
hledger-*/*.cabal \
MANUALSOURCEFILES:= \
doc/lib.m4 \
*/*/*.m4.md \
MANUALGENFILES:= \
hledger*/doc/hledger*.[15]{,.info,.txt} \
# site/*.md includes website source files and generated web manual files
# WEBDOCFILES:= \
# site/*.md \
WEBCODEFILES:= \
hledger-web/templates/* \
hledger-web/static/*.js \
hledger-web/static/*.css
hledger-web/static/*.css \
DOCFILES:= \
*/*.md
DOCSOURCEFILES:= \
README.md \
$(MANUALSOURCEFILES) \
# files which should be updated when the version changes
VERSIONSENSITIVEFILES=\
$(HPACKFILES) \
hledger-api/hledger-api.hs \
doc/lib.m4 \
# # file(s) which require recompilation for a build to have an up-to-date version string
# VERSIONSOURCEFILE=hledger/Hledger/Cli/Version.hs
@ -216,6 +233,7 @@ BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(VERSION)dev"'
# RELEASEBINARYSUFFIX=$(shell echo "-$(VERSION)-`uname`-`arch`" | tr '[:upper:]' '[:lower:]')
TIME:=$(shell date +"%Y%m%d%H%M")
MONTHYEAR:=$(shell date +'%B %Y')
###############################################################################
$(call def-help-subsection,INSTALLING:)
@ -253,6 +271,10 @@ build: \
$(call def-help,build, download dependencies and build hledger executables (with stack))
$(STACK) build
addons: \
$(call def-help,addons, compile the experimental add-on commands, required for functional tests )
bin/compile.sh
# check-setup: \
# $(call def-help,check-setup,\
# run some tests to validate the development environment\
@ -625,12 +647,6 @@ functest: addons tests/addons/hledger-addon \
@($(SHELLTESTSTK) tests \
&& echo $@ PASSED) || (echo $@ FAILED; false)
addons: \
$(call def-help,addons,\
compile the experimental add-on commands, required for functional tests \
)
bin/compile.sh
ADDONEXTS=pl py rb sh hs lhs rkt exe com bat
tests/addons/hledger-addon: \
$(call def-help,tests/addons/hledger-addon,\
@ -1199,7 +1215,8 @@ site/manual2-1.md: site/manual-start.md site/manual-end.md $(MANPAGES) \
$(call def-help-subsection,RELEASING:)
#$(call def-help-subsection,see also developer guide -> how to -> do a release)
# # XXX UPDATE
# TODO update this:
# # Version numbering. See also .version and Version.hs.
# #
# # hledger's version number appears in:
@ -1247,51 +1264,81 @@ $(call def-help-subsection,RELEASING:)
# # - "make release" additionally records the main version number-affected
# # files, and tags the repo with the release tag.
# release: releasetest setandrecordversion tagrelease \
# $(call def-help,release,\
# Build a release, tag the repo, prepare a cabal package\
# First update .version. Eg:\
# a normal release: echo 0.7 >.version; make release\
# a bugfix release: echo 0.7.1 >.version; make release\
# )
# TODO revive these:
# upload: cabalsdist hackageupload pushdocs \
# $(call def-help,upload,\
# Upload the latest cabal package and update hledger.org\
# )
# old examples:
# a normal release: echo 0.7 >.version; make release
# a bugfix release: echo 0.7.1 >.version; make release
#release: releasetest bumpversion tagrelease $(call def-help,release, prepare a release and tag the repo )
# releaseandupload: release upload \
# $(call def-help,releaseandupload,\
# \
# )
#publish: hackageupload pushdocs $(call def-help,upload, publish latest hackage packages and docs )
# # setandrecordversion: setversion \
# # $(call def-help,setandrecordversion,\
# # update the version number in local files, and prompt to record changes\
# # in these files. Triggered by "make release".\
# # )
# # darcs record -m "bump version" $(VERSIONFILE) $(VERSIONSENSITIVEFILES)
#releaseandpublish: release upload $(call def-help,releaseandupload, prepare a release and publish )
describe: \
$(call def-help,describe, show an accurate git-describe version string )
@git describe --tags --match 'hledger-[0-9]*' --dirty
ISCLEAN=git diff-index --quiet HEAD --
setversion: $(VERSIONSENSITIVEFILES) \
$(call def-help,setversion, update all version strings to match $(VERSIONFILE) )
# stop if the working directory has uncommitted changes
iscleanwd:
@$(ISCLEAN) || (echo "please clean the working directory first"; false)
setversionforce:\
$(call def-help,setversionforce, update all version strings even if $(VERSIONFILE) seems unchanged)
touch $(VERSIONFILE); make setversion
# stop if the given file(s) have uncommitted changes
isclean-%:
@$(ISCLEAN) $* || (echo "please clean these files first: $*"; false)
hledger%/package.yaml: $(VERSIONFILE) \
$(call def-help-hide,hledger/package.yaml, update the version in this file )
setdate: #$(call def-help,setdate, set manual date to current month and year )
@$(ISCLEAN) doc/lib.m4 || (echo "please clean doc/lib.m4 first"; false)
perl -pe "s/^(m4_define\({{_monthyear_}}, *{{)[^}]*(}}\)m4_dnl *)$$/\$${1}$(MONTHYEAR)\$${2}/" -i doc/lib.m4
updatedate: setdate $(call def-help,updatedate, set manual date to current month and year and commit )
git commit -m "bump manual date to $(MONTHYEAR)" doc/lib.m4
# update a package yaml file's version, -DVERSION, and hledger lower bounds (does not change upper bounds)
%/package.yaml: $(VERSIONFILE)
perl -p -e "s/(^version *: *).*/\$${1}'$(VERSION)'/" -i $@
perl -pe "s/(hledger(-\w+)?) *>=? *((\d+\.)*\d+) *&& *< *((\d+\.)*\d+)$$/\$$1 >= $(VERSION) && < \$$5/" -i $@ # replace the lower bound with VERSION, leave the upper bound as is
perl -pe "s/(hledger(-\w+)?) *>=? *((\d+\.)*\d+) *&& *< *((\d+\.)*\d+)$$/\$$1 >= $(VERSION) && < \$$5/" -i $@
perl -p -e "s/(-DVERSION=\")[^\"]+/\$${1}$(VERSION)/" -i $@
site/manual-start.md: $(VERSIONFILE) \
$(call def-help-hide,site/manual-start.md, update the version in this file )
perl -p -e "s/(this version documents hledger and hledger-web) +[0-9.]+/\1 $(VERSION)/" -i $@
# update hledger-api's version strings
hledger-api/hledger-api.hs: $(VERSIONFILE)
perl -pe "s/(hledgerApiVersion=)\"((\d+\.)*\d+)\" *$$/\$$1\"$(VERSION)\"/" -i $@
perl -pe "s/(.*?hledger-api +)((\d+\.)*\d+)(.*)$$/\$${1}$(VERSION)\$$4/" -i $@
# update version string used in generated docs
doc/lib.m4: $(VERSIONFILE)
perl -pe "s/^(m4_define\({{_version_}}, *{{)((\d+\.)*\d+)(}}\)m4_dnl *)$$/\$${1}$(VERSION)\$${4}/" -i $@
@echo "please manually check/update _docversionlinks_ in doc/lib.m4"
# XXX obsolete ?
# update version string in manual
#site/manual-start.md: $(VERSIONFILE)
# perl -p -e "s/(this version documents hledger and hledger-web) +[0-9.]+/\1 $(VERSION)/" -i $@
# XXX start with early targets isclean-$(VERSIONSENSITIVEFILES) (fails due to glob) and isdirty-$(VERSIONFILE) ?
setversion: $(VERSIONSENSITIVEFILES) #$(call def-help,setversion, update version strings & bounds from $(VERSIONFILE) (might need -B) )
updateversion: setversion $(call def-help,updateversion, update version strings & bounds from $(VERSIONFILE) and commit (might need -B) )
@read -p "please review changes then press enter to commit: $(VERSIONFILE) $(VERSIONSENSITIVEFILES)"
git commit -m "bump version strings & lower bounds to $(VERSION)" $(VERSIONFILE) $(VERSIONSENSITIVEFILES)
# (re)generate a cabal file from its package.yaml definition
# XXX to avoid warnings, this hpack should be the same version as stack's built-in hpack
%.cabal: $$(dir $$@)package.yaml
hpack --silent $(dir $*)
gencabal: $$(CABALFILES) #$(call def-help,gencabal, regenerate cabal files from package.yamls (might need -B) )
updatecabal: gencabal $(call def-help,updatecabal, regenerate and commit cabal files (might need -B) )
@read -p "please review changes then press enter to commit: $(CABALFILES)"
git commit -m "regenerate cabal files" $(CABALFILES)
# we call in shake for this job; so dependencies aren't checked here
genmanuals: Shake #$(call def-help,genmanuals, regenerate embedded manuals (might need -B) )
./Shake manuals
updatemanuals: genmanuals $(call def-help,updatemanuals, regenerate embedded manuals and commit (might need -B) )
@read -p "please review changes then press enter to commit: $(shell ls hledger*/doc/*.[15]*)"
git commit -m "regenerate embedded manuals" hledger*/doc/*.[15]*
tagrelease: \
$(call def-help,tagrelease, commit a release tag based on $(VERSIONFILE) for each package )
@ -1373,13 +1420,14 @@ hackageupload: \
# @darcs changes --from-tag $(FROMTAG) --count
# @echo
showreleaseauthors: \
$(call def-help,showreleaseauthors, show author names since last release)
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)..
cloc: \
$(call def-help,cloc, count lines of source code )
cloc: $(call def-help,cloc, count lines of source code )
@echo Lines of code including tests:
@cloc --exclude-lang=HTML --exclude-dir=.stack-work,.idea,dist,old,bin,doc,site,.tutorial-data,static,angular .
@ -1462,17 +1510,8 @@ cloc: \
###############################################################################
$(call def-help-subsection,MISCELLANEOUS:)
# XXX enable for all cabal files when hpack is a little better
# gencabalfiles: $$(CABALFILES)
gencabalfiles: site/hakyll-std/hakyll-std.cabal \
$(call def-help,gencabalfiles, regenerate cabal files from their package.yaml definitions )
%.cabal: $$(dir $$@)package.yaml \
$(call def-help-hide,PATH/SOME.cabal, regenerate a cabal file from its package.yaml definition with hpack )
cd $(dir $*) && \
hpack && \
touch $(notdir $@) && \
cabal check
Shake: Shake.hs $(call def-help,Shake, ensure the Shake script is compiled )
./Shake.hs
cabal%: \
$(call def-help,cabalCMD, run cabal CMD inside each hledger package directory )
@ -1503,7 +1542,7 @@ tag: emacstags-ctags \
emacstags:
rm -f TAGS
hasktags -e $(SOURCEFILES)
for f in Makefile $(WEBFILES) $(HPACKFILES) $(CABALFILES) $(DOCFILES); do \
for f in Makefile $(WEBCODEFILES) $(HPACKFILES) $(CABALFILES) $(DOCSOURCEFILES); do \
printf " \n$$f,1\n" >> TAGS; \
done
@ -1546,4 +1585,4 @@ Clean: stackclean cabalclean cleanghc cleantags clean-manpages \
-include local.mk
$(call def-help-section,------------------)
#$(call def-help-section,------------------)