diff --git a/Makefile b/Makefile index c69c955e0..1df17d600 100644 --- a/Makefile +++ b/Makefile @@ -78,12 +78,14 @@ WEBFILES:= \ DOCFILES:= \ *.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 -DEFINEFLAGS:= PREFERMACUSRLIBFLAGS=-L/usr/lib GHCMEMFLAGS= #+RTS -M200m -RTS -BUILDFLAGS:=-rtsopts -DMAKE $(WARNINGS) $(INCLUDEPATHS) $(PREFERMACUSRLIBFLAGS) -DPATCHLEVEL=$(PATCHLEVEL) $(GHCMEMFLAGS) $(HCFLAGS) +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 @@ -140,22 +142,22 @@ allcabal%: # auto-recompile and run (something, eg --help or unit tests) whenever a module changes auto: sp - cd hledger; $(AUTOBUILD) $(MAIN) -o ../bin/hledger $(BUILDFLAGS) --run --version + $(AUTOBUILD) $(MAIN) -o bin/hledger $(AUTOBUILDFLAGS) --run --version autotest: sp - cd hledger; $(AUTOBUILD) $(MAIN) -o ../bin/hledger $(BUILDFLAGS) --run test + $(AUTOBUILD) $(MAIN) -o bin/hledger $(AUTOBUILDFLAGS) --run test autotest-%: sp - cd hledger; $(AUTOBUILD) $(MAIN) -o ../bin/hledger $(BUILDFLAGS) --run test $* + $(AUTOBUILD) $(MAIN) -o bin/hledger $(AUTOBUILDFLAGS) --run test $* autoweb: sp - cd hledger-web; $(AUTOBUILD) hledger-web.hs -o ../bin/hledger-web $(BUILDFLAGS) -DDEVELOPMENT --run -B --port 5001 --base-url http://localhost:5001 -f test.journal + cd hledger-web; $(AUTOBUILD) hledger-web.hs -o bin/hledger-web $(AUTOBUILDFLAGS) -DDEVELOPMENT --run -B --port 5001 --base-url http://localhost:5001 -f test.journal autovty: sp - cd hledger-vty; $(AUTOBUILD) hledger-vty.hs -o ../bin/hledger-vty $(BUILDFLAGS) --run --help + cd hledger-vty; $(AUTOBUILD) hledger-vty.hs -o bin/hledger-vty $(AUTOBUILDFLAGS) --run --help autochart: sp - cd hledger-chart; $(AUTOBUILD) hledger-chart.hs -o ../bin/hledger-chart $(BUILDFLAGS) --run --help + cd hledger-chart; $(AUTOBUILD) hledger-chart.hs -o bin/hledger-chart $(AUTOBUILDFLAGS) --run --help # check for sp and explain how to get it if not found. sp: @@ -169,11 +171,11 @@ hledgerall: bin/hledger hledger-web hledger-vty hledger-chart # build hledger binary as quickly as possible bin/hledger: - cd hledger; ghc --make $(MAIN) -o ../bin/hledger $(BUILDFLAGS) + ghc --make $(MAIN) -o bin/hledger $(BUILDFLAGS) # build a GHC-version-specific hledger binary without disturbing with other GHC version builds bin/hledger.ghc-%: $(SOURCEFILES) - cd hledger; ghc-$* --make $(MAIN) -o ../$@ $(BUILDFLAGS) -outputdir .ghc-$* + ghc-$* --make $(MAIN) -o $@ $(BUILDFLAGS) -outputdir .ghc-$* # build hledger with the main supported GHC versions bin/hledger.ghcall: \ @@ -185,30 +187,30 @@ bin/hledger.ghcall: \ # build the fastest binary we can bin/hledgeropt: - cd hledger; ghc --make $(MAIN) -o ../$@ $(BUILDFLAGS) -O2 # -fvia-C # -fexcess-precision -optc-O3 -optc-ffast-math + ghc --make $(MAIN) -o $@ $(BUILDFLAGS) -O2 # -fvia-C # -fexcess-precision -optc-O3 -optc-ffast-math # build the time profiling binary. cabal install --reinstall -p some libs may be required. bin/hledgerp: - cd hledger; ghc --make $(MAIN) -o ../$@ $(BUILDFLAGS) $(PROFBUILDFLAGS) + ghc --make $(MAIN) -o $@ $(BUILDFLAGS) $(PROFBUILDFLAGS) # build the heap profiling binary for coverage reports and heap profiles. # Keep these .o files separate from the regular ones. hledgerhpc: - cd hledger; ghc --make $(MAIN) -fhpc -o ../bin/hledgerhpc -outputdir .hledgerhpcobjs $(BUILDFLAGS) + ghc --make $(MAIN) -fhpc -o bin/hledgerhpc -outputdir .hledgerhpcobjs $(BUILDFLAGS) # build other executables quickly bin/hledger-web: - cd hledger-web; ghc --make hledger-web.hs -o ../bin/hledger-web $(BUILDFLAGS) + cd hledger-web; ghc --make hledger-web.hs -o bin/hledger-web $(BUILDFLAGS) bin/hledger-web-production: - cd hledger-web; ghc --make hledger-web.hs -o ../$@ $(BUILDFLAGS) + cd hledger-web; ghc --make hledger-web.hs -o $@ $(BUILDFLAGS) bin/hledger-vty: - cd hledger-vty; ghc --make hledger-vty.hs -o ../bin/hledger-vty $(BUILDFLAGS) + cd hledger-vty; ghc --make hledger-vty.hs -o bin/hledger-vty $(BUILDFLAGS) bin/hledger-chart: - cd hledger-chart; ghc --make hledger-chart.hs -o ../bin/hledger-chart $(BUILDFLAGS) + cd hledger-chart; ghc --make hledger-chart.hs -o bin/hledger-chart $(BUILDFLAGS) # build portable releaseable binaries for gnu/linux linuxbinaries: linuxbinary-hledger \ @@ -238,7 +240,7 @@ macbinaries: macbinary-hledger \ # Clunky, does the link twice. macbinary-%: BINARY=`echo $(BINARYFILENAME) | sed -e 's/hledger/$*/'` ; \ - LINKCMD=`cd $* && ghc -v --make $*.hs $(MACRELEASEBUILDFLAGS) -o ../bin/$$BINARY 2>&1 | egrep "bin/gcc.*bin/$$BINARY"` ; \ + LINKCMD=`cd $* && ghc -v --make $*.hs $(MACRELEASEBUILDFLAGS) -o bin/$$BINARY 2>&1 | egrep "bin/gcc.*bin/$$BINARY"` ; \ PORTABLELINKCMD=`echo $$LINKCMD | sed -e 's/ -framework GMP//'` ; \ echo $$PORTABLELINKCMD; $$PORTABLELINKCMD @@ -481,7 +483,7 @@ viewcoverage: # get a debug prompt ghci: - cd hledger; ghci $(INCLUDEPATHS) $(MAIN) + ghci $(INCLUDEPATHS) $(MAIN) ghci-vty: ghci $(INCLUDEPATHS) hledger-vty/Hledger/Vty/Main.hs @@ -600,7 +602,6 @@ HADDOCK=haddock --no-warnings --prologue .haddockprologue #--optghc='-hide-packa # we define HADDOCK to disable cabal-file-th code which requires a cabal file in the current dir haddock: .haddockprologue $(HADDOCK) --title "hledger-* API docs" \ - --optghc '-DHADDOCK' \ -o site/api \ --html \ --source-module=src/%{MODULE/./-}.html \ diff --git a/hledger-web/Hledger/Web/Options.hs b/hledger-web/Hledger/Web/Options.hs index e6caadcdf..feb03aa68 100644 --- a/hledger-web/Hledger/Web/Options.hs +++ b/hledger-web/Hledger/Web/Options.hs @@ -7,7 +7,6 @@ module Hledger.Web.Options where import Prelude import Data.Maybe -import Distribution.PackageDescription.TH (packageVariable, package, pkgName, pkgVersion) import System.Console.CmdArgs import System.Console.CmdArgs.Explicit @@ -15,12 +14,11 @@ import Hledger.Cli hiding (progname,version,prognameandversion) import Hledger.Web.Settings progname, version :: String -#if HADDOCK -progname = "" -version = "" +progname = "hledger-web" +#ifdef VERSION +version = VERSION #else -progname = $(packageVariable (pkgName . package)) -version = $(packageVariable (pkgVersion . package)) +version = "" #endif prognameandversion :: String prognameandversion = progname ++ " " ++ version :: String diff --git a/hledger-web/hledger-web.cabal b/hledger-web/hledger-web.cabal index dfa141624..106b2092c 100644 --- a/hledger-web/hledger-web.cabal +++ b/hledger-web/hledger-web.cabal @@ -1,4 +1,5 @@ name: hledger-web +-- also in cpp-options below version: 0.18.2 category: Finance synopsis: A web interface for the hledger accounting tool. @@ -77,7 +78,7 @@ library Hledger.Web.Handlers ghc-options: -Wall -O0 -fno-warn-unused-do-bind - cpp-options: -DDEVELOPMENT + cpp-options: -DVERSION="0.18.2" -DDEVELOPMENT extensions: TemplateHaskell QuasiQuotes @@ -93,7 +94,7 @@ executable hledger-web Buildable: False if flag(dev) - cpp-options: -DDEVELOPMENT + cpp-options: -DVERSION="0.18.2" -DDEVELOPMENT ghc-options: -Wall -O0 -fno-warn-unused-do-bind else ghc-options: -Wall -O2 -fno-warn-unused-do-bind @@ -126,7 +127,6 @@ executable hledger-web hledger == 0.18.2 , hledger-lib == 0.18.2 , base >= 4.3 && < 5 - , cabal-file-th , cmdargs >= 0.10 && < 0.11 , directory , filepath diff --git a/hledger/Hledger/Cli/Version.hs b/hledger/Hledger/Cli/Version.hs index 7bf5f7402..0fa4a6415 100644 --- a/hledger/Hledger/Cli/Version.hs +++ b/hledger/Hledger/Cli/Version.hs @@ -10,7 +10,6 @@ module Hledger.Cli.Version ( binaryfilename ) where -import Distribution.PackageDescription.TH (packageVariable, package, pkgName, pkgVersion) import System.Info (os, arch) import Text.Printf @@ -19,12 +18,11 @@ import Hledger.Utils -- package name and version from the cabal file progname, version, prognameandversion :: String -#if HADDOCK -progname = "" -version = "" +progname = "hledger" +#ifdef VERSION +version = VERSION #else -progname = $(packageVariable (pkgName . package)) -version = $(packageVariable (pkgVersion . package)) +version = "" #endif prognameandversion = progname ++ " " ++ version diff --git a/hledger/hledger.cabal b/hledger/hledger.cabal index b570c1c79..41d633393 100644 --- a/hledger/hledger.cabal +++ b/hledger/hledger.cabal @@ -1,4 +1,5 @@ name: hledger +-- also in cpp-options below version: 0.18.2 category: Finance synopsis: The main command-line interface for the hledger accounting tool. @@ -40,8 +41,7 @@ flag threaded Default: True library - -- XXX should set patchlevel here as in Makefile - cpp-options: -DPATCHLEVEL=0 + cpp-options: -DVERSION="0.18.2" ghc-options: -W -- should be the same as below exposed-modules: @@ -64,7 +64,7 @@ library build-depends: hledger-lib == 0.18.2 ,base >= 4.3 && < 5 - ,cabal-file-th + -- ,cabal-file-th ,containers ,cmdargs >= 0.10 && < 0.11 ,directory @@ -110,8 +110,7 @@ executable hledger Hledger.Cli.Print Hledger.Cli.Register Hledger.Cli.Stats - -- XXX should set patchlevel here as in Makefile - cpp-options: -DPATCHLEVEL=0 + cpp-options: -DVERSION="0.18.2" ghc-options: -W if flag(threaded) ghc-options: -threaded @@ -119,7 +118,6 @@ executable hledger build-depends: hledger-lib == 0.18.2 ,base >= 4.3 && < 5 - ,cabal-file-th ,containers ,cmdargs >= 0.10 && < 0.11 ,directory