rules revision 29633f709477530c1dc68039695cdc3cbb051184
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt# hetcats/Makefile
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# $Id$
9210d8796eaf4125ac58c034f9b5ca167857a55aAutomatic Updater# Author: Klaus L�ttich
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# Year: 2003
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User
5347c0fcb04eaea19d9f39795646239f487c6207Tinderbox User# This Makefile will compile the new hetcats system and provides also
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt# targets for test programs during implementation phases.
d6fa26d0adaec6c910115be34fe7a5a5f402c14fMark Andrews
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt# !!! Note: This makefile is written for GNU make !!!
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt# (gmake on solaris ; make on linux)
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User####################################################################
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt## Some varibles, which control the compilation
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntINCLUDE_PATH = ghc:hetcats
e2e4d321999340802f77adaacd19c797d04b4b95Automatic UpdaterCOMMONLIB_PATH = Common/Lib:Common/Lib/Parsec:Common/ATerm
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntCLEAN_PATH = Common:Logic:CASL:Syntax:Static:GUI:HasCASL:Haskell:Haskell/Language:Modal:CspCASL:$(INCLUDE_PATH)
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntHC = ghc
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntPERL = perl
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntHAPPY = happy
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntDRIFT = $(PERL) utils/DrIFT
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntAG = $(PERL) utils/ag
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntHADDOCK = haddock
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
e2e4d321999340802f77adaacd19c797d04b4b95Automatic UpdaterHC_FLAGS = -fglasgow-exts -fallow-overlapping-instances -Wall
e2e4d321999340802f77adaacd19c797d04b4b95Automatic UpdaterHC_INCLUDE = -i$(INCLUDE_PATH)
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntHC_PACKAGE =
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntAG_FLAGS = -mdcfs
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User### Profiling and Warnings (only for debugging)
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### Attention every module must be compiled with profiling or the linker
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User### cannot link the various .o files properly. So after switching on
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### Profiling, do an 'gmake clean; gmake'
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User### If you need Profiling comment out the following line
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt#HC_PROF = -prof -auto-all -Wall
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntHCI_OPTS = $(HC_FLAGS) $(HC_PACKAGE) $(HC_INCLUDE)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserHC_OPTS = $(HCI_OPTS) $(HC_PROF)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User### list of directories to run checks in
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox UserTESTDIRS = Common/test CASL/test HasCASL/test ToHaskell test
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User####################################################################
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt## sources for hetcats (semi - manually produced with a perl script)
f5ae3cca1d2832239cc821bdef77e90c1739e66dTinderbox User
ec899c963c91c16c393e067996400ae244921110Tinderbox Userifneq ($(MAKECMDGOALS),clean)
ec899c963c91c16c393e067996400ae244921110Tinderbox Userifneq ($(MAKECMDGOALS),bin_clean)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntifneq ($(MAKECMDGOALS),d_clean)
ec899c963c91c16c393e067996400ae244921110Tinderbox Userifneq ($(MAKECMDGOALS),real_clean)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userifneq ($(MAKECMDGOALS),distclean)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntinclude sources_hetcats.mk
ec899c963c91c16c393e067996400ae244921110Tinderbox Userendif
ec899c963c91c16c393e067996400ae244921110Tinderbox Userendif
ec899c963c91c16c393e067996400ae244921110Tinderbox Userendif
76786c2904942b708d8a7a4659df74da5dc9446eEvan Huntendif
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userendif
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
ec899c963c91c16c393e067996400ae244921110Tinderbox Userobjects = $(patsubst %.lhs,%.o,$(sources:%.hs=%.o))
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntdrifted_files = Syntax/AS_Architecture.hs Syntax/AS_Library.hs\
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt Common/AS_Annotation.hs CASL/AS_Basic_CASL.hs Syntax/AS_Structured.hs
ec899c963c91c16c393e067996400ae244921110Tinderbox User
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunthappy_files = Haskell/Language/Parser.hs
ec899c963c91c16c393e067996400ae244921110Tinderbox User
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt# this variable holds the modules that should be documented
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# the imported parsec library is not included!
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Huntdoc_sources = $(filter-out Nothing/Nothing% ,$(sources))
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
ec899c963c91c16c393e067996400ae244921110Tinderbox User####################################################################
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt### targets
9d557856c2a19ec95ee73245f60a92f8675cf5baTinderbox User
ec899c963c91c16c393e067996400ae244921110Tinderbox User.PHONY : clean d_clean real_clean bin_clean check
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt.SECONDARY : %.hs %.d
ec899c963c91c16c393e067996400ae244921110Tinderbox User#.PRECIOUS: sources_hetcats.mk
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userall: $(sources)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $(HC) --make -o hets hets.hs $(HC_OPTS)
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userhets: $(sources)
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(HC) --make -o $@ hets.hs $(HC_OPTS)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunthets-old: $(objects)
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) $@
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(HC) -o hets $(HC_OPTS) $(objects)
ec899c963c91c16c393e067996400ae244921110Tinderbox User
ec899c963c91c16c393e067996400ae244921110Tinderbox Userhetcats-make: hets.hs utils/create_sources.pl $(drifted_files) $(happy_files)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $(RM) hetcats-make sources_hetcats.mk
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(HC) --make -o hets $< $(HC_OPTS) 2>&1 | tee hetcats-make && \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $(PERL) utils/create_sources.pl hetcats-make sources_hetcats.mk
ec899c963c91c16c393e067996400ae244921110Tinderbox User
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User###############################
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### TAGS files for (x)emacs
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User# load them with "M-x" "visit-tags-table" from
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt# "HetCATS/hetcats/hetcats.TAGS"
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater# use "M-." to search for a tag
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater# !!Beware this is somewhat instable, because it uses an absolute path!!
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updaterhetcats.TAGS: $(sources)
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater /home/ger/linux/ghc-5.04.2/bin/i386-unknown-linux/hasktags \
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater $(sources); mv TAGS $@; mv tags hetcats.tags
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt###############################
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### Documentation via haddock
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdoc: docs/index.html utils/hd-lib
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userdocs/index.html: $(doc_sources)
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $(HADDOCK) $(doc_sources) -o docs -h \
ec899c963c91c16c393e067996400ae244921110Tinderbox User -t 'hets -- a heterogenous Specification (CASL) tool set'
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userapache_doc:
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt cvs up -d
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $(MAKE) distclean
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(MAKE) hetcats-make
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) docs/*.html
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(MAKE) doc
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(PERL) utils/post_process_docs.pl docs \
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt 'Common.Lib.Map.html:Common.Lib._Map.html'
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt mv docs/* a-docs/
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt###############
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### clean up
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater### removes *.hi and *.o in all include directories
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userclean: bin_clean
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt for p in $(subst :, ,$(CLEAN_PATH)) . ; do \
ec899c963c91c16c393e067996400ae244921110Tinderbox User (cd $$p ; $(RM) *.hi *.o) ; done
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt
ec899c963c91c16c393e067996400ae244921110Tinderbox User### remove binaries
ec899c963c91c16c393e067996400ae244921110Tinderbox Userbin_clean:
ec899c963c91c16c393e067996400ae244921110Tinderbox User $(RM) hets
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater $(RM) Common/annos
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater $(RM) Common/test_parser
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater $(RM) CASL/capa
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater $(RM) HasCASL/hacapa
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $(RM) Haskell/hapa
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater $(RM) Haskell/wrap
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User $(RM) Syntax/hetpa
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $(RM) Static/hetana
ec899c963c91c16c393e067996400ae244921110Tinderbox User $(RM) Static/hetana
14a656f94b1fd0ababd84a772228dfa52276ba15Evan Hunt $(RM) GUI/hetdg
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater $(RM) hetpa
7ae7246a6339bb3a79ffc9f2f9c486de9a2bf65eAutomatic Updater $(RM) hetana
ec899c963c91c16c393e067996400ae244921110Tinderbox User $(RM) hetdg
ec899c963c91c16c393e067996400ae244921110Tinderbox User
ec899c963c91c16c393e067996400ae244921110Tinderbox User### additonally removes *.d (dependency files) in every include directory
2cbb4ab75757fbb656997a82c14ca07db37d481aAutomatic Updater### also delete *.d.bak (dependency file backups)
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userd_clean: clean
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt for p in $(subst :, ,$(CLEAN_PATH)) . ; do \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User (cd $$p ; $(RM) *.d *.d.bak) ; done
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User
7e71f05d8643aca84914437c900cb716444507e4Tinderbox User### remove files also in own libraries
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userlib_clean: clean
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User for p in $(subst :, ,$(COMMONLIB_PATH)) . ; do \
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox User (cd $$p ; $(RM) *.hi *.d *.o) ; done
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### additionally removes the files that define the sources-variable
fd2597f75693a2279fdf588bd40dfe2407c42028Tinderbox Userreal_clean: bin_clean lib_clean
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) hetcats-make sources_hetcats.mk
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) AS_*.hs
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### additionally removes files not in CVS tree
76786c2904942b708d8a7a4659df74da5dc9446eEvan Huntdistclean: real_clean
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) hetcats/Version.hs
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) $(drifted_files)
cd32f419a8a5432fbb139f56ee73cbf68b9350ccTinderbox User $(RM) Haskell/Language/Parser.hs
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater####################################################################
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### test targets
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt####################################################################
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt### a parser to test annotation parser and Id parsers
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunttest_parser: Common/test_parser
e2e4d321999340802f77adaacd19c797d04b4b95Automatic Updater
e2e4d321999340802f77adaacd19c797d04b4b95Automatic UpdaterCommon/test_parser: Common/test_parser.hs Common/AS_Annotation.der.hs
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(RM) $@
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt $(HC) --make -o $@ $< $(HC_OPTS)
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
c2258eedf2d9d0207b45b90014f8fde5413b41a3Tinderbox Userannos: Common/annos
76786c2904942b708d8a7a4659df74da5dc9446eEvan Hunt
76786c2904942b708d8a7a4659df74da5dc9446eEvan HuntCommon/annos: Common/annos.hs Common/AS_Annotation.der.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### interactive
ghci:
$(HC)i $(HCI_OPTS)
### christian's target
### CASL parser
capa: CASL/capa
CASL/capa: CASL/capa.lhs Common/*.hs CASL/*.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### HasCASL parser
hacapa: HasCASL/hacapa
HasCASL/hacapa: HasCASL/hacapa.lhs CASL/capa HasCASL/*.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### Haskell parser
hapa: Haskell/hapa
Haskell/hapa: Haskell/hapa.lhs Haskell/*.hs Haskell/Language/*.hs $(happy_files)
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### Haskell wrap parser
wrap: Haskell/wrap
Haskell/wrap: Haskell/wrap.lhs Haskell/*.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### HetCASL parser
hetpa: Syntax/hetpa.hs Syntax/*.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### HetCASL parser
hetana: Static/hetana.hs Static/*.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### HetCASL with dev graph
hetdg: GUI/hetdg.hs $(drifted_files) *.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS) -package-conf ../uni/uni-package.conf -package uni-davinci -package uni-server
### run tests in other directories
check: hetcats
for i in $(TESTDIRS); do $(MAKE) -C $$i check; done
####################################################################
## Preparing the version of HetCATS
hetcats/Version.hs: hetcats/Version.in version_nr
$(PERL) utils/build_version.pl version_nr < hetcats/Version.in > $@
## two hardcoded dependencies for a correct generation of Version.hs
hetcats/Options.hs: hetcats/Version.hs
hets.hs: hetcats/Version.hs
####################################################################
## rules for DrIFT
%.hs: %.ly
$(HAPPY) $<
%.hs: %.ag.hs
$(AG) $<
%.hs: %.der.hs
$(DRIFT) $< > $@
%.hs: %.ag
$(AG) $< -o $@
%.lhs: %.der.lhs
$(DRIFT) $< > $@
## compiling rules for object and interface files
%.o %.hi: %.hs
$(HC) -c $< $(HC_OPTS)
%.o %.hi: %.lhs
$(HC) -c $< $(HC_OPTS)
## compiling rules for dependencies
%.d : %.hs
$(HC) -M $< $(HC_OPTS) -optdep-f -optdep$@
%.d : %.lhs
$(HC) -M $< $(HC_OPTS) -optdep-f -optdep$@
####################################################################
## Setting a global search path (for dependency files)
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),real_clean)
ifneq ($(MAKECMDGOALS),d_clean)
ifneq ($(MAKECMDGOALS),real_clean)
ifneq ($(MAKECMDGOALS),distclean)
## include every .d file in INCLUDE_PATH
-include $(objects:.o=.d)
sources_hetcats.mk: hetcats-make hetcats/Version.hs
endif
endif
endif
endif
endif