include Makefile.inc OBJDIR = $(BUILDDIR)/$(OBJ)/hatlib/$(HC) TARGDIR = $(LIBDIR)/$(MACHINE)/hatlib/$(HC) TARGET = $(TARGDIR)/libHShat.a PRECFLAGS = -DVERSION="\"$(HATVERSION)\"" \ -DFILEVERSION="\"$(HATFILEVERSION)\"" \ -I$(INCDIR) HIERDIRS = Data Debug Control Control/Monad System System/IO System/Console \ Test \ Text Text/ParserCombinators Text/ParserCombinators/Parsec \ Text/PrettyPrint Foreign Foreign/Marshal #Foreign/C HATDIRS = Hat $(patsubst %, Hat/%, ${HIERDIRS}) OBJDIRS = $(patsubst %, ${OBJDIR}/%, ${HATDIRS}) TARGDIRS = $(patsubst %, ${TARGDIR}/%, ${HATDIRS}) ifeq "$(findstring ghc, $(HC))" "ghc" # must give package name whilst building, plus we need the FFI ifeq "504" "${GHCSYM}" HFLAGS = -package-name hat -fglasgow-exts \ $(shell ${LOCAL}fixghc ${GHCSYM} -package lang -package base) \ -fno-warn-overlapping-patterns -fno-warn-missing-methods \ -fwarn-duplicate-exports \ -i$(OBJDIR) -I. -I$(INCDIR) $(shell echo ${BUILDOPTS}) \ '-\#include "hat-c.h"' PKGCONF = hat-package.conf else ifeq "602" "${GHCSYM}" HFLAGS = -package-name hat -fglasgow-exts \ -package base -package parsec \ -fno-warn-overlapping-patterns -fno-warn-missing-methods \ -fno-warn-duplicate-exports -fallow-undecidable-instances \ -i$(OBJDIR) -I. -I$(INCDIR) $(shell echo ${BUILDOPTS}) \ '-\#include "hat-c.h"' PKGCONF = hat-package.conf else ifeq "604" "${GHCSYM}" HFLAGS = -package-name hat -fglasgow-exts \ -package base -package parsec -package mtl \ -fno-warn-overlapping-patterns -fno-warn-missing-methods \ -fno-warn-duplicate-exports -fallow-undecidable-instances \ -i$(OBJDIR) -I. -I$(INCDIR) $(shell echo ${BUILDOPTS}) \ '-\#include "hat-c.h"' else # assume 606 or greater HFLAGS = -package-name hat-$(HATVERSION) -fglasgow-exts \ -package base -package parsec -package mtl \ -fno-warn-overlapping-patterns -fno-warn-missing-methods \ -fno-warn-duplicate-exports -fallow-undecidable-instances \ -i$(OBJDIR) -I. -I$(INCDIR) $(shell echo ${BUILDOPTS}) \ '-\#include "hat-c.h"' endif PKGCONF = Hat.pkgconf endif endif CFLAGS = -O -D__GLASGOW_HASKELL__ $(PRECFLAGS) CPPFLAGS = -D__GLASGOW_HASKELL__=$(GHCSYM) GHCONLYSRCS = \ Control/Monad/Reader.hs Control/Monad/Writer.hs \ Control/Monad/State.hs Control/Monad/RWS.hs \ Control/Monad/Cont.hs Control/Monad/Error.hs Control/Monad/List.hs endif ifeq "$(findstring nhc98, $(HC))" "nhc98" HFLAGS = -I$(OBJDIR) -I. -I$(INCDIR) -package base +RTS -K12M -H64M -RTS \ $(shell echo ${BUILDOPTS}) CFLAGS = -O -D__NHC__ $(PRECFLAGS) CPPFLAGS = -D__NHC__=$(shell cat ${BUILDDIR}/nhcsym) GHCONLYSRCS = PKGCONF = hat.cabal # for time profiling of traced programs: #HFLAGS = -z +RTS -K16M -H64M -RTS endif export HFLAGS # C sources are just compiled normally CSRCS = hat-c.c COBJS = $(patsubst %.c, $(OBJDIR)/%.o, $(CSRCS)) # plain Haskell sources are also compiled normally PLAINSRCS = \ Hat/Hat.hs Hat/Hack.hs Hat/PreludeBuiltinTypes.hs Hat/IOBuiltin.hs \ Hat/SystemBuiltin.hs Hat/TimeBuiltin.hs Hat/RandomBuiltin.hs \ Hat/DirectoryBuiltin.hs Hat/Data/IORefBuiltin.hs \ Hat/Foreign/BuiltinTypes.hs Hat/Data/PackedStringBuiltin.hs \ Hat/Data/WordBuiltin.hs PLAINOBJS = $(patsubst %.hs, $(OBJDIR)/%.o, $(PLAINSRCS)) # these Haskell sources undergo hat-trans before compilation TRANSSRCS = \ PreludeBuiltin.hs PreludeBasic.hs IOBuiltinTypes.hs \ SystemBuiltinTypes.hs TimeBuiltinTypes.hs DirectoryBuiltinTypes.hs \ Char.hs Ratio.hs List.hs Complex.hs Numeric.hs \ Maybe.hs Monad.hs Ix.hs Array.hs IO.hs System.hs \ Locale.hs CPUTime.hs Time.hs Random.hs Directory.hs \ Data/IORef.hs Data/Bool.hs Data/Char.hs Data/Complex.hs Data/Ix.hs \ Data/Array.hs Data/Bits.hs Data/Either.hs Data/Maybe.hs \ Data/FiniteMap.hs Data/List.hs Data/Ratio.hs Data/Set.hs \ Data/Tuple.hs Data/PackedString.hs Data/Monoid.hs \ Data/Word.hs \ Control/Monad.hs Control/Monad/Fix.hs Control/Arrow.hs \ Control/Monad/Identity.hs Control/Monad/Trans.hs \ System/CPUTime.hs System/Cmd.hs System/Random.hs System/Directory.hs \ System/Environment.hs System/Exit.hs System/Locale.hs System/Time.hs \ System/IO/Unsafe.hs System/IO.hs System/IO/Error.hs \ System/Console/GetOpt.hs \ Debug/Trace.hs Test/QuickCheck.hs Text/Show.hs Text/Read.hs \ Text/PrettyPrint/HughesPJ.hs Text/PrettyPrint.hs \ Text/ParserCombinators/Parsec/Char.hs \ Text/ParserCombinators/Parsec/Combinator.hs \ Text/ParserCombinators/Parsec/Error.hs \ Text/ParserCombinators/Parsec/Expr.hs \ Text/ParserCombinators/Parsec/Pos.hs \ Text/ParserCombinators/Parsec/Prim.hs \ Text/ParserCombinators/Parsec.hs \ Foreign/Ptr.hs Foreign/StablePtr.hs Foreign/ForeignPtr.hs \ Foreign/Storable.hs Foreign/Marshal/Error.hs \ Text/ParserCombinators/Parsec/Perm.hs \ $(GHCONLYSRCS) # Text/ParserCombinators/Parsec/Language.hs \ # Text/ParserCombinators/Parsec/Token.hs TRANSHATS = $(patsubst %, Hat/%, $(TRANSSRCS)) TRANSOBJS = $(patsubst %.hs, $(OBJDIR)/Hat/%.o, $(TRANSSRCS)) # these Haskell sources are just like TRANSSRCS except we need to # fiddle with the .hx file afterwards FIDDLESRCS = Prelude.hs FIDDLEHATS = $(patsubst %, Hat/%, $(FIDDLESRCS)) FIDDLEOBJS = $(patsubst %.hs, $(OBJDIR)/Hat/%.o, $(FIDDLESRCS)) all: $(OBJDIR) $(OBJDIRS) $(TARGDIR) $(TARGDIRS) $(TARGET) $(PKGCONF) mkdir -p $(INCDIR)/hat 2>/dev/null || $(TRUE) for dir in $(HIERDIRS); \ do mkdir -p $(INCDIR)/hat/$$dir 2>/dev/null || $(TRUE); \ done $(INSTALL) *.hx $(INCDIR)/hat for dir in $(HIERDIRS); \ do $(INSTALL) $$dir/*.hx $(INCDIR)/hat/$$dir; \ done $(INSTALL) $(PKGCONF) $(TARGDIR)/hat-package.conf for dir in $(HATDIRS); \ do $(INSTALL) $(OBJDIR)/$$dir/*.hi $(TARGDIR)/$$dir; \ done clean: -rm -rf $(OBJDIR) $(TRANSHATS) $(FIDDLEHATS) Hat/*.hi Hat/Hat.hx \ $(patsubst %.hs, %.hx, $(TRANSSRCS)) $(OBJDIR) $(OBJDIRS) $(TARGDIR) $(TARGDIRS): mkdir -p $@ || $(TRUE) $(PLAINOBJS): $(OBJDIR)/%.o: %.hs $(HC) $(HFLAGS) -cpp -c -o $@ $< mv $(patsubst %.hs, %.hi, $<) $(patsubst %.hs, ${OBJDIR}/%.hi, $<) $(TRANSOBJS): $(OBJDIR)/Hat/%.o: %.hs $(LOCAL)hat-trans -P. -I. -trusted -prelude $(CPPFLAGS) $< $(HC) $(HFLAGS) -c -o $@ Hat/$< mv $(patsubst %.hs, Hat/%.hi, $<) $(patsubst %.hs, ${OBJDIR}/Hat/%.hi, $<) $(FIDDLEOBJS): $(OBJDIR)/Hat/%.o: %.hs $(LOCAL)hat-trans -cpp -P. -I. -trusted -prelude $(CPPFLAGS) $< $(HC) $(HFLAGS) -c -o $@ Hat/$< mv $(patsubst %.hs, Hat/%.hi, $<) $(patsubst %.hs, ${OBJDIR}/Hat/%.hi, $<) $(LOCAL)hat-trans -cpp -DHX -P. -I. -trusted -prelude $(CPPFLAGS) $< $(COBJS): $(OBJDIR)/%.o: %.c $(CC) $(CFLAGS) -c -o $@ $< # single archive for all object files $(TARGET): $(COBJS) $(PLAINOBJS) $(FIDDLEOBJS) $(TRANSOBJS) $(AR) cr $(TARGET) $(COBJS) $(PLAINOBJS) $(FIDDLEOBJS) $(TRANSOBJS) ranlib $(TARGET) # the new (ghc-6.4) package story Hat.pkgconf: hat.cabal cp hat.cabal $@ echo "depends: base, haskell98, mtl, parsec" >>$@ echo "hs-libraries: HShat" >>$@ # Here are the extra dependencies. $(OBJDIR)/Hat/PreludeBuiltinTypes.o: $(OBJDIR)/Hat/Hat.o $(OBJDIR)/Hat/PreludeBuiltin.o: $(OBJDIR)/Hat/PreludeBuiltinTypes.o $(OBJDIR)/Hat/PreludeBasic.o: $(OBJDIR)/Hat/PreludeBuiltin.o $(OBJDIR)/Hat/Prelude.o: $(OBJDIR)/Hat/PreludeBasic.o $(OBJDIR)/Hat/Char.o: $(OBJDIR)/Hat/PreludeBasic.o $(OBJDIR)/Hat/IOBuiltin.o: $(OBJDIR)/Hat/Hat.o $(OBJDIR)/Hat/IOBuiltinTypes.o \ $(OBJDIR)/Hat/PreludeBuiltinTypes.o $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/IOBuiltinTypes.o: $(OBJDIR)/Hat/Ix.o $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/Array.o: $(OBJDIR)/Hat/Ix.o $(OBJDIR)/Hat/List.o \ $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/Complex.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/IO.o: $(OBJDIR)/Hat/Ix.o $(OBJDIR)/Hat/PreludeBuiltinTypes.o \ $(OBJDIR)/Hat/IOBuiltinTypes.o $(OBJDIR)/Hat/IOBuiltin.o $(OBJDIR)/Hat/Ix.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/List.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/Maybe.o $(OBJDIR)/Hat/Maybe.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/Monad.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/Numeric.o: $(OBJDIR)/Hat/PreludeBasic.o $(OBJDIR)/Hat/Ratio.o: $(OBJDIR)/Hat/PreludeBasic.o $(OBJDIR)/Hat/SystemBuiltinTypes.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/SystemBuiltin.o: $(OBJDIR)/Hat/SystemBuiltinTypes.o $(OBJDIR)/Hat/System.o: $(OBJDIR)/Hat/SystemBuiltin.o $(OBJDIR)/Hat/TimeBuiltinTypes.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/TimeBuiltin.o: $(OBJDIR)/Hat/TimeBuiltinTypes.o \ $(OBJDIR)/Hat/Locale.o $(OBJDIR)/Hat/Time.o: $(OBJDIR)/Hat/TimeBuiltin.o $(OBJDIR)/Hat/Locale.o $(OBJDIR)/Hat/RandomBuiltin.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/Random.o: $(OBJDIR)/Hat/RandomBuiltin.o $(OBJDIR)/Hat/DirectoryBuiltinTypes.o: $(OBJDIR)/Hat/Prelude.o $(OBJDIR)/Hat/DirectoryBuiltin.o: $(OBJDIR)/Hat/DirectoryBuiltinTypes.o $(OBJDIR)/Hat/Directory.o: $(OBJDIR)/Hat/DirectoryBuiltin.o $(OBJDIR)/Hat/Data/IORef.o: $(OBJDIR)/Hat/Data/IORefBuiltin.o $(OBJDIR)/Hat/Data/Word.o: $(OBJDIR)/Hat/Data/WordBuiltin.o $(OBJDIR)/Hat/Control/Monad/Fix.o: $(OBJDIR)/Hat/System/IO.o $(OBJDIR)/Hat/Control/Monad/Identity.o: $(OBJDIR)/Hat/Control/Monad/Fix.o $(OBJDIR)/Hat/Control/Arrow.o: $(OBJDIR)/Hat/Control/Monad.o \ $(OBJDIR)/Hat/Control/Monad/Fix.o $(OBJDIR)/Hat/System/IO.o: $(OBJDIR)/Hat/System/IO/Unsafe.o $(OBJDIR)/Hat/Text/PrettyPrint.o: $(OBJDIR)/Hat/Text/PrettyPrint/HughesPJ.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Char.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Pos.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Prim.o \ $(OBJDIR)/Hat/Data/Char.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Combinator.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Prim.o \ $(OBJDIR)/Hat/Control/Monad.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Error.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Pos.o \ $(OBJDIR)/Hat/Data/List.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Expr.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Prim.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Combinator.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Language.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Token.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Perm.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Prim.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Pos.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Error.o \ $(OBJDIR)/Hat/Control/Monad.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Token.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec.o \ $(OBJDIR)/Hat/Data/Char.o $(OBJDIR)/Hat/Data/List.o $(OBJDIR)/Hat/Text/ParserCombinators/Parsec.o: \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Pos.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Error.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Prim.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Combinator.o \ $(OBJDIR)/Hat/Text/ParserCombinators/Parsec/Char.o # C-files dependencies. $(OBJDIR)/hat-c.o: hat-c.c hat-c.h $(INCDIR)/art.h