Release coccinelle-0.2.3rc2
[bpt/coccinelle.git] / pycaml / OCamlMakefile
CommitLineData
34e49164
C
1###########################################################################
2# OCamlMakefile
3# Copyright (C) 1999-2007 Markus Mottl
4#
5# For updates see:
6# http://www.ocaml.info/home/ocaml_sources.html
7#
8###########################################################################
9
10# Modified by damien for .glade.ml compilation
11
12# Set these variables to the names of the sources to be processed and
13# the result variable. Order matters during linkage!
14
15ifndef SOURCES
16 SOURCES := foo.ml
17endif
18export SOURCES
19
20ifndef RES_CLIB_SUF
21 RES_CLIB_SUF := _stubs
22endif
23export RES_CLIB_SUF
24
25ifndef RESULT
26 RESULT := foo
27endif
28export RESULT := $(strip $(RESULT))
29
30export LIB_PACK_NAME
31
32ifndef DOC_FILES
33 DOC_FILES := $(filter %.mli, $(SOURCES))
34endif
35export DOC_FILES
36FIRST_DOC_FILE := $(firstword $(DOC_FILES))
37
38export BCSUFFIX
39export NCSUFFIX
40
41ifndef TOPSUFFIX
42 TOPSUFFIX := .top
43endif
44export TOPSUFFIX
45
46# Eventually set include- and library-paths, libraries to link,
47# additional compilation-, link- and ocamlyacc-flags
48# Path- and library information needs not be written with "-I" and such...
49# Define THREADS if you need it, otherwise leave it unset (same for
50# USE_CAMLP4)!
51
52export THREADS
53export VMTHREADS
54export ANNOTATE
55export USE_CAMLP4
56
57export INCDIRS
58export LIBDIRS
59export EXTLIBDIRS
60export RESULTDEPS
61export OCAML_DEFAULT_DIRS
62
63export LIBS
64export CLIBS
65export CFRAMEWORKS
66
67export OCAMLFLAGS
68export OCAMLNCFLAGS
69export OCAMLBCFLAGS
70
71export OCAMLLDFLAGS
72export OCAMLNLDFLAGS
73export OCAMLBLDFLAGS
74
75export OCAMLMKLIB_FLAGS
76
77ifndef OCAMLCPFLAGS
78 OCAMLCPFLAGS := a
79endif
80export OCAMLCPFLAGS
81
82ifndef DOC_DIR
83 DOC_DIR := doc
84endif
85export DOC_DIR
86
87export PPFLAGS
88
89export LFLAGS
90export YFLAGS
91export IDLFLAGS
92
93export OCAMLDOCFLAGS
94
95export OCAMLFIND_INSTFLAGS
96
97export DVIPSFLAGS
98
99export STATIC
100
101# Add a list of optional trash files that should be deleted by "make clean"
102export TRASH
103
104ECHO := echo
105
106ifdef REALLY_QUIET
107 export REALLY_QUIET
108 ECHO := true
109 LFLAGS := $(LFLAGS) -q
110 YFLAGS := $(YFLAGS) -q
111endif
112
113#################### variables depending on your OCaml-installation
114
115ifdef MINGW
116 export MINGW
117 WIN32 := 1
118 CFLAGS_WIN32 := -mno-cygwin
119endif
120ifdef MSVC
121 export MSVC
122 WIN32 := 1
123 ifndef STATIC
124 CPPFLAGS_WIN32 := -DCAML_DLL
125 endif
126 CFLAGS_WIN32 += -nologo
127 EXT_OBJ := obj
128 EXT_LIB := lib
129 ifeq ($(CC),gcc)
130 # work around GNU Make default value
131 ifdef THREADS
132 CC := cl -MT
133 else
134 CC := cl
135 endif
136 endif
137 ifeq ($(CXX),g++)
138 # work around GNU Make default value
139 CXX := $(CC)
140 endif
141 CFLAG_O := -Fo
142endif
143ifdef WIN32
144 EXT_CXX := cpp
145 EXE := .exe
146endif
147
148ifndef EXT_OBJ
149 EXT_OBJ := o
150endif
151ifndef EXT_LIB
152 EXT_LIB := a
153endif
154ifndef EXT_CXX
155 EXT_CXX := cc
156endif
157ifndef EXE
158 EXE := # empty
159endif
160ifndef CFLAG_O
161 CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)!
162endif
163
164export CC
165export CXX
166export CFLAGS
167export CXXFLAGS
168export LDFLAGS
169export CPPFLAGS
170
171ifndef RPATH_FLAG
172 ifdef ELF_RPATH_FLAG
173 RPATH_FLAG := $(ELF_RPATH_FLAG)
174 else
175 RPATH_FLAG := -R
176 endif
177endif
178export RPATH_FLAG
179
180ifndef MSVC
181ifndef PIC_CFLAGS
182 PIC_CFLAGS := -fPIC
183endif
184ifndef PIC_CPPFLAGS
185 PIC_CPPFLAGS := -DPIC
186endif
187endif
188
189export PIC_CFLAGS
190export PIC_CPPFLAGS
191
192BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT))
193NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT))
194TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT))
195
196ifndef OCAMLFIND
197 OCAMLFIND := ocamlfind
198endif
199export OCAMLFIND
200
201ifndef OCAMLC
202 OCAMLC := ocamlc
203endif
204export OCAMLC
205
206ifndef OCAMLOPT
207 OCAMLOPT := ocamlopt
208endif
209export OCAMLOPT
210
211ifndef OCAMLMKTOP
212 OCAMLMKTOP := ocamlmktop
213endif
214export OCAMLMKTOP
215
216ifndef OCAMLCP
217 OCAMLCP := ocamlcp
218endif
219export OCAMLCP
220
221ifndef OCAMLDEP
222 OCAMLDEP := ocamldep
223endif
224export OCAMLDEP
225
226ifndef OCAMLLEX
227 OCAMLLEX := ocamllex
228endif
229export OCAMLLEX
230
231ifndef OCAMLYACC
232 OCAMLYACC := ocamlyacc
233endif
234export OCAMLYACC
235
236ifndef OCAMLMKLIB
237 OCAMLMKLIB := ocamlmklib
238endif
239export OCAMLMKLIB
240
241ifndef OCAML_GLADECC
242 OCAML_GLADECC := lablgladecc2
243endif
244export OCAML_GLADECC
245
246ifndef OCAML_GLADECC_FLAGS
247 OCAML_GLADECC_FLAGS :=
248endif
249export OCAML_GLADECC_FLAGS
250
251ifndef CAMELEON_REPORT
252 CAMELEON_REPORT := report
253endif
254export CAMELEON_REPORT
255
256ifndef CAMELEON_REPORT_FLAGS
257 CAMELEON_REPORT_FLAGS :=
258endif
259export CAMELEON_REPORT_FLAGS
260
261ifndef CAMELEON_ZOGGY
262 CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo
263endif
264export CAMELEON_ZOGGY
265
266ifndef CAMELEON_ZOGGY_FLAGS
267 CAMELEON_ZOGGY_FLAGS :=
268endif
269export CAMELEON_ZOGGY_FLAGS
270
271ifndef OXRIDL
272 OXRIDL := oxridl
273endif
274export OXRIDL
275
276ifndef CAMLIDL
277 CAMLIDL := camlidl
278endif
279export CAMLIDL
280
281ifndef CAMLIDLDLL
282 CAMLIDLDLL := camlidldll
283endif
284export CAMLIDLDLL
285
286ifndef NOIDLHEADER
287 MAYBE_IDL_HEADER := -header
288endif
289export NOIDLHEADER
290
291export NO_CUSTOM
292
293ifndef CAMLP4
294 CAMLP4 := camlp4
295endif
296export CAMLP4
297
298ifndef REAL_OCAMLFIND
299 ifdef PACKS
300 ifndef CREATE_LIB
301 ifdef THREADS
302 PACKS += threads
303 endif
304 endif
305 empty :=
306 space := $(empty) $(empty)
307 comma := ,
308 ifdef PREDS
309 PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS))
310 PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS))
311 OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES)
312 # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES)
313 OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES)
314 OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES)
315 else
316 OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS))
317 OCAML_DEP_PACKAGES :=
318 endif
319 OCAML_FIND_LINKPKG := -linkpkg
320 REAL_OCAMLFIND := $(OCAMLFIND)
321 endif
322endif
323
324export OCAML_FIND_PACKAGES
325export OCAML_DEP_PACKAGES
326export OCAML_FIND_LINKPKG
327export REAL_OCAMLFIND
328
329ifndef OCAMLDOC
330 OCAMLDOC := ocamldoc
331endif
332export OCAMLDOC
333
334ifndef LATEX
335 LATEX := latex
336endif
337export LATEX
338
339ifndef DVIPS
340 DVIPS := dvips
341endif
342export DVIPS
343
344ifndef PS2PDF
345 PS2PDF := ps2pdf
346endif
347export PS2PDF
348
349ifndef OCAMLMAKEFILE
350 OCAMLMAKEFILE := OCamlMakefile
351endif
352export OCAMLMAKEFILE
353
354ifndef OCAMLLIBPATH
355 OCAMLLIBPATH := \
356 $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/local/lib/ocaml)
357endif
358export OCAMLLIBPATH
359
360ifndef OCAML_LIB_INSTALL
361 OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib
362endif
363export OCAML_LIB_INSTALL
364
365###########################################################################
366
367#################### change following sections only if
368#################### you know what you are doing!
369
370# delete target files when a build command fails
371.PHONY: .DELETE_ON_ERROR
372.DELETE_ON_ERROR:
373
374# for pedants using "--warn-undefined-variables"
375export MAYBE_IDL
376export REAL_RESULT
377export CAMLIDLFLAGS
378export THREAD_FLAG
379export RES_CLIB
380export MAKEDLL
381export ANNOT_FLAG
382export C_OXRIDL
383export SUBPROJS
384export CFLAGS_WIN32
385export CPPFLAGS_WIN32
386
387INCFLAGS :=
388
389SHELL := /bin/sh
390
391MLDEPDIR := ._d
392BCDIDIR := ._bcdi
393NCDIDIR := ._ncdi
394
395FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.glade
396
397FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES))
398SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED))))
399
400FILTERED_REP := $(filter %.rep, $(FILTERED))
401DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d)
402AUTO_REP := $(FILTERED_REP:.rep=.ml)
403
404FILTERED_ZOG := $(filter %.zog, $(FILTERED))
405DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d)
406AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml)
407
408FILTERED_GLADE := $(filter %.glade, $(FILTERED))
409DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d)
410AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml)
411
412FILTERED_ML := $(filter %.ml, $(FILTERED))
413DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d)
414
415FILTERED_MLI := $(filter %.mli, $(FILTERED))
416DEP_MLI := $(FILTERED_MLI:.mli=.di)
417
418FILTERED_MLL := $(filter %.mll, $(FILTERED))
419DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d)
420AUTO_MLL := $(FILTERED_MLL:.mll=.ml)
421
422FILTERED_MLY := $(filter %.mly, $(FILTERED))
423DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di)
424AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml)
425
426FILTERED_IDL := $(filter %.idl, $(FILTERED))
427DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di)
428C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c)
429ifndef NOIDLHEADER
430 C_IDL += $(FILTERED_IDL:.idl=.h)
431endif
432OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ))
433AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL)
434
435FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED))
436DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di)
437AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL)
438
439FILTERED_C_CXX := $(filter %.c %.m %.$(EXT_CXX), $(FILTERED))
440OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ))
441OBJ_C_CXX := $(OBJ_C_CXX:.m=.$(EXT_OBJ))
442OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ))
443
444PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE)
445
446ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE)
447
448MLDEPS := $(filter %.d, $(ALL_DEPS))
449MLIDEPS := $(filter %.di, $(ALL_DEPS))
450BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di)
451NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di)
452
453ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED))
454
455IMPLO_INTF := $(ALLML:%.mli=%.mli.__)
456IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \
457 $(basename $(file)).cmi $(basename $(file)).cmo)
458IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF))
459IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi)
460
461IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx)
462
463INTF := $(filter %.cmi, $(IMPLO_INTF))
464IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF))
465IMPL_CMX := $(IMPL_CMO:.cmo=.cmx)
466IMPL_ASM := $(IMPL_CMO:.cmo=.asm)
467IMPL_S := $(IMPL_CMO:.cmo=.s)
468
469OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX)
470OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK)
471
472EXECS := $(addsuffix $(EXE), \
473 $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT)))
474ifdef WIN32
475 EXECS += $(BCRESULT).dll $(NCRESULT).dll
476endif
477
478CLIB_BASE := $(RESULT)$(RES_CLIB_SUF)
479ifneq ($(strip $(OBJ_LINK)),)
480 RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB)
481endif
482
483ifdef WIN32
484DLLSONAME := $(CLIB_BASE).dll
485else
486DLLSONAME := dll$(CLIB_BASE).so
487endif
488
489NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \
490 $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \
491 $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \
492 $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).o \
493 $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \
494 $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o
495
496ifndef STATIC
497 NONEXECS += $(DLLSONAME)
498endif
499
500ifndef LIBINSTALL_FILES
501 LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \
502 $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB)
503 ifndef STATIC
504 ifneq ($(strip $(OBJ_LINK)),)
505 LIBINSTALL_FILES += $(DLLSONAME)
506 endif
507 endif
508endif
509
510export LIBINSTALL_FILES
511
512ifdef WIN32
513 # some extra stuff is created while linking DLLs
514 NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib
515endif
516
517TARGETS := $(EXECS) $(NONEXECS)
518
519# If there are IDL-files
520ifneq ($(strip $(FILTERED_IDL)),)
521 MAYBE_IDL := -cclib -lcamlidl
522endif
523
524ifdef USE_CAMLP4
525 CAMLP4PATH := \
526 $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/local/lib/camlp4)
527 INCFLAGS := -I $(CAMLP4PATH)
528 CINCFLAGS := -I$(CAMLP4PATH)
529endif
530
531DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %)
532INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %)
533CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%)
534
535ifndef MSVC
536 CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \
537 $(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%)
538
539 ifeq ($(ELF_RPATH), yes)
540 CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%)
541 endif
542endif
543
544ifndef PROFILING
545 INTF_OCAMLC := $(OCAMLC)
546else
547 ifndef THREADS
548 INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS)
549 else
550 # OCaml does not support profiling byte code
551 # with threads (yet), therefore we force an error.
552 ifndef REAL_OCAMLC
553 $(error Profiling of multithreaded byte code not yet supported by OCaml)
554 endif
555 INTF_OCAMLC := $(OCAMLC)
556 endif
557endif
558
559ifndef MSVC
560 COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \
561 $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \
562 $(EXTLIBDIRS:%=-ccopt -Wl $(OCAML_DEFAULT_DIRS:%=-ccopt -L%))
563
564 ifeq ($(ELF_RPATH),yes)
565 COMMON_LDFLAGS += $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%)
566 endif
567else
568 COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \
569 $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \
570 $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) "
571endif
572
573CLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %')
574ifdef MSVC
575 ifndef STATIC
576 # MSVC libraries do not have 'lib' prefix
577 CLIBS_OPTS := $(CLIBS:%=-cclib %.lib)
578 endif
579endif
580
581ifneq ($(strip $(OBJ_LINK)),)
582 ifdef CREATE_LIB
583 OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL)
584 else
585 OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL)
586 endif
587else
588 OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL)
589endif
590
591# If we have to make byte-code
592ifndef REAL_OCAMLC
593 BYTE_OCAML := y
594
595 # EXTRADEPS is added dependencies we have to insert for all
596 # executable files we generate. Ideally it should be all of the
597 # libraries we use, but it's hard to find the ones that get searched on
598 # the path since I don't know the paths built into the compiler, so
599 # just include the ones with slashes in their names.
600 EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i))))
601 SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS)
602
603 REAL_OCAMLC := $(INTF_OCAMLC)
604
605 REAL_IMPL := $(IMPL_CMO)
606 REAL_IMPL_INTF := $(IMPLO_INTF)
607 IMPL_SUF := .cmo
608
609 DEPFLAGS :=
610 MAKE_DEPS := $(MLDEPS) $(BCDEPIS)
611
612 ifdef CREATE_LIB
613 override CFLAGS := $(PIC_CFLAGS) $(CFLAGS)
614 override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS)
615 ifndef STATIC
616 ifneq ($(strip $(OBJ_LINK)),)
617 MAKEDLL := $(DLLSONAME)
618 ALL_LDFLAGS := -dllib $(DLLSONAME)
619 endif
620 endif
621 endif
622
623 ifndef NO_CUSTOM
624 ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" ""
625 ALL_LDFLAGS += -custom
626 endif
627 endif
628
629 ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \
630 $(COMMON_LDFLAGS) $(LIBS:%=%.cma)
631 CAMLIDLDLLFLAGS :=
632
633 ifdef THREADS
634 ifdef VMTHREADS
635 THREAD_FLAG := -vmthread
636 else
637 THREAD_FLAG := -thread
638 endif
639 ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS)
640 ifndef CREATE_LIB
641 ifndef REAL_OCAMLFIND
642 ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS)
643 endif
644 endif
645 endif
646
647# we have to make native-code
648else
649 EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i))))
650 ifndef PROFILING
651 SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS)
652 PLDFLAGS :=
653 else
654 SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS)
655 PLDFLAGS := -p
656 endif
657
658 REAL_IMPL := $(IMPL_CMX)
659 REAL_IMPL_INTF := $(IMPLX_INTF)
660 IMPL_SUF := .cmx
661
662 override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS)
663
664 DEPFLAGS := -native
665 MAKE_DEPS := $(MLDEPS) $(NCDEPIS)
666
667 ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \
668 $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS)
669 CAMLIDLDLLFLAGS := -opt
670
671 ifndef CREATE_LIB
672 ALL_LDFLAGS += $(LIBS:%=%.cmxa)
673 else
674 override CFLAGS := $(PIC_CFLAGS) $(CFLAGS)
675 override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS)
676 endif
677
678 ifdef THREADS
679 THREAD_FLAG := -thread
680 ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS)
681 ifndef CREATE_LIB
682 ifndef REAL_OCAMLFIND
683 ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS)
684 endif
685 endif
686 endif
687endif
688
689export MAKE_DEPS
690
691ifdef ANNOTATE
692 ANNOT_FLAG := -dtypes
693else
694endif
695
696ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \
697 $(INCFLAGS) $(SPECIAL_OCAMLFLAGS)
698
699ifdef make_deps
700 -include $(MAKE_DEPS)
701 PRE_TARGETS :=
702endif
703
704###########################################################################
705# USER RULES
706
707# Call "OCamlMakefile QUIET=" to get rid of all of the @'s.
708QUIET=@
709
710# generates byte-code (default)
711byte-code: $(PRE_TARGETS)
712 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \
713 REAL_RESULT="$(BCRESULT)" make_deps=yes
714bc: byte-code
715
716byte-code-nolink: $(PRE_TARGETS)
717 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
718 REAL_RESULT="$(BCRESULT)" make_deps=yes
719bcnl: byte-code-nolink
720
721top: $(PRE_TARGETS)
722 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \
723 REAL_RESULT="$(BCRESULT)" make_deps=yes
724
725# generates native-code
726
727native-code: $(PRE_TARGETS)
728 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \
729 REAL_RESULT="$(NCRESULT)" \
730 REAL_OCAMLC="$(OCAMLOPT)" \
731 make_deps=yes
732nc: native-code
733
734native-code-nolink: $(PRE_TARGETS)
735 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
736 REAL_RESULT="$(NCRESULT)" \
737 REAL_OCAMLC="$(OCAMLOPT)" \
738 make_deps=yes
739ncnl: native-code-nolink
740
741# generates byte-code libraries
742byte-code-library: $(PRE_TARGETS)
743 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
744 $(RES_CLIB) $(BCRESULT).cma \
745 REAL_RESULT="$(BCRESULT)" \
746 CREATE_LIB=yes \
747 make_deps=yes
748bcl: byte-code-library
749
750# generates native-code libraries
751native-code-library: $(PRE_TARGETS)
752 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
753 $(RES_CLIB) $(NCRESULT).cmxa \
754 REAL_RESULT="$(NCRESULT)" \
755 REAL_OCAMLC="$(OCAMLOPT)" \
756 CREATE_LIB=yes \
757 make_deps=yes
758ncl: native-code-library
759
760ifdef WIN32
761# generates byte-code dll
762byte-code-dll: $(PRE_TARGETS)
763 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
764 $(RES_CLIB) $(BCRESULT).dll \
765 REAL_RESULT="$(BCRESULT)" \
766 make_deps=yes
767bcd: byte-code-dll
768
769# generates native-code dll
770native-code-dll: $(PRE_TARGETS)
771 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
772 $(RES_CLIB) $(NCRESULT).dll \
773 REAL_RESULT="$(NCRESULT)" \
774 REAL_OCAMLC="$(OCAMLOPT)" \
775 make_deps=yes
776ncd: native-code-dll
777endif
778
779# generates byte-code with debugging information
780debug-code: $(PRE_TARGETS)
781 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \
782 REAL_RESULT="$(BCRESULT)" make_deps=yes \
783 OCAMLFLAGS="-g $(OCAMLFLAGS)" \
784 OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
785dc: debug-code
786
787debug-code-nolink: $(PRE_TARGETS)
788 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
789 REAL_RESULT="$(BCRESULT)" make_deps=yes \
790 OCAMLFLAGS="-g $(OCAMLFLAGS)" \
791 OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
792dcnl: debug-code-nolink
793
794# generates byte-code with debugging information (native code)
795debug-native-code: $(PRE_TARGETS)
796 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \
797 REAL_RESULT="$(NCRESULT)" make_deps=yes \
798 REAL_OCAMLC="$(OCAMLOPT)" \
799 OCAMLFLAGS="-g $(OCAMLFLAGS)" \
800 OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
801dnc: debug-native-code
802
803debug-native-code-nolink: $(PRE_TARGETS)
804 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
805 REAL_RESULT="$(NCRESULT)" make_deps=yes \
806 REAL_OCAMLC="$(OCAMLOPT)" \
807 OCAMLFLAGS="-g $(OCAMLFLAGS)" \
808 OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
809dncnl: debug-native-code-nolink
810
811# generates byte-code libraries with debugging information
812debug-code-library: $(PRE_TARGETS)
813 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
814 $(RES_CLIB) $(BCRESULT).cma \
815 REAL_RESULT="$(BCRESULT)" make_deps=yes \
816 CREATE_LIB=yes \
817 OCAMLFLAGS="-g $(OCAMLFLAGS)" \
818 OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
819dcl: debug-code-library
820
821# generates byte-code libraries with debugging information (native code)
822debug-native-code-library: $(PRE_TARGETS)
823 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
824 $(RES_CLIB) $(NCRESULT).cma \
825 REAL_RESULT="$(NCRESULT)" make_deps=yes \
826 REAL_OCAMLC="$(OCAMLOPT)" \
827 CREATE_LIB=yes \
828 OCAMLFLAGS="-g $(OCAMLFLAGS)" \
829 OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
830dncl: debug-native-code-library
831
832# generates byte-code for profiling
833profiling-byte-code: $(PRE_TARGETS)
834 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \
835 REAL_RESULT="$(BCRESULT)" PROFILING="y" \
836 make_deps=yes
837pbc: profiling-byte-code
838
839# generates native-code
840
841profiling-native-code: $(PRE_TARGETS)
842 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \
843 REAL_RESULT="$(NCRESULT)" \
844 REAL_OCAMLC="$(OCAMLOPT)" \
845 PROFILING="y" \
846 make_deps=yes
847pnc: profiling-native-code
848
849# generates byte-code libraries
850profiling-byte-code-library: $(PRE_TARGETS)
851 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
852 $(RES_CLIB) $(BCRESULT).cma \
853 REAL_RESULT="$(BCRESULT)" PROFILING="y" \
854 CREATE_LIB=yes \
855 make_deps=yes
856pbcl: profiling-byte-code-library
857
858# generates native-code libraries
859profiling-native-code-library: $(PRE_TARGETS)
860 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
861 $(RES_CLIB) $(NCRESULT).cmxa \
862 REAL_RESULT="$(NCRESULT)" PROFILING="y" \
863 REAL_OCAMLC="$(OCAMLOPT)" \
864 CREATE_LIB=yes \
865 make_deps=yes
866pncl: profiling-native-code-library
867
868# packs byte-code objects
869pack-byte-code: $(PRE_TARGETS)
870 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \
871 REAL_RESULT="$(BCRESULT)" \
872 PACK_LIB=yes make_deps=yes
873pabc: pack-byte-code
874
875# packs native-code objects
876pack-native-code: $(PRE_TARGETS)
877 $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
878 $(NCRESULT).cmx $(NCRESULT).o \
879 REAL_RESULT="$(NCRESULT)" \
880 REAL_OCAMLC="$(OCAMLOPT)" \
881 PACK_LIB=yes make_deps=yes
882panc: pack-native-code
883
884# generates HTML-documentation
885htdoc: $(DOC_DIR)/$(RESULT)/html/index.html
886
887# generates Latex-documentation
888ladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex
889
890# generates PostScript-documentation
891psdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps
892
893# generates PDF-documentation
894pdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf
895
896# generates all supported forms of documentation
897doc: htdoc ladoc psdoc pdfdoc
898
899###########################################################################
900# LOW LEVEL RULES
901
902$(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS)
903 $(REAL_OCAMLFIND) $(REAL_OCAMLC) \
904 $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \
905 $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \
906 $(REAL_IMPL)
907
908nolink: $(REAL_IMPL_INTF) $(OBJ_LINK)
909
910ifdef WIN32
911$(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK)
912 $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \
913 -o $@ $(REAL_IMPL)
914endif
915
916%$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS)
917 $(REAL_OCAMLFIND) $(OCAMLMKTOP) \
918 $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \
919 $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@$(EXE) \
920 $(REAL_IMPL)
921
922.SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \
923 .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .m .$(EXT_CXX) .h .so \
924 .rep .zog .glade
925
926ifndef STATIC
927ifdef MINGW
928$(DLLSONAME): $(OBJ_LINK)
929 $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \
930 -Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \
931 $(OCAMLLIBPATH)/ocamlrun.a \
932 -Wl,--export-all-symbols \
933 -Wl,--no-whole-archive
934else
935ifdef MSVC
936$(DLLSONAME): $(OBJ_LINK)
937 link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \
938 $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \
939 $(OCAMLLIBPATH)/ocamlrun.lib
940
941else
942$(DLLSONAME): $(OBJ_LINK)
943 $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \
944 -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \
945 $(OCAMLMKLIB_FLAGS)
946endif
947endif
948endif
949
950ifndef LIB_PACK_NAME
951$(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS)
952 $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(REAL_IMPL)
953
954$(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS)
955 $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(REAL_IMPL)
956else
957ifdef BYTE_OCAML
958$(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF)
959 $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(OCAMLLDFLAGS) $(REAL_IMPL)
960else
961$(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF)
962 $(REAL_OCAMLFIND) $(OCAMLOPT) -pack -o $(LIB_PACK_NAME).cmx $(OCAMLLDFLAGS) $(REAL_IMPL)
963endif
964
965$(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS)
966 $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(LIB_PACK_NAME).cmo
967
968$(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS)
969 $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(filter-out -custom, $(ALL_LDFLAGS)) $(OBJS_LIBS) -o $@ $(LIB_PACK_NAME).cmx
970endif
971
972$(RES_CLIB): $(OBJ_LINK)
973ifndef MSVC
974 ifneq ($(strip $(OBJ_LINK)),)
975 $(AR) rcs $@ $(OBJ_LINK)
976 endif
977else
978 ifneq ($(strip $(OBJ_LINK)),)
979 lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK)
980 endif
981endif
982
983.mli.cmi: $(EXTRADEPS)
984 $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
985 if [ -z "$$pp" ]; then \
986 $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
987 -c $(THREAD_FLAG) $(ANNOT_FLAG) \
988 $(OCAMLFLAGS) $(INCFLAGS) $<; \
989 $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
990 -c $(THREAD_FLAG) $(ANNOT_FLAG) \
991 $(OCAMLFLAGS) $(INCFLAGS) $<; \
992 else \
993 $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
994 -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \
995 $(OCAMLFLAGS) $(INCFLAGS) $<; \
996 $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
997 -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \
998 $(OCAMLFLAGS) $(INCFLAGS) $<; \
999 fi
1000
1001.ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(EXTRADEPS)
1002 $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
1003 if [ -z "$$pp" ]; then \
1004 $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
1005 -c $(ALL_OCAMLCFLAGS) $<; \
1006 $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
1007 -c $(ALL_OCAMLCFLAGS) $<; \
1008 else \
1009 $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
1010 -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \
1011 $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
1012 -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \
1013 fi
1014
1015ifdef PACK_LIB
1016$(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS)
1017 $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \
1018 $(OBJS_LIBS) -o $@ $(REAL_IMPL)
1019endif
1020
1021.PRECIOUS: %.ml
1022%.ml: %.mll
1023 $(OCAMLLEX) $(LFLAGS) $<
1024
1025.PRECIOUS: %.ml %.mli
1026%.ml %.mli: %.mly
1027 $(OCAMLYACC) $(YFLAGS) $<
1028 $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \
1029 if [ ! -z "$$pp" ]; then \
1030 mv $*.ml $*.ml.temporary; \
1031 echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \
1032 cat $*.ml.temporary >> $*.ml; \
1033 rm $*.ml.temporary; \
1034 mv $*.mli $*.mli.temporary; \
1035 echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \
1036 cat $*.mli.temporary >> $*.mli; \
1037 rm $*.mli.temporary; \
1038 fi
1039
1040
1041.PRECIOUS: %.ml
1042%.ml: %.rep
1043 $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $<
1044
1045.PRECIOUS: %.ml
1046%.ml: %.zog
1047 $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@
1048
1049.PRECIOUS: %.ml
1050%.ml: %.glade
1051 $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@
1052
1053.PRECIOUS: %.ml %.mli
1054%.ml %.mli: %.oxridl
1055 $(OXRIDL) $<
1056
1057.PRECIOUS: %.ml %.mli %_stubs.c %.h
1058%.ml %.mli %_stubs.c %.h: %.idl
1059 $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \
1060 $(CAMLIDLFLAGS) $<
1061 $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi
1062
1063.c.$(EXT_OBJ):
1064 $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \
1065 $(CPPFLAGS) $(CPPFLAGS_WIN32) \
1066 $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $<
1067
1068.m.$(EXT_OBJ):
1069 $(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \
1070 -I'$(OCAMLLIBPATH)' \
1071 $< $(CFLAG_O)$@
1072
1073.$(EXT_CXX).$(EXT_OBJ):
1074 $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \
1075 -I'$(OCAMLLIBPATH)' \
1076 $< $(CFLAG_O)$@
1077
1078$(MLDEPDIR)/%.d: %.ml
1079 $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi
1080 $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
1081 if [ -z "$$pp" ]; then \
1082 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
1083 $(DINCFLAGS) $< \> $@; \
1084 $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
1085 $(DINCFLAGS) $< > $@; \
1086 else \
1087 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
1088 -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \
1089 $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
1090 -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \
1091 fi
1092
1093$(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli
1094 $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi
1095 $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
1096 if [ -z "$$pp" ]; then \
1097 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< \> $@; \
1098 $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \
1099 else \
1100 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \
1101 -pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \
1102 $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \
1103 -pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \
1104 fi
1105
1106$(DOC_DIR)/$(RESULT)/html:
1107 mkdir -p $@
1108
1109$(DOC_DIR)/$(RESULT)/html/index.html: $(DOC_DIR)/$(RESULT)/html $(DOC_FILES)
1110 rm -rf $</*
1111 $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $(FIRST_DOC_FILE)`; \
1112 if [ -z "$$pp" ]; then \
1113 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -html -d $< $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \
1114 $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -html -d $< $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \
1115 else \
1116 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp \"$$pp $(PPFLAGS)\" -html -d $< $(OCAMLDOCFLAGS) \
1117 $(INCFLAGS) $(DOC_FILES); \
1118 $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp "$$pp $(PPFLAGS)" -html -d $< $(OCAMLDOCFLAGS) \
1119 $(INCFLAGS) $(DOC_FILES); \
1120 fi
1121
1122$(DOC_DIR)/$(RESULT)/latex:
1123 mkdir -p $@
1124
1125$(DOC_DIR)/$(RESULT)/latex/doc.tex: $(DOC_DIR)/$(RESULT)/latex $(DOC_FILES)
1126 rm -rf $</*
1127 $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $(FIRST_DOC_FILE)`; \
1128 if [ -z "$$pp" ]; then \
1129 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \
1130 $(DOC_FILES) -o $@; \
1131 $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \
1132 -o $@; \
1133 else \
1134 $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \
1135 $(INCFLAGS) $(DOC_FILES) -o $@; \
1136 $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \
1137 $(INCFLAGS) $(DOC_FILES) -o $@; \
1138 fi
1139
1140$(DOC_DIR)/$(RESULT)/latex/doc.ps: $(DOC_DIR)/$(RESULT)/latex/doc.tex
1141 cd $(DOC_DIR)/$(RESULT)/latex && \
1142 $(LATEX) doc.tex && \
1143 $(LATEX) doc.tex && \
1144 $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F)
1145
1146$(DOC_DIR)/$(RESULT)/latex/doc.pdf: $(DOC_DIR)/$(RESULT)/latex/doc.ps
1147 cd $(DOC_DIR)/$(RESULT)/latex && $(PS2PDF) $(<F)
1148
1149define make_subproj
1150.PHONY:
1151subproj_$(1):
1152 $$(eval $$(call PROJ_$(1)))
1153 $(QUIET)if [ "$(SUBTARGET)" != "all" ]; then \
1154 $(MAKE) -f $(OCAMLMAKEFILE) $(SUBTARGET); \
1155 fi
1156endef
1157
1158$(foreach subproj,$(SUBPROJS),$(eval $(call make_subproj,$(subproj))))
1159
1160.PHONY:
1161subprojs: $(SUBPROJS:%=subproj_%)
1162
1163###########################################################################
1164# (UN)INSTALL RULES FOR LIBRARIES
1165
1166.PHONY: libinstall
1167libinstall: all
1168 $(QUIET)printf "\nInstalling library with ocamlfind\n"
1169 $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META $(LIBINSTALL_FILES)
1170 $(QUIET)printf "\nInstallation successful.\n"
1171
1172.PHONY: libinstall-byte-code
1173libinstall-byte-code: all
1174 $(QUIET)printf "\nInstalling byte-code library with ocamlfind\n"
1175 $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META \
1176 $(filter-out $(RESULT).$(EXT_LIB) $(RESULT).cmxa, $(LIBINSTALL_FILES))
1177 $(QUIET)printf "\nInstallation successful.\n"
1178
1179.PHONY: libinstall-native-code
1180libinstall-native-code: all
1181 $(QUIET)printf "\nInstalling native-code library with ocamlfind\n"
1182 $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META \
1183 $(filter-out $(DLLSONAME) $(RESULT).cma, $(LIBINSTALL_FILES))
1184 $(QUIET)printf "\nInstallation successful.\n"
1185
1186.PHONY: libuninstall
1187libuninstall:
1188 $(QUIET)printf "\nUninstalling library with ocamlfind\n"
1189 $(OCAMLFIND) remove $(OCAMLFIND_INSTFLAGS) $(RESULT)
1190 $(QUIET)printf "\nUninstallation successful.\n"
1191
1192.PHONY: rawinstall
1193rawinstall: all
1194 $(QUIET)printf "\nInstalling library to: $(OCAML_LIB_INSTALL)\n"
1195 -install -d $(OCAML_LIB_INSTALL)
1196 for i in $(LIBINSTALL_FILES); do \
1197 if [ -f $$i ]; then \
1198 install -c -m 0644 $$i $(OCAML_LIB_INSTALL); \
1199 fi; \
1200 done
1201 $(QUIET)printf "\nInstallation successful.\n"
1202
1203.PHONY: rawuninstall
1204rawuninstall:
1205 $(QUIET)printf "\nUninstalling library from: $(OCAML_LIB_INSTALL)\n"
1206 cd $(OCAML_LIB_INSTALL) && rm $(notdir $(LIBINSTALL_FILES))
1207 $(QUIET)printf "\nUninstallation successful.\n"
1208
1209###########################################################################
1210# MAINTENANCE RULES
1211
1212.PHONY: clean
1213clean::
1214 rm -f $(TARGETS) $(TRASH)
1215 rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR)
1216
1217.PHONY: cleanup
1218cleanup::
1219 rm -f $(NONEXECS) $(TRASH)
1220 rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR)
1221
1222.PHONY: clean-doc
1223clean-doc::
1224 rm -rf $(DOC_DIR)/$(RESULT)
1225
1226.PHONY: clean-all
1227clean-all:: clean clean-doc
1228
1229.PHONY: nobackup
1230nobackup:
1231 rm -f *.bak *~ *.dup