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