1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
#
#
# Change this to match your expat installation.
EXPAT_LIB=-lexpat
EXPAT_LIBDIR=/usr/local/lib
EXPAT_INCDIR=/usr/local/include
NAME=expat
OBJECTS=expat.cmo
XOBJECTS=$(OBJECTS:.cmo=.cmx)
C_OBJECTS=expat_stubs$(EXT_OBJ)
ARCHIVE=$(NAME).cma
XARCHIVE=$(ARCHIVE:.cma=.cmxa)
XSARCHIVE=$(ARCHIVE:.cma=.cmxs)
CARCHIVE_NAME=mlexpat
CARCHIVE=lib$(CARCHIVE_NAME)$(EXT_LIB)
# Flags for the C compiler.
CFLAGS=-DFULL_UNROLL -O2 -I$(EXPAT_INCDIR)
OCAMLFIND=ocamlfind
OCAMLPKGS=-package bytes
OCAMLC=$(OCAMLFIND) ocamlc $(OCAMLPKGS)
OCAMLOPT=$(OCAMLFIND) ocamlopt $(OCAMLPKGS)
OCAMLDEP=$(OCAMLFIND) ocamldep $(OCAMLPKGS)
OCAMLMKLIB=$(OCAMLFIND) ocamlmklib $(OCAMLPKGS)
OCAMLDOC=$(OCAMLFIND) ocamldoc $(OCAMLPKGS)
OCAMLDIR=$(shell $(OCAMLFIND) query stdlib)
include $(OCAMLDIR)/Makefile.config
OPT_TARGETS= $(XARCHIVE)
ifeq ($(SUPPORTS_SHARED_LIBRARIES),true)
OPT_TARGETS+= $(XSARCHIVE)
endif
.PHONY: all
all: $(ARCHIVE)
.PHONY: allopt
allopt: $(OPT_TARGETS)
depend: *.c *.ml *.mli
gcc -I $(OCAMLDIR) -MM *.c > depend
$(OCAMLDEP) *.mli *.ml >> depend
## Library creation
$(CARCHIVE): $(C_OBJECTS)
$(OCAMLMKLIB) -oc $(CARCHIVE_NAME) $(C_OBJECTS) \
-L$(EXPAT_LIBDIR) $(EXPAT_LIB)
$(ARCHIVE): $(CARCHIVE) $(OBJECTS)
$(OCAMLMKLIB) -o $(NAME) $(OBJECTS) -oc $(CARCHIVE_NAME) \
-L$(EXPAT_LIBDIR) $(EXPAT_LIB)
$(XARCHIVE): $(CARCHIVE) $(XOBJECTS)
$(OCAMLMKLIB) -o $(NAME) $(XOBJECTS) -oc $(CARCHIVE_NAME) \
-L$(EXPAT_LIBDIR) $(EXPAT_LIB)
$(XSARCHIVE): $(CARCHIVE) $(XOBJECTS)
$(OCAMLOPT) -linkall -shared -o $(XSARCHIVE) $(XOBJECTS) $(CARCHIVE) \
-ccopt -L$(EXPAT_LIBDIR) -cclib $(EXPAT_LIB)
## Installation
.PHONY: install
install: all
{ test ! -f $(XARCHIVE) || extra="$(OPT_TARGETS) $(NAME)$(EXT_LIB)"; }; \
$(OCAMLFIND) install $(NAME) META $(NAME).cmi $(NAME).mli $(ARCHIVE) \
lib$(CARCHIVE_NAME)$(EXT_LIB) $$extra \
-optional dll$(CARCHIVE_NAME)$(EXT_DLL)
.PHONY: uninstall
uninstall:
$(OCAMLFIND) remove $(NAME)
## Documentation
.PHONY: doc
doc: FORCE
cd doc; $(OCAMLDOC) -html -I .. ../$(NAME).mli
## Testing
.PHONY: testall
testall: test testopt
.PHONY: test
test: unittest
CAML_LD_LIBRARY_PATH=$(pwd) ./unittest
.PHONY: testopt
testopt: unittest.opt
./unittest.opt
unittest: all unittest.ml
$(OCAMLFIND) ocamlc -o unittest -package oUnit -ccopt -L. -linkpkg \
$(ARCHIVE) unittest.ml
unittest.opt: allopt unittest.ml
$(OCAMLFIND) ocamlopt -o unittest.opt -package oUnit -ccopt -L. -linkpkg \
$(XARCHIVE) unittest.ml
## Cleaning up
.PHONY: clean
clean::
rm -f *~ *.cm* *$(EXT_OBJ) *$(EXT_LIB) *$(EXT_DLL) doc/*.html doc/*.css depend \
unittest unittest.opt oUnit*.cache
FORCE:
.SUFFIXES: .ml .mli .cmo .cmi .cmx
.mli.cmi:
$(OCAMLC) -c $(COMPFLAGS) $<
.ml.cmo:
$(OCAMLC) -c $(COMPLAGS) $<
.ml.cmx:
$(OCAMLOPT) -c $(COMPFLAGS) $<
.c.o:
$(OCAMLC) -c -ccopt "$(CFLAGS)" $<
include depend
|