tools: makefile updates & cleanups
This commit is contained in:
		
							parent
							
								
									e701c2b1cb
								
							
						
					
					
						commit
						97a8ed23df
					
				
							
								
								
									
										99
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								Makefile
									
									
									
									
									
								
							| @ -3,8 +3,8 @@ | |||||||
| # ghc 6.12 executables need a locale
 | # ghc 6.12 executables need a locale
 | ||||||
| export LANG=en_US.UTF-8 | export LANG=en_US.UTF-8 | ||||||
| 
 | 
 | ||||||
| # command line to run during "make prof" and "make heap"
 | # command to run during "make prof" and "make heap"
 | ||||||
| PROFCMD=bin/hledgerp balance -f data/100x100x10.journal >/dev/null | PROFCMD=bin/hledgerp balance -f data/1000x1000x10.journal >/dev/null | ||||||
| #PROFCMD=bin/hledgerp balance >/dev/null
 | #PROFCMD=bin/hledgerp balance >/dev/null
 | ||||||
| 
 | 
 | ||||||
| #PROFRTSFLAGS=-p
 | #PROFRTSFLAGS=-p
 | ||||||
| @ -17,7 +17,7 @@ COVCMD=test | |||||||
| # or in the current directory. hledger executables for benchmarking should
 | # or in the current directory. hledger executables for benchmarking should
 | ||||||
| # generally be the standard optimised cabal build, constrained to parsec 2.
 | # generally be the standard optimised cabal build, constrained to parsec 2.
 | ||||||
| BENCHEXES=hledger-0.12.1 hledger-0.13 hledger-0.14 hledger-0.15 hledger-0.16 hledger-0.17 hledger-0.18 hledgeropt ledger | BENCHEXES=hledger-0.12.1 hledger-0.13 hledger-0.14 hledger-0.15 hledger-0.16 hledger-0.17 hledger-0.18 hledgeropt ledger | ||||||
| BENCHEXES=hledger-0.18 hledger ledger | BENCHEXES=hledger-0.18 hledgeropt ledger | ||||||
| 
 | 
 | ||||||
| # misc. tools
 | # misc. tools
 | ||||||
| BROWSE=google-chrome | BROWSE=google-chrome | ||||||
| @ -69,49 +69,51 @@ WEBFILES:= \ | |||||||
| DOCFILES:= \
 | DOCFILES:= \
 | ||||||
| 	*.md | 	*.md | ||||||
| 
 | 
 | ||||||
| LASTTAG:=$(shell darcs show tags | head -1) |  | ||||||
| PATCHLEVEL:=$(shell expr `darcs changes --count --from-tag=\\\\\.` - 1) |  | ||||||
| WARNINGS:=-W -fwarn-tabs -fno-warn-name-shadowing #-fwarn-orphans -fwarn-simple-patterns -fwarn-monomorphism-restriction |  | ||||||
| PREFERMACUSRLIBFLAGS=-L/usr/lib |  | ||||||
| GHCMEMFLAGS= #+RTS -M200m -RTS |  | ||||||
| BUILDFLAGS1:=-rtsopts -DMAKE -DPATCHLEVEL=$(PATCHLEVEL) $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) $(GHCMEMFLAGS) $(HCFLAGS) |  | ||||||
| BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(LASTTAG)"' |  | ||||||
| AUTOBUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='\"$(LASTTAG)\"'  # different quoting for sp |  | ||||||
| PROFBUILDFLAGS:=-prof -osuf hs_p #-prof-auto |  | ||||||
| LINUXRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) -O2 -static -optl-static -optl-pthread |  | ||||||
| MACRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) -O2 # -optl-L/usr/lib |  | ||||||
| #WINDOWSRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS)
 |  | ||||||
| TIME:=$(shell date +"%Y%m%d%H%M") |  | ||||||
| 
 |  | ||||||
| # searchpath executable used for automatic recompilation, http://joyful.com/repos/searchpath
 |  | ||||||
| GHC=ghc |  | ||||||
| AUTOBUILD=sp --no-exts --no-default-map $(GHC) --make -O0 $(GHCMEMFLAGS) |  | ||||||
| 
 |  | ||||||
| # file defining the current release version
 |  | ||||||
| VERSIONFILE=VERSION |  | ||||||
| # two or three-part version string, whatever's in VERSION
 |  | ||||||
| VERSION:=$(shell grep -v '^--' $(VERSIONFILE)) |  | ||||||
| # three-part version string, 0-padded if necessary
 |  | ||||||
| ifeq ($(shell ghc -e "length (filter (=='.') \"$(VERSION)\")"), 1) |  | ||||||
| VERSION3:=$(VERSION).0 |  | ||||||
| else |  | ||||||
| VERSION3:=$(VERSION) |  | ||||||
| endif |  | ||||||
| # files which should be updated when the version changes
 | # files which should be updated when the version changes
 | ||||||
| VERSIONSENSITIVEFILES=\
 | VERSIONSENSITIVEFILES=\
 | ||||||
| 	$(CABALFILES) \
 | 	$(CABALFILES) \
 | ||||||
| 	MANUAL.md \
 | 	MANUAL.md \
 | ||||||
| #	DOWNLOAD.md \
 | #	DOWNLOAD.md \
 | ||||||
| # source file which should be touched to ensure up to date version string
 |  | ||||||
| VERSIONHS=hledger/Hledger/Cli/Version.hs |  | ||||||
| 
 | 
 | ||||||
| # get an accurate binary filename from the current source on the current platform
 | # file(s) which require recompilation for a build to have an up-to-date version string
 | ||||||
| # nb not := as that would break the makefile when hledger is not compiling.
 | VERSIONSOURCEFILE=hledger/Hledger/Cli/Version.hs | ||||||
| BINARYFILENAME=$(shell touch $(VERSIONHS); runhaskell -ihledger -ihledger-lib $(MAIN) --binary-filename) |  | ||||||
| 
 | 
 | ||||||
| RELEASEBINARYSUFFIX:=$(shell echo "-$(VERSION)-`uname`-`arch`" | tr '[:upper:]' '[:lower:]') | # master file defining the current release/build version
 | ||||||
|  | VERSIONFILE=VERSION | ||||||
| 
 | 
 | ||||||
| default: bin/hledgerdev | # two or three-part version string, whatever's in VERSION
 | ||||||
|  | VERSION:=$(shell cat $(VERSIONFILE)) | ||||||
|  | 
 | ||||||
|  | # the number of changes recorded since last tag in this repo
 | ||||||
|  | PATCHLEVEL:=$(shell expr `darcs changes --count --from-tag=\\\\\.` - 1) | ||||||
|  | 
 | ||||||
|  | # build flags
 | ||||||
|  | WARNINGS:=-W -fwarn-tabs -fno-warn-name-shadowing #-fwarn-orphans -fwarn-simple-patterns -fwarn-monomorphism-restriction | ||||||
|  | PREFERMACUSRLIBFLAGS=-L/usr/lib | ||||||
|  | GHCMEMFLAGS= #+RTS -M200m -RTS | ||||||
|  | BUILDFLAGS1:=-rtsopts $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) $(GHCMEMFLAGS) -DPATCHLEVEL=$(PATCHLEVEL) | ||||||
|  | BUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='"$(VERSION)"' | ||||||
|  | AUTOBUILDFLAGS:=$(BUILDFLAGS1) -DVERSION='\"$(VERSION)\"'  # different quoting for sp | ||||||
|  | PROFBUILDFLAGS:=-prof -fprof-auto -osuf hs_p | ||||||
|  | LINUXRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) -O2 -static -optl-static -optl-pthread | ||||||
|  | MACRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) -O2 # -optl-L/usr/lib | ||||||
|  | #WINDOWSRELEASEBUILDFLAGS:=-DMAKE $(WARNINGS) $(INCLUDEPATHS)
 | ||||||
|  | 
 | ||||||
|  | # searchpath executable used for automatic recompilation, http://joyful.com/repos/searchpath
 | ||||||
|  | AUTOBUILD=sp --no-exts --no-default-map $(GHC) --make -O0 $(GHCMEMFLAGS) | ||||||
|  | GHC=ghc | ||||||
|  | 
 | ||||||
|  | # get an accurate binary filename for the current source and platform, slow but reliable. Avoid := here.
 | ||||||
|  | BINARYFILENAME=$(shell touch $(VERSIONSOURCEFILE); runhaskell -ihledger -ihledger-lib $(MAIN) --binary-filename) | ||||||
|  | 
 | ||||||
|  | # some other thing for linux binary filenames
 | ||||||
|  | RELEASEBINARYSUFFIX=$(shell echo "-$(VERSION)-`uname`-`arch`" | tr '[:upper:]' '[:lower:]') | ||||||
|  | 
 | ||||||
|  | TIME:=$(shell date +"%Y%m%d%H%M") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | defaulttarget: bin/hledgerdev | ||||||
| 
 | 
 | ||||||
| ######################################################################
 | ######################################################################
 | ||||||
| # BUILDING
 | # BUILDING
 | ||||||
| @ -174,7 +176,7 @@ bin/hledgeropt: | |||||||
| 
 | 
 | ||||||
| # build the time profiling binary. cabal install --reinstall -p some libs may be required.
 | # build the time profiling binary. cabal install --reinstall -p some libs may be required.
 | ||||||
| bin/hledgerp: | bin/hledgerp: | ||||||
| 	ghc --make $(MAIN) -o $@ $(BUILDFLAGS) $(PROFBUILDFLAGS) | 	ghc --make $(BUILDFLAGS) $(PROFBUILDFLAGS) $(MAIN) -o $@ | ||||||
| 
 | 
 | ||||||
| # build the heap profiling binary for coverage reports and heap profiles.
 | # build the heap profiling binary for coverage reports and heap profiles.
 | ||||||
| # Keep these .o files separate from the regular ones.
 | # Keep these .o files separate from the regular ones.
 | ||||||
| @ -195,6 +197,10 @@ linuxbinaries: 	linuxbinary-hledger \ | |||||||
| 	@echo 'Please check the binaries look portable, then make compressbinaries:' | 	@echo 'Please check the binaries look portable, then make compressbinaries:' | ||||||
| 	-file bin/*`arch` | 	-file bin/*`arch` | ||||||
| 
 | 
 | ||||||
|  | # work around for inconsistently-named (why ?) hledger/hledger-cli.hs
 | ||||||
|  | linuxbinary-hledger: | ||||||
|  | 	ghc --make hledger/hledger-cli.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS) | ||||||
|  | 
 | ||||||
| linuxbinary-%: | linuxbinary-%: | ||||||
| 	ghc --make $*/$*.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS) | 	ghc --make $*/$*.hs -o bin/$*$(RELEASEBINARYSUFFIX) $(LINUXRELEASEBUILDFLAGS) | ||||||
| 
 | 
 | ||||||
| @ -385,7 +391,7 @@ quickbench: samplejournals bench.tests tools/simplebench | |||||||
| 
 | 
 | ||||||
| # run simple performance benchmarks and archive results
 | # run simple performance benchmarks and archive results
 | ||||||
| # Requires some commands defined in bench.tests and some BENCHEXES defined above.
 | # Requires some commands defined in bench.tests and some BENCHEXES defined above.
 | ||||||
| simplebench: samplejournals bench.tests tools/simplebench | bench: samplejournals bench.tests tools/simplebench | ||||||
| 	tools/simplebench -fbench.tests $(BENCHEXES) | tee profs/$(TIME).bench | 	tools/simplebench -fbench.tests $(BENCHEXES) | tee profs/$(TIME).bench | ||||||
| 	@rm -f benchresults.* | 	@rm -f benchresults.* | ||||||
| 	@(cd profs; rm -f latest.bench; ln -s $(TIME).bench latest.bench) | 	@(cd profs; rm -f latest.bench; ln -s $(TIME).bench latest.bench) | ||||||
| @ -718,11 +724,13 @@ hledger-lib/hledger-lib.cabal: $(VERSIONFILE) | |||||||
| hledger/hledger.cabal: $(VERSIONFILE) | hledger/hledger.cabal: $(VERSIONFILE) | ||||||
| 	perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@ | 	perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@ | ||||||
| 	perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@ | 	perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@ | ||||||
|  | 	perl -p -e "s/(-DVERSION=\")[^\"]+/\$${1}$(VERSION)/" -i $@ | ||||||
| 
 | 
 | ||||||
| hledger-web/hledger-web.cabal: $(VERSIONFILE) | hledger-web/hledger-web.cabal: $(VERSIONFILE) | ||||||
| 	perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@ | 	perl -p -e "s/(^ *version:) *.*/\1 $(VERSION)/" -i $@ | ||||||
| 	perl -p -e "s/(^[ ,]*hledger *[>=]=) *.*/\1 $(VERSION)/" -i $@ | 	perl -p -e "s/(^[ ,]*hledger *[>=]=) *.*/\1 $(VERSION)/" -i $@ | ||||||
| 	perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@ | 	perl -p -e "s/(^[ ,]*hledger-lib *[>=]=) *.*/\1 $(VERSION)/" -i $@ | ||||||
|  | 	perl -p -e "s/(-DVERSION=\")[^\"]+/\$${1}$(VERSION)/" -i $@ | ||||||
| 
 | 
 | ||||||
| MANUAL.md: $(VERSIONFILE) | MANUAL.md: $(VERSIONFILE) | ||||||
| 	perl -p -e "s/(^This is the.*?manual.*? for hledger.*?) +[0-9.]+/\1 $(VERSION)./" -i $@ | 	perl -p -e "s/(^This is the.*?manual.*? for hledger.*?) +[0-9.]+/\1 $(VERSION)./" -i $@ | ||||||
| @ -749,14 +757,16 @@ push: pushprofs # pushlatestbinary | |||||||
| pull: pullprofs | pull: pullprofs | ||||||
| 	darcs pull -a simon@joyful.com:/repos/hledger | 	darcs pull -a simon@joyful.com:/repos/hledger | ||||||
| 
 | 
 | ||||||
|  | RSYNC=rsync | ||||||
|  | 
 | ||||||
| # push any new profiles and benchmark results to the public site
 | # push any new profiles and benchmark results to the public site
 | ||||||
| # beware, results will vary depending on which machine generated them
 | # beware, results will vary depending on which machine generated them
 | ||||||
| pushprofs: | pushprofs: | ||||||
| 	rsync -azP profs/ simon@joyful.com:/repos/hledger/profs/ | 	$(RSYNC) -azP profs/ simon@joyful.com:/repos/hledger/profs/ | ||||||
| 
 | 
 | ||||||
| # fetch any new profiles and benchmark results from the public site
 | # fetch any new profiles and benchmark results from the public site
 | ||||||
| pullprofs: | pullprofs: | ||||||
| 	rsync -azP simon@joyful.com:/repos/hledger/profs/ profs/ | 	$(RSYNC) -azP simon@joyful.com:/repos/hledger/profs/ profs/ | ||||||
| 
 | 
 | ||||||
| # compress the just-built platform binary. make hledgerPLATFORM first. Use
 | # compress the just-built platform binary. make hledgerPLATFORM first. Use
 | ||||||
| # the win variant on windows.
 | # the win variant on windows.
 | ||||||
| @ -765,7 +775,6 @@ compressbinary: | |||||||
| compressbinarywin: | compressbinarywin: | ||||||
| 	cd bin; zip -9 $(BINARYFILENAME).zip $(BINARYFILENAME) | 	cd bin; zip -9 $(BINARYFILENAME).zip $(BINARYFILENAME) | ||||||
| 
 | 
 | ||||||
| RSYNC=rsync -e 'ssh -p 5022' |  | ||||||
| # push the last-updated platform binary to the public download directory
 | # push the last-updated platform binary to the public download directory
 | ||||||
| pushlatestbinary: | pushlatestbinary: | ||||||
| 	cd bin; $(RSYNC) -aP `ls -t | head -2` simon@joyful.com:/repos/hledger/site/download/ | 	cd bin; $(RSYNC) -aP `ls -t | head -2` simon@joyful.com:/repos/hledger/site/download/ | ||||||
| @ -823,12 +832,12 @@ showunittestcoverage: | |||||||
| # 	@awk '/^** errors/, /^** / && !/^** errors/' NOTES.org | grep '^\*\*\* ' | tail +1
 | # 	@awk '/^** errors/, /^** / && !/^** errors/' NOTES.org | grep '^\*\*\* ' | tail +1
 | ||||||
| # 	@echo
 | # 	@echo
 | ||||||
| 
 | 
 | ||||||
| showunpushedchanges unpushed: | showunpushedchanges showunpushed: | ||||||
| 	@echo "Changes not yet pushed upstream (to `darcs show repo | grep 'Default Remote' | cut -c 17-`):" | 	@echo "Changes not yet pushed upstream (to `darcs show repo | grep 'Default Remote' | cut -c 17-`):" | ||||||
| 	@-darcs push simon@joyful.com:/repos/hledger --dry-run | grep '*' | tac | 	@-darcs push simon@joyful.com:/repos/hledger --dry-run | grep '*' | tac | ||||||
| 	@echo | 	@echo | ||||||
| 
 | 
 | ||||||
| showunreleasedcodechanges unreleased: | showunreleasedcodechanges showunreleased showchanges: | ||||||
| 	@echo "hledger code changes since last release:" | 	@echo "hledger code changes since last release:" | ||||||
| 	@darcs changes --from-tag $(FROMTAG) --matches "not (name docs: or name doc: or name site: or name tools:)" | grep '*' | 	@darcs changes --from-tag $(FROMTAG) --matches "not (name docs: or name doc: or name site: or name tools:)" | grep '*' | ||||||
| 	@echo | 	@echo | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user