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
syntax highlighted by Code2HTML, v. 0.9.1