Makefile revision ef67402074be14deb95e4ff564737d5593144130
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# hetcats/Makefile
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# $Id$
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# Author: Klaus L�ttich
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# Year: 2003
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen# This Makefile will compile the new hetcats system and provides also
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# targets for test programs during implementation phases.
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# !!! Note: This makefile is written for GNU make !!!
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen# (gmake on solaris ; make on linux)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen####################################################################
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen## Some varibles, which control the compilation
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo SirainenINCLUDE_PATH = ghc:hetcats
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo SirainenCOMMONLIB_PATH = Common/Lib:Common/Lib/Parsec:Common/ATerm
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo SirainenCLEAN_PATH = Common:Logic:CASL:Syntax:Static:GUI:HasCASL:Haskell:Haskell/Language:Modal:CspCASL:$(INCLUDE_PATH)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo SirainenHC = ghc
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo SirainenPERL = perl
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo SirainenHAPPY = happy
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo SirainenDRIFT = $(PERL) utils/DrIFT
ec1fe002da484f4c06f0c072d673abac74b66b9eTimo SirainenAG = $(PERL) utils/ag
00b10a9ca50bca190e72a19aa6571ea612701d82Aki TuomiHADDOCK = $(PERL) utils/haddock
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo SirainenHC_FLAGS = -fglasgow-exts -fallow-overlapping-instances -Wall
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo SirainenHC_INCLUDE = -i$(INCLUDE_PATH)
ec1fe002da484f4c06f0c072d673abac74b66b9eTimo SirainenHC_PACKAGE =
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo SirainenAG_FLAGS = -mdcfs
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
00b10a9ca50bca190e72a19aa6571ea612701d82Aki Tuomi### Profiling and Warnings (only for debugging)
00b10a9ca50bca190e72a19aa6571ea612701d82Aki Tuomi### Attention every module must be compiled with profiling or the linker
00b10a9ca50bca190e72a19aa6571ea612701d82Aki Tuomi### cannot link the various .o files properly. So after switching on
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen### Profiling, do an 'gmake clean; gmake'
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen### If you need Profiling comment out the following line
402e999a878e0cc41a0afb830fea0a93afc75f0dTimo Sirainen#HC_PROF = -prof -auto-all -Wall
00b10a9ca50bca190e72a19aa6571ea612701d82Aki Tuomi
61cf001f1944d92eb25f113ba4c08985d6e30d53Timo SirainenHCI_OPTS = $(HC_FLAGS) $(HC_PACKAGE) $(HC_INCLUDE)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo SirainenHC_OPTS = $(HCI_OPTS) $(HC_PROF)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen### list of directories to run checks in
bf7dc750b95039981c0e9d728f313d50cf38a156Martti RannanjärviTESTDIRS = CASL HasCASL test
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen####################################################################
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen## sources for hetcats (semi - manually produced with a perl script)
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainenifneq ($(MAKECMDGOALS),clean)
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainenifneq ($(MAKECMDGOALS),bin_clean)
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainenifneq ($(MAKECMDGOALS),d_clean)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainenifneq ($(MAKECMDGOALS),real_clean)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainenifneq ($(MAKECMDGOALS),distclean)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Siraineninclude sources_hetcats.mk
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainenendif
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainenendif
ec1fe002da484f4c06f0c072d673abac74b66b9eTimo Sirainenendif
ec1fe002da484f4c06f0c072d673abac74b66b9eTimo Sirainenendif
ec1fe002da484f4c06f0c072d673abac74b66b9eTimo Sirainenendif
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
396e6d4f586f137f9f43b62f3d0502edbdc6c854Martti Rannanjärviobjects = $(patsubst %.lhs,%.o,$(sources:%.hs=%.o))
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen
ec1fe002da484f4c06f0c072d673abac74b66b9eTimo Sirainendrifted_files = Syntax/AS_Architecture.hs Syntax/AS_Library.hs\
ceb8c97c6c9fe0ee7eb544645c6bdb74dfcb519dJosef 'Jeff' Sipek Common/AS_Annotation.hs CASL/AS_Basic_CASL.hs Syntax/AS_Structured.hs
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# this variable holds the modules that should be documented
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen# the imported parsec library is not included!
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainendoc_sources = $(filter-out Nothing/Nothing% ,$(sources))
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen####################################################################
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen### targets
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen.PHONY : clean d_clean real_clean bin_clean check
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen.SECONDARY : %.hs %.d
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen#.PRECIOUS: sources_hetcats.mk
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainenhets: $(objects)
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen $(RM) $@
bf7dc750b95039981c0e9d728f313d50cf38a156Martti Rannanjärvi $(HC) -o $@ $(HC_OPTS) $(objects)
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainenhetcats-make: hets.hs utils/create_sources.pl $(drifted_files)
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) hetcats-make sources_hetcats.mk
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen $(HC) --make -o hets $< $(HC_OPTS) 2>&1 | tee hetcats-make && \
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen $(PERL) utils/create_sources.pl hetcats-make sources_hetcats.mk
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen###############################
1ea57ace3467dc68582e12349f2de7771f4dde78Timo Sirainen### TAGS files for (x)emacs
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen# load them with "M-x" "visit-tags-table" from
bf7dc750b95039981c0e9d728f313d50cf38a156Martti Rannanjärvi# "HetCATS/hetcats/hetcats.TAGS"
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen# use "M-." to search for a tag
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen# !!Beware this is somewhat instable, because it uses an absolute path!!
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainenhetcats.TAGS: $(sources)
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen /home/ger/linux/ghc-5.04.2/bin/i386-unknown-linux/hasktags \
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(sources); mv TAGS $@; mv tags hetcats.tags
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen###############################
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen### Documentation via haddock
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainendoc: docs/index.html utils/hd-lib
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainendocs/index.html: $(doc_sources)
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen $(HADDOCK) $(doc_sources) -o docs -h \
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen -t 'hets -- a heterogenous Specification (CASL) tool set'
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainenapache_doc:
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen cvs up -d
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) docs/*.html
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(MAKE) doc
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen $(PERL) utils/post_process_docs.pl docs \
6a262c9bd8f57cf1e57112e0522dbdab28ae8c29Timo Sirainen 'Common.Lib.Map.html:Common.Lib._Map.html'
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen
6a262c9bd8f57cf1e57112e0522dbdab28ae8c29Timo Sirainen###############
6a262c9bd8f57cf1e57112e0522dbdab28ae8c29Timo Sirainen### clean up
6a262c9bd8f57cf1e57112e0522dbdab28ae8c29Timo Sirainen
bf7dc750b95039981c0e9d728f313d50cf38a156Martti Rannanjärvi### removes *.hi and *.o in all include directories
6a262c9bd8f57cf1e57112e0522dbdab28ae8c29Timo Sirainenclean: bin_clean
6a262c9bd8f57cf1e57112e0522dbdab28ae8c29Timo Sirainen for p in $(subst :, ,$(CLEAN_PATH)) . ; do \
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen (cd $$p ; $(RM) *.hi *.o) ; done
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen### remove binaries
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainenbin_clean:
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen $(RM) hets
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen $(RM) test_parser
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen $(RM) CASL/capa
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen $(RM) HasCASL/hacapa
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) Haskell/hapa
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) Haskell/wrap
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) Syntax/hetpa
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) Static/hetana
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen $(RM) Static/hetana
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen $(RM) GUI/hetdg
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen $(RM) hetpa
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen $(RM) hetana
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen $(RM) hetdg
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen### additonally removes *.d (dependency files) in every include directory
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen### also delete *.d.bak (dependency file backups)
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainend_clean: clean
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen for p in $(subst :, ,$(CLEAN_PATH)) . ; do \
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen (cd $$p ; $(RM) *.d *.d.bak) ; done
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen### remove files also in own libraries
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainenlib_clean:
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen for p in $(subst :, ,$(COMMONLIB_PATH):$(CLEANPATH)) . ; do \
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen (cd $$p ; $(RM) *.hi *.d *.o) ; done
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainen### additionally removes the files that define the sources-variable
b932ee7fbbec6e79b777dcc7ba613b9e99f8337bTimo Sirainenreal_clean: bin_clean lib_clean
1a3f9d72e15fb931edf58f104fb7ff12d238f051Timo Sirainen $(RM) hetcats-make sources_hetcats.mk
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen $(RM) AS_*.hs
1b7e7ff3c57f4ff0ba5f8b8a2a26e8669f0ba7fdTimo Sirainen
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen### additionally removes files not in CVS tree
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainendistclean: real_clean
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen $(RM) hetcats/Version.hs
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen $(RM) $(drifted_files)
68a3f1b03fb0014b856abd2fee4932a0576bbe89Timo Sirainen $(RM) Haskell/Language/Parser.hs
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen####################################################################
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen### test targets
956a62e2b68e1c042bf2bcddd6f4ba79fec9745aTimo Sirainen####################################################################
eef4ba0cc3e78f8c26804c1c9251a76580a41f0cTimo Sirainen
f23baa3b53b1dd4eb19729e99a43937fa3c7f309Timo Sirainen### a parser to test annotation parser and Id parsers
c57ba1788a6598993a9625bbf26a4fedca23815eTimo Sirainentest_parser: Common/test_parser
c57ba1788a6598993a9625bbf26a4fedca23815eTimo Sirainen
c57ba1788a6598993a9625bbf26a4fedca23815eTimo SirainenCommon/test_parser: Common/test_parser.hs Common/AS_Annotation.der.hs
c57ba1788a6598993a9625bbf26a4fedca23815eTimo Sirainen $(RM) $@
c57ba1788a6598993a9625bbf26a4fedca23815eTimo Sirainen $(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 $(drifted_files) Haskell/Language/Parser.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
Haskell/Language/Parser.hs: Haskell/Language/Parser.ly
$(HAPPY) $<
### 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 $(drifted_files) Haskell/Language/Parser.hs *.hs
$(RM) $@
$(HC) --make -o $@ $< $(HC_OPTS)
### HetCASL parser
hetana: Static/hetana.hs $(drifted_files) *.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
%.ly: %.hs
$(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