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 114 115 116
|
ccopts = $(CFLAGS) -Wall -O3 -funroll-loops -fPIC -DPIC
OCAMLC = ocamlc
OCAMLOPT = ocamlopt
OCAMLMKLIB = ocamlmklib
# on unix architecture we just use the default value
EXE=
OBJ=o
A=a
SO=so
# on windows architecture redefine some values
ifeq "$(shell ocamlc -config | fgrep 'os_type:')" "os_type: Win32"
EXE=.exe
SO=dll
ifeq "$(shell ocamlc -config | fgrep 'ccomp_type:')" "ccomp_type: msvc"
OBJ=obj
A=lib
endif
endif
OCAMLOPTFLAGS =
OCAML_TEST_INC = -I `ocamlfind query oUnit` -I . -w -24
OCAML_TEST_LIB = `ocamlfind query oUnit`/oUnit.cmxa
PROGRAMS_BINS = sha1sum sha256sum sha512sum
PROGRAMS = $(addsuffix $(EXE), $(PROGRAMS_BINS))
allshabytes = $(foreach n, 1 256 512, sha$(n).lib.$(OBJ) sha$(n)_stubs.$(OBJ) sha$(n).cmo)
allshaopts = $(foreach n, 1 256 512, sha$(n).lib.$(OBJ) sha$(n)_stubs.$(OBJ) sha$(n).cmx)
all: sha1.cmi sha1.cma sha1.cmxa sha256.cma sha256.cmxa sha512.cma sha512.cmxa sha.cma sha.cmxa
all-byte: sha1.cma sha256.cma sha512.cma sha.cma
bins: $(PROGRAMS)
sha1sum$(EXE): sha1.cmxa sha256.cmxa sha512.cmxa shasum.cmx
$(OCAMLOPT) $(OCAMLOPTFLAGS) -o $@ -cclib -L. $+
sha256sum$(EXE): sha1sum$(EXE)
cp $< $@
sha512sum$(EXE): sha1sum$(EXE)
cp $< $@
sha.cma: $(allshabytes)
$(OCAMLMKLIB) -o sha $(allshabytes)
sha.cmxa: $(allshaopts)
$(OCAMLMKLIB) -o sha $(allshaopts)
sha1.cma: sha1.cmi sha1.lib.$(OBJ) sha1_stubs.$(OBJ) sha1.cmo
$(OCAMLMKLIB) -o sha1 sha1.lib.$(OBJ) sha1_stubs.$(OBJ) sha1.cmo
sha1.cmxa: sha1.cmi sha1.lib.$(OBJ) sha1_stubs.$(OBJ) sha1.cmx
$(OCAMLMKLIB) -o sha1 sha1.lib.$(OBJ) sha1_stubs.$(OBJ) sha1.cmx
sha256.cma: sha256.cmi sha256.lib.$(OBJ) sha256_stubs.$(OBJ) sha256.cmo
$(OCAMLMKLIB) -o sha256 sha256.lib.$(OBJ) sha256_stubs.$(OBJ) sha256.cmo
sha256.cmxa: sha256.cmi sha256.lib.$(OBJ) sha256_stubs.$(OBJ) sha256.cmx
$(OCAMLMKLIB) -o sha256 sha256.lib.$(OBJ) sha256_stubs.$(OBJ) sha256.cmx
sha512.cma: sha512.cmi sha512.lib.$(OBJ) sha512_stubs.$(OBJ) sha512.cmo
$(OCAMLMKLIB) -o sha512 sha512.lib.$(OBJ) sha512_stubs.$(OBJ) sha512.cmo
sha512.cmxa: sha512.cmi sha512.lib.$(OBJ) sha512_stubs.$(OBJ) sha512.cmx
$(OCAMLMKLIB) -o sha512 sha512.lib.$(OBJ) sha512_stubs.$(OBJ) sha512.cmx
tests: sha.test
./sha.test
sha.test: sha1.cmxa sha256.cmxa sha512.cmxa sha.test.cmx
%.test:
$(OCAMLOPT) -o $@ $(OCAML_BFLAGS) unix.cmxa $(OCAML_TEST_INC) $(OCAML_TEST_LIB) $+
%.test.cmo: %.test.ml
$(OCAMLC) -c -o $@ $(OCAML_BFLAGS) -custom $(OCAML_TEST_INC) $<
%.test.cmx: %.test.ml
$(OCAMLOPT) -c -o $@ $(OCAML_BFLAGS) $(OCAML_TEST_INC) $<
%.cmo: %.ml
$(OCAMLC) -c -o $@ $<
%.cmi: %.mli
$(OCAMLC) -c -o $@ $<
%.cmx: %.ml
$(OCAMLOPT) $(OCAMLOPTFLAGS) -c -o $@ $<
%.$(OBJ): %.c
$(OCAMLC) -ccopt "$(ccopts)" -c -o $@ $<
%.lib.$(OBJ): %.$(OBJ)
mv $< $@
.PHONY: clean install uninstall doc
doc:
[ -d html ] && rm -f html/* || mkdir html
ocamldoc -html -d html *.mli
clean:
rm -f *.$(OBJ) *.$(A) *.$(SO) *.cmo *.cmi *.cma *.cmx *.cmxa sha.test $(PROGRAMS)
install: sha1.cma sha1.cmxa sha256.cma sha256.cmxa sha512.cma sha512.cmxa sha.cma sha.cmxa META
ocamlfind install sha META *.mli *.cmx sha1.cmi sha1.cma sha1.cmxa sha256.cmi sha256.cma sha256.cmxa sha512.cmi sha512.cma sha512.cmxa sha.cma sha.cmxa *.$(A) *.$(SO)
install-byte: sha1.cma sha256.cma sha512.cma sha.cma
ocamlfind install sha META *.mli sha1.cmi sha1.cma sha256.cmi sha256.cma sha512.cmi sha512.cma sha.cma *.$(A) *.$(SO)
uninstall:
ocamlfind remove sha
|