Added 'make test' and some test scripts which exercise parts of the
[perl4caml.git] / Makefile
1 # Interface to Perl from OCaml.
2 # Copyright (C) 2003 Merjis Ltd.
3 # $Id: Makefile,v 1.29 2005-01-28 23:09:30 rich Exp $
4
5 include Makefile.config
6
7 OCAMLC := ocamlc
8 OCAMLOPT := ocamlopt
9 OCAMLMKLIB := ocamlmklib
10 OCAMLDEP := ocamldep
11 OCAMLDOC := ocamldoc
12
13 OCAMLCINCS := -I wrappers
14 OCAMLOPTINCS := $(OCAMLCINCS)
15
16 OCAMLCFLAGS := -w s -g $(OCAMLCINCS)
17 OCAMLOPTFLAGS := -w s $(OCAMLOPTINCS)
18
19 PERLCFLAGS := $(shell perl -e 'use Config; print $$Config{ccflags};')
20
21 CC := gcc
22 CFLAGS := -fPIC -Wall -Wno-unused -I$(PERLINCDIR) $(PERLCFLAGS) $(EXTRA_CFLAGS)
23
24 LIBPERL := $(shell perl -MExtUtils::Embed -e ldopts)
25
26 SED := sed
27
28 OCAMLDOCFLAGS := -html -stars -sort $(OCAMLCINCS)
29
30 WRAPPERS := \
31         wrappers/pl_Date_Calc.cmo \
32         wrappers/pl_Date_Format.cmo \
33         wrappers/pl_Date_Parse.cmo \
34         wrappers/pl_Net_Google_Cache.cmo \
35         wrappers/pl_Net_Google_Response.cmo \
36         wrappers/pl_Net_Google_Search.cmo \
37         wrappers/pl_Net_Google_Spelling.cmo \
38         wrappers/pl_Net_Google.cmo \
39         wrappers/pl_HTML_Element.cmo \
40         wrappers/pl_HTML_Parser.cmo \
41         wrappers/pl_HTML_TreeBuilder.cmo \
42         wrappers/pl_URI.cmo \
43         wrappers/pl_HTTP_Cookies.cmo \
44         wrappers/pl_HTTP_Headers.cmo \
45         wrappers/pl_HTTP_Message.cmo \
46         wrappers/pl_HTTP_Request.cmo \
47         wrappers/pl_HTTP_Request_Common.cmo \
48         wrappers/pl_HTTP_Response.cmo \
49         wrappers/pl_HTML_Form.cmo \
50         wrappers/pl_LWP_UserAgent.cmo \
51         wrappers/pl_Template.cmo \
52         wrappers/pl_WWW_Mechanize.cmo
53
54 all:    perl4caml.cma perl4caml.cmxa META all-examples html
55
56 perl4caml.cma: perl.cmo perl_c.o $(WRAPPERS)
57         $(OCAMLMKLIB) -o perl4caml $(LIBPERL) $^
58
59 perl4caml.cmxa: perl.cmx perl_c.o $(WRAPPERS:.cmo=.cmx)
60         $(OCAMLMKLIB) -o perl4caml $(LIBPERL) $^
61
62 all-examples: examples/test.bc examples/loadpage.bc examples/google.bc \
63         examples/test.opt examples/loadpage.opt examples/google.opt \
64         examples/parsedate.bc examples/parsedate.opt
65
66 TEST_PROGRAMS := $(patsubst %.ml,%.bc,$(wildcard test/*.ml)) \
67         $(patsubst %.ml,%.opt,$(wildcard test/*.ml))
68
69 test: $(TEST_PROGRAMS) run-tests
70
71 check: test
72
73 run-tests:
74         @fails=0; count=0; \
75         export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH; \
76         for prog in $(TEST_PROGRAMS); do \
77           if ! $$prog; then \
78             echo Test $$prog failed; \
79             fails=$$(($$fails+1)); \
80           fi; \
81           count=$$(($$count+1)); \
82         done; \
83         if [ $$fails -eq 0 ]; then \
84           echo All tests succeeded.; \
85           exit 0; \
86         else \
87           echo $$fails/$$count tests failed.; \
88           exit 1; \
89         fi
90
91 %.bc: %.cmo
92         $(OCAMLC) $(OCAMLCFLAGS) perl4caml.cma $^ -o $@
93
94 %.opt: %.cmx
95         $(OCAMLOPT) $(OCAMLOPTFLAGS) -cclib -L. perl4caml.cmxa \
96         $(DYNALOADER_HACK) $^ -o $@
97
98 %.cmi: %.mli
99         $(OCAMLC) $(OCAMLCFLAGS) -c $<
100
101 %.cmo: %.ml
102         $(OCAMLC) $(OCAMLCFLAGS) -c $<
103
104 %.cmx: %.ml
105         $(OCAMLOPT) $(OCAMLOPTFLAGS) -c $<
106
107 .SUFFIXES: .mli .ml .cmi .cmo .cmx
108
109 META:   META.in Makefile.config
110         $(SED)  -e 's/@PACKAGE@/$(PACKAGE)/' \
111                 -e 's/@VERSION@/$(VERSION)/' \
112                 < $< > $@
113
114 # Clean.
115
116 JUNKFILES = core *~ *.bak *.cmi *.cmo *.cmx *.cma *.cmxa *.o *.a *.so \
117         *.bc *.opt
118
119 clean:
120         rm -f META
121         for d in . examples test wrappers; do \
122           (cd $$d; rm -f $(JUNKFILES)); \
123         done
124
125 # Build dependencies.
126
127 ifeq ($(wildcard .depend),.depend)
128 include .depend
129 endif
130
131 depend: .depend
132
133 .depend: $(wildcard *.ml) $(wildcard *.mli) $(wildcard examples/*.ml) \
134         $(wildcard wrappers/*.ml)
135         $(OCAMLDEP) $(OCAMLCINCS) *.mli *.ml examples/*.ml wrappers/*.ml \
136         > .depend
137
138 # Install.
139
140 install:
141         rm -rf $(DESTDIR)$(OCAMLLIBDIR)/perl
142         install -c -m 0755 -d $(DESTDIR)$(OCAMLLIBDIR)/perl
143         install -c -m 0755 -d $(DESTDIR)$(OCAMLLIBDIR)/stublibs
144         install -c -m 0644 perl.cmi perl.mli perl4caml.cma perl4caml.cmxa \
145           perl4caml.a libperl4caml.a META \
146           $(WRAPPERS:.cmo=.ml) $(WRAPPERS:.cmo=.cmi) \
147           $(DESTDIR)$(OCAMLLIBDIR)/perl
148         install -c -m 0644 dllperl4caml.so $(DESTDIR)$(OCAMLLIBDIR)/stublibs
149
150 # Distribution.
151
152 dist:
153         $(MAKE) check-manifest
154         rm -rf $(PACKAGE)-$(VERSION)
155         mkdir $(PACKAGE)-$(VERSION)
156         tar -cf - -T MANIFEST | tar -C $(PACKAGE)-$(VERSION) -xf -
157         tar zcf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION)
158         rm -rf $(PACKAGE)-$(VERSION)
159         ls -l $(PACKAGE)-$(VERSION).tar.gz
160
161 check-manifest:
162         @for d in `find -type d -name CVS | grep -v '^\./debian/'`; \
163         do \
164         b=`dirname $$d`/; \
165         awk -F/ '$$1 != "D" {print $$2}' $$d/Entries | \
166         sed -e "s|^|$$b|" -e "s|^\./||"; \
167         done | sort > .check-manifest; \
168         sort MANIFEST > .orig-manifest; \
169         diff -u .orig-manifest .check-manifest; rv=$$?; \
170         rm -f .orig-manifest .check-manifest; \
171         exit $$rv
172
173 # Debian packages.
174
175 dpkg:
176         @if [ 0 != `cvs -q update | wc -l` ]; then \
177         echo Please commit all changes to CVS first.; \
178         exit 1; \
179         fi
180         $(MAKE) dist
181         rm -rf /tmp/dbuild
182         mkdir /tmp/dbuild
183         cp $(PACKAGE)-$(VERSION).tar.gz \
184           /tmp/dbuild/$(PACKAGE)_$(VERSION).orig.tar.gz
185         export CVSROOT=`cat CVS/Root`; \
186           cd /tmp/dbuild && \
187           cvs export \
188           -d $(PACKAGE)-$(VERSION) \
189           -D now merjis/test/perl4caml
190         cd /tmp/dbuild/$(PACKAGE)-$(VERSION) && dpkg-buildpackage -rfakeroot
191         rm -rf /tmp/dbuild/$(PACKAGE)-$(VERSION)
192         ls -l /tmp/dbuild
193
194 # Documentation.
195
196 html:   html/index.html
197
198 html/index.html: $(wildcard *.ml) $(wildcard *.mli) $(wildcard wrappers/*.ml)
199         rm -rf html
200         mkdir html
201         -$(OCAMLDOC) $(OCAMLDOCFLAGS) -d html $^
202
203 .PHONY: depend dist check-manifest html dpkg test run-tests