[486] | 1 | # -*- Makefile -*- |
---|
| 2 | BTARGET = $(TARGET).byte |
---|
| 3 | OTARGET = $(TARGET).native |
---|
| 4 | BLTARGET = $(TARGET).cma |
---|
| 5 | BNTARGET = $(TARGET).cmxa |
---|
| 6 | STARGET = $(shell if `which ocamlopt`; then \ |
---|
| 7 | echo $(OTARGET); \ |
---|
| 8 | else echo $(BTARGET); fi) |
---|
| 9 | |
---|
| 10 | TESTDIR = tests |
---|
| 11 | |
---|
| 12 | ######################### |
---|
| 13 | ## Tools configuration ## |
---|
| 14 | ######################### |
---|
| 15 | |
---|
| 16 | # Menhir can be told to produce a parser that explains what |
---|
| 17 | # it is doing. |
---|
| 18 | ifeq ($(DEBUGPARSING), yes) |
---|
| 19 | MENHIROPT=-yaccflag --explain -yaccflag --trace |
---|
| 20 | else |
---|
| 21 | MENHIROPT=-yaccflag --explain |
---|
| 22 | endif |
---|
| 23 | |
---|
| 24 | # In Emacs, use classic display to enable error jumping. |
---|
| 25 | TERM = $(shell echo $$TERM) |
---|
| 26 | OCAMLBUILDCMD=$(shell if `which ocamlopt`; then \ |
---|
| 27 | echo "ocamlbuild"; \ |
---|
| 28 | else echo "ocamlbuild -byte-plugin"; fi) |
---|
| 29 | ifeq ($(TERM), dumb) |
---|
| 30 | OCAMLBUILD = $(OCAMLBUILDCMD) -cflag "-dtypes" -tag debug -classic-display -no-hygiene $(MENHIROPT) |
---|
| 31 | else |
---|
| 32 | OCAMLBUILD = $(OCAMLBUILDCMD) -no-hygiene $(MENHIROPT) -lflags -I,`pwd`/lib |
---|
| 33 | endif |
---|
| 34 | |
---|
| 35 | OCAMLDOC = ocamldoc |
---|
| 36 | HEADACHE = headache |
---|
| 37 | |
---|
| 38 | ######### |
---|
| 39 | # Rules # |
---|
| 40 | ######### |
---|
| 41 | |
---|
| 42 | .PHONY: configure all-generic byte opt doc clean dist install uninstall headers clear |
---|
| 43 | |
---|
| 44 | all-generic: configure clear $(STARGET) $(TARGET) |
---|
| 45 | |
---|
| 46 | $(TARGET): |
---|
| 47 | ln -s $(STARGET) $(TARGET) |
---|
| 48 | |
---|
| 49 | clear: |
---|
| 50 | rm -f $(STARGET) |
---|
| 51 | |
---|
| 52 | opt: $(OTARGET) |
---|
| 53 | |
---|
| 54 | byte: $(BTARGET) |
---|
| 55 | |
---|
| 56 | %: |
---|
| 57 | @ $(OCAMLBUILD) src/$@ |
---|
| 58 | |
---|
| 59 | byte-debug: |
---|
| 60 | $(OCAMLBUILD) -tag debug src/$(BTARGET) |
---|
| 61 | |
---|
| 62 | ifeq ($(strip $(PREFIX)),) |
---|
| 63 | install uninstall: |
---|
| 64 | @echo "Cannot (un)install $(EXECUTABLE): the PREFIX variable is undefined." && false |
---|
| 65 | else |
---|
| 66 | install: $(EXECUTABLE) |
---|
| 67 | mkdir -p $(PREFIX)/bin/ |
---|
| 68 | install $(STARGET) $(PREFIX)/bin/$(TARGET) |
---|
| 69 | uninstall: |
---|
| 70 | /bin/rm -f $(PREFIX)/bin/$(TARGET) |
---|
| 71 | endif |
---|
| 72 | |
---|
| 73 | ####################### |
---|
| 74 | # Administrative part # |
---|
| 75 | ####################### |
---|
| 76 | |
---|
| 77 | headers: |
---|
| 78 | for i in src/*.ml src/*.mli src/*.mly; do \ |
---|
| 79 | $(HEADACHE) -h admin/header -c admin/headache.cfg $$i; \ |
---|
| 80 | done |
---|
| 81 | |
---|
| 82 | clean: |
---|
| 83 | @ $(OCAMLBUILD) -clean |
---|
| 84 | make -C cparser clean |
---|
| 85 | make -C $(TESTDIR) clean |
---|
| 86 | find -name '*~' -exec rm '{}' \; |
---|
| 87 | rm -fr *~ $(TARGET) $(PACKAGE) $(PACKAGE).tar.gz |
---|
| 88 | |
---|
| 89 | doc: byte |
---|
| 90 | $(OCAMLBUILD) $(TARGET).docdir/index.html |
---|
| 91 | mkdir -p doc/html |
---|
| 92 | rm -f $(TARGET).docdir/style.css 2> /dev/null |
---|
| 93 | mv $(TARGET).docdir/* doc/html |
---|
| 94 | rm $(TARGET).docdir |
---|
| 95 | |
---|
| 96 | dist: |
---|
| 97 | rm -fr $(PACKAGE) |
---|
| 98 | mkdir $(PACKAGE) |
---|
| 99 | for i in `cat distributed_files` doc/html/*.html; do \ |
---|
| 100 | if test -f $$i; then \ |
---|
| 101 | cp -fr --parents $$i $(PACKAGE); \ |
---|
| 102 | else \ |
---|
| 103 | mkdir -p $$i; \ |
---|
| 104 | fi; \ |
---|
| 105 | done |
---|
| 106 | tar cvfz $(PACKAGE).tar.gz $(PACKAGE) |
---|
| 107 | |
---|
| 108 | check: all |
---|
| 109 | $(MAKE) -C $(TESTDIR) check |
---|