SOURCEFILES=*hs MAIN=rss2irc.hs EXE=rss2irc BUILDFLAGS=-Wall -fno-warn-orphans TIME:=$(shell date +"%Y%m%d%H%M") #HEAPPROFFLAGS=-hc HEAPPROFFLAGS=-ht #HEAPPROFFLAGS=-hT # command to run during "make prof/heap/coverage" REPORTCMD=-n4 -i0 http://losangeles.craigslist.org/cpg/index.rss # command to run during "make ci" CICMD=x -n0 # document viewing commands VIEWHTMLCMD=open VIEWPSCMD=open build: cabal configure && cabal build deploy: cabal configure --builddir=dist-production && cabal build --builddir=dist-production ci: sp --no-exts --no-default-map -o $(EXE) ghc $(BUILDFLAGS) --make rss2irc.hs --run $(CICMD) CI2CMD=-i1 irc.freenode.net '\#smtest' rss2irctestbot 'http://losangeles.craigslist.org/cpg/index.rss' --author --link --replace '(&.*?;|<.*?>)/' --debug -rm2 ci2: sp --no-exts --no-default-map -o $(EXE) ghc $(BUILDFLAGS) --make rss2irc.hs --run $(CI2CMD) ghci: ghci $(MAIN) reports: profile heap coverage @echo Reports are at http://joyful.com/repos/rss2irc/profs # generate, save and display a standard profile profile: rss2ircp profs @echo "Profiling $(REPORTCMD)" @./rss2ircp +RTS -p -RTS $(REPORTCMD) #>/dev/null @mv rss2ircp.prof profs/$(TIME).prof #-orig.prof # tools/simplifyprof.hs profs/$(TIME)-orig.prof >profs/$(TIME).prof @(cd profs; rm -f latestprof*.txt; ln -s $(TIME).prof latestprof.txt) # ; ln -s $(TIME)-orig.prof latestprof-orig.prof @echo; cat profs/latestprof.txt # generate, save and display a graphical heap profile heap: rss2ircp profs @echo "Profiling heap with $(REPORTCMD)" ./rss2ircp +RTS $(HEAPPROFFLAGS) -RTS $(REPORTCMD) #>/dev/null mv rss2ircp.hp profs/$(TIME).hp (cd profs; \ hp2ps $(TIME).hp; rm -f latestheap.ps; ln -s $(TIME).ps latestheap.ps; rm -f *.aux) # $(VIEWPSCMD) profs/latestheap.ps # generate and display a code coverage report coverage: rss2irccov profs resettix @echo "Generating coverage report with $(REPORTCMD)" ./rss2irccov $(REPORTCMD) #>/dev/null hpc markup --destdir=profs rss2irccov cd profs; rm -f latestcoverage.html; ln -s hpc_index.html latestcoverage.html # cd profs; rm -f index.html; ln -s hpc_index.html index.html # $(VIEWHTMLCMD) profs/coverage/index.html # build the profiling-enabled binary. You may need to cabal install # --reinstall -p some libs. rss2ircp: $(SOURCEFILES) ghc --make rss2irc.hs -prof -auto-all -o rss2ircp $(BUILDFLAGS) # build the coverage-enabled binary. coverage-enabled .o files are kept # separate to avoid contamination. rss2irccov: $(SOURCEFILES) ghc --make rss2irc.hs -fhpc -o rss2irccov -outputdir .coverageobjs $(BUILDFLAGS) resettix: rm -f rss2irccov.tix profs: mkdir -p profs tag: emacstags emacstags: @rm -f TAGS; hasktags -e $(SOURCEFILES) *.cabal clean: rm -f `find . -name "*.o" -o -name "*.hi" -o -name "*~" -o -name "darcs-amend-record*"` Clean: clean rm -f TAGS tags $(EXE) rss2ircp rss2irccov cabal clean