include config.mk COMPILERS = ifneq "$(GHC)" "" COMPILERS += ghc endif # ifneq "$(HUGS)" "" # COMPILERS += hugs # endif #-------------------------------------------------------------------------- # DIRECTORIES #-------------------------------------------------------------------------- # library and doc output BUILDDIR = build DOCDIR = doc HOUTDIR = $(BUILDDIR)/Database HSQLLib = $(BUILDDIR)/libHSsql.a # source dirs VPATH = src #-------------------------------------------------------------------------- # SOURCES #-------------------------------------------------------------------------- HSC_SRC += HSQL.hsc ifeq "$(WithODBC)" "YES" HSC_SRC += HSQL/ODBC.hsc endif ifeq "$(WithPostgreSQL)" "YES" HSC_SRC += HSQL/PostgreSQL.hsc endif ifeq "$(WithMySQL)" "YES" HSC_SRC += HSQL/MySQL.hsc endif ifeq "$(WithSQLite)" "YES" HSC_SRC += HSQL/SQLite.hsc endif SO_SRC = $(patsubst %.hsc,$(HOUTDIR)/%.$(SO_EXT),$(HSC_SRC)) HS_SRC = $(HOUTDIR)/HSQL/Types.hs $(patsubst %.hsc,$(HOUTDIR)/%.hs,$(HSC_SRC)) HI_SRC = $(patsubst %.hs,%.hi,$(HS_SRC)) OBJS = $(patsubst %.hs,%.o, $(HS_SRC)) HS_DEPS = $(patsubst %.hs,%.d, $(HS_SRC)) ifeq "$(WithODBC)" "YES" ifeq "$(WIN32)" "YES" HsODBC_o = $(HOUTDIR)/HSQL/HsODBC.o endif endif #-------------------------------------------------------------------------- # FLAGS #-------------------------------------------------------------------------- FFIHUGS_FLAGS = $(patsubst %, +L"%", $(CPPFLAGS)) ifeq "$(WIN32)" "YES" ODBC_FFIHUGS_FLAGS = +L"$(HsODBC_o)" FFIHUGS_FLAGS += $(patsubst %, +L"%", $(patsubst -l%, %.lib, $(LDFLAGS))) else FFIHUGS_FLAGS += $(patsubst %, +L"%", $(LDFLAGS)) endif ifeq "$(HADDOCK)" "" HADDOCK = echo else HS_PPS = $(addsuffix .raw-hs, $(basename $(HS_SRC))) endif #-------------------------------------------------------------------------- # RULES #-------------------------------------------------------------------------- .SUFFIXES: .hs .hi .o .c # should be: # # $(HSC2HS) $< -o $@ $(CPPFLAGS) # # but there is a bug in hsc2hs from GHC 6.2 for Windows $(HOUTDIR)/%.hs: %.hsc $(HSC2HS) $< $(CPPFLAGS) mv $(patsubst %.hsc, %.hs, $<) $@ %.o : %.hs mkdir -p $(basename $<)_split rm -f $(basename $<)_split/* $(GHC) $< -O -c -i$(BUILDDIR) -fglasgow-exts -split-objs $(CPPFLAGS) -package-name hsql $(LD) -r -o $@ $(basename $<)_split/*.o @# create dependency file @$(GHC) $< -M -i$(BUILDDIR) -optdep-f -optdep$(*F).d $(CPPFLAGS) @sed -e 's|$(subst .hs,,$<)\.o|$*\.o|' $(*F).d > $*.d @rm $(*F).d .o.hi: @: %.$(SO_EXT): %.hs $(FFIHUGS) -98 +G -P$(BUILDDIR): $(FFIHUGS_FLAGS) $($(*F)_FFIHUGS_FLAGS) $< %.raw-hs : %.hs $(GHC) -Iincludes $(CPPFLAGS) -D__HADDOCK__ -E -cpp $< -o $<.tmp && sed -e 's/^#.*//' <$<.tmp >$@ all: $(patsubst %, all-%, $(COMPILERS)) all-ghc: $(HSQLLib) all-hugs: $(SO_SRC) $(HSQLLib): $(OBJS) $(HsODBC_o) rm -f $(HSQLLib) for i in $(patsubst %.o,%_split, $(OBJS)); do \ $(AR) -q $(HSQLLib) $$i/*.o; \ done $(AR) -q $(HSQLLib) $(HsODBC_o) genclean: distclean rm -rf configure autom4te.cache distclean: clean rm -f $(HSQLLib) rm -f config.status config.log config.mk hsql.pkg clean: rm -f $(OBJS) rm -f $(HI_SRC) rm -f $(SO_SRC) rm -f $(HS_SRC) rm -f $(patsubst %.hs,%.c,$(HS_SRC)) rm -f $(HS_PPS) rm -f $(HS_DEPS) rm -rf $(patsubst %.o,%_split, $(OBJS)) rm -f $(HSQLLib) docs : $(HS_PPS) mkdir -p $(DOCDIR) $(HADDOCK) -h -o $(DOCDIR) $(HS_PPS) install: $(patsubst %, install-%, $(COMPILERS)) install-ghc: $(HSQLLib) $(HI_SRC) docs $(INSTALL) -d $(GHC_DIR) $(INSTALL) $(HSQLLib) $(GHC_DIR)/libHSsql.a for i in $(patsubst $(BUILDDIR)/%,%,$(HI_SRC)); do \ $(INSTALL) -d $(GHC_DIR)/imports/`dirname $$i`; \ $(INSTALL) -c $(BUILDDIR)/$$i $(GHC_DIR)/imports/`dirname $$i`; \ done rm -f $(GHC_DIR)/HSsql.o $(GHC_PKG) --config-file=tmpConfig -u -g -i hsql.pkg if test -f $(DOCDIR)/index.html; then \ $(INSTALL) -d $(DOC_DIR); \ $(INSTALL) -c $(DOCDIR)/* $(DOC_DIR); \ fi install-hugs: $(HS_SRC) $(SO_SRC) $(INSTALL) -d $(HUGS_DIR)/libraries/Database for i in $(patsubst $(BUILDDIR)/%,%,$(HS_SRC) $(SO_SRC)); do \ $(INSTALL) -d $(HUGS_DIR)/libraries/`dirname $$i`; \ $(INSTALL) -c $(BUILDDIR)/$$i $(HUGS_DIR)/libraries/`dirname $$i`; \ done setup: Setup.lhs ghc -cpp --make -i../.. Setup.lhs -o setup 2>out.build -include $(HS_DEPS) $(HOUTDIR)/HSQL/ODBC.hs : HSQL/HsODBC.h $(HOUTDIR)/HSQL/Types.hs : HSQL/Types.hs cp $< $@ $(HOUTDIR)/HSQL/HsODBC.o : HSQL/HsODBC.c HSQL/HsODBC.h $(CC) $< -o $@ -O -c $(CPPFLAGS)