|
|
@@ -0,0 +1,1299 @@
|
|
|
+###########################################################################
|
|
|
+# OCamlMakefile
|
|
|
+# Copyright (C) 1999- Markus Mottl
|
|
|
+#
|
|
|
+# For updates see:
|
|
|
+# http://www.ocaml.info/home/ocaml_sources.html
|
|
|
+#
|
|
|
+###########################################################################
|
|
|
+
|
|
|
+# Modified by damien for .glade.ml compilation
|
|
|
+
|
|
|
+# Set these variables to the names of the sources to be processed and
|
|
|
+# the result variable. Order matters during linkage!
|
|
|
+
|
|
|
+ifndef SOURCES
|
|
|
+ SOURCES := foo.ml
|
|
|
+endif
|
|
|
+export SOURCES
|
|
|
+
|
|
|
+ifndef RES_CLIB_SUF
|
|
|
+ RES_CLIB_SUF := _stubs
|
|
|
+endif
|
|
|
+export RES_CLIB_SUF
|
|
|
+
|
|
|
+ifndef RESULT
|
|
|
+ RESULT := foo
|
|
|
+endif
|
|
|
+export RESULT := $(strip $(RESULT))
|
|
|
+
|
|
|
+export LIB_PACK_NAME
|
|
|
+
|
|
|
+ifndef DOC_FILES
|
|
|
+ DOC_FILES := $(filter %.mli, $(SOURCES))
|
|
|
+endif
|
|
|
+export DOC_FILES
|
|
|
+FIRST_DOC_FILE := $(firstword $(DOC_FILES))
|
|
|
+
|
|
|
+export BCSUFFIX
|
|
|
+export NCSUFFIX
|
|
|
+
|
|
|
+ifndef TOPSUFFIX
|
|
|
+ TOPSUFFIX := .top
|
|
|
+endif
|
|
|
+export TOPSUFFIX
|
|
|
+
|
|
|
+# Eventually set include- and library-paths, libraries to link,
|
|
|
+# additional compilation-, link- and ocamlyacc-flags
|
|
|
+# Path- and library information needs not be written with "-I" and such...
|
|
|
+# Define THREADS if you need it, otherwise leave it unset (same for
|
|
|
+# USE_CAMLP4)!
|
|
|
+
|
|
|
+export THREADS
|
|
|
+export VMTHREADS
|
|
|
+export ANNOTATE
|
|
|
+export USE_CAMLP4
|
|
|
+
|
|
|
+export INCDIRS
|
|
|
+export LIBDIRS
|
|
|
+export EXTLIBDIRS
|
|
|
+export RESULTDEPS
|
|
|
+export OCAML_DEFAULT_DIRS
|
|
|
+
|
|
|
+export LIBS
|
|
|
+export CLIBS
|
|
|
+export CFRAMEWORKS
|
|
|
+
|
|
|
+export OCAMLFLAGS
|
|
|
+export OCAMLNCFLAGS
|
|
|
+export OCAMLBCFLAGS
|
|
|
+
|
|
|
+export OCAMLLDFLAGS
|
|
|
+export OCAMLNLDFLAGS
|
|
|
+export OCAMLBLDFLAGS
|
|
|
+
|
|
|
+export OCAMLMKLIB_FLAGS
|
|
|
+
|
|
|
+ifndef OCAMLCPFLAGS
|
|
|
+ OCAMLCPFLAGS := a
|
|
|
+endif
|
|
|
+export OCAMLCPFLAGS
|
|
|
+
|
|
|
+ifndef DOC_DIR
|
|
|
+ DOC_DIR := doc
|
|
|
+endif
|
|
|
+export DOC_DIR
|
|
|
+
|
|
|
+export PPFLAGS
|
|
|
+
|
|
|
+export LFLAGS
|
|
|
+export YFLAGS
|
|
|
+export IDLFLAGS
|
|
|
+
|
|
|
+export OCAMLDOCFLAGS
|
|
|
+
|
|
|
+export OCAMLFIND_INSTFLAGS
|
|
|
+
|
|
|
+export DVIPSFLAGS
|
|
|
+
|
|
|
+export STATIC
|
|
|
+
|
|
|
+# Add a list of optional trash files that should be deleted by "make clean"
|
|
|
+export TRASH
|
|
|
+
|
|
|
+ECHO := echo
|
|
|
+
|
|
|
+ifdef REALLY_QUIET
|
|
|
+ export REALLY_QUIET
|
|
|
+ ECHO := true
|
|
|
+ LFLAGS := $(LFLAGS) -q
|
|
|
+ YFLAGS := $(YFLAGS) -q
|
|
|
+endif
|
|
|
+
|
|
|
+#################### variables depending on your OCaml-installation
|
|
|
+
|
|
|
+SYSTEM := $(shell ocamlc -config 2>/dev/null | grep system | sed 's/system: //')
|
|
|
+ # This may be
|
|
|
+ # - mingw
|
|
|
+ # - mingw64
|
|
|
+ # - win32
|
|
|
+ # - cygwin
|
|
|
+ # - some other string means Unix
|
|
|
+ # - empty means ocamlc does not support -config
|
|
|
+
|
|
|
+ifeq ($(SYSTEM),$(filter $(SYSTEM),mingw mingw64))
|
|
|
+ MINGW=1
|
|
|
+endif
|
|
|
+ifeq ($(SYSTEM),win32)
|
|
|
+ MSVC=1
|
|
|
+endif
|
|
|
+
|
|
|
+ifdef MINGW
|
|
|
+ export MINGW
|
|
|
+ WIN32 := 1
|
|
|
+ # The default value 'cc' makes 'ocamlc -cc "cc"' raises the error 'The
|
|
|
+ # NTVDM CPU has encountered an illegal instruction'.
|
|
|
+ ifndef CC
|
|
|
+ MNO_CYGWIN := $(shell gcc -Wextra -v --help 2>/dev/null | grep -q '\-mno-cygwin'; echo $$?)
|
|
|
+ CC := gcc
|
|
|
+ else
|
|
|
+ MNO_CYGWIN := $(shell $$CC -Wextra -v --help 2>/dev/null | grep -q '\-mno-cygwin'; echo $$?)
|
|
|
+ endif
|
|
|
+ # We are compiling with cygwin tools:
|
|
|
+ ifeq ($(MNO_CYGWIN),0)
|
|
|
+ CFLAGS_WIN32 := -mno-cygwin
|
|
|
+ endif
|
|
|
+ # The OCaml C header files use this flag:
|
|
|
+ CFLAGS += -D__MINGW32__
|
|
|
+endif
|
|
|
+ifdef MSVC
|
|
|
+ export MSVC
|
|
|
+ WIN32 := 1
|
|
|
+ ifndef STATIC
|
|
|
+ CPPFLAGS_WIN32 := -DCAML_DLL
|
|
|
+ endif
|
|
|
+ CFLAGS_WIN32 += -nologo
|
|
|
+ EXT_OBJ := obj
|
|
|
+ EXT_LIB := lib
|
|
|
+ ifeq ($(CC),gcc)
|
|
|
+ # work around GNU Make default value
|
|
|
+ ifdef THREADS
|
|
|
+ CC := cl -MT
|
|
|
+ else
|
|
|
+ CC := cl
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+ ifeq ($(CXX),g++)
|
|
|
+ # work around GNU Make default value
|
|
|
+ CXX := $(CC)
|
|
|
+ endif
|
|
|
+ CFLAG_O := -Fo
|
|
|
+endif
|
|
|
+ifdef WIN32
|
|
|
+ EXT_CXX := cpp
|
|
|
+ EXE := .exe
|
|
|
+endif
|
|
|
+
|
|
|
+ifndef EXT_OBJ
|
|
|
+ EXT_OBJ := o
|
|
|
+endif
|
|
|
+ifndef EXT_LIB
|
|
|
+ EXT_LIB := a
|
|
|
+endif
|
|
|
+ifndef EXT_CXX
|
|
|
+ EXT_CXX := cc
|
|
|
+endif
|
|
|
+ifndef EXE
|
|
|
+ EXE := # empty
|
|
|
+endif
|
|
|
+ifndef CFLAG_O
|
|
|
+ CFLAG_O := -o # do not delete this comment (preserves trailing whitespace)!
|
|
|
+endif
|
|
|
+
|
|
|
+export CC
|
|
|
+export CXX
|
|
|
+export CFLAGS
|
|
|
+export CXXFLAGS
|
|
|
+export LDFLAGS
|
|
|
+export CPPFLAGS
|
|
|
+
|
|
|
+ifndef RPATH_FLAG
|
|
|
+ ifdef ELF_RPATH_FLAG
|
|
|
+ RPATH_FLAG := $(ELF_RPATH_FLAG)
|
|
|
+ else
|
|
|
+ RPATH_FLAG := -R
|
|
|
+ endif
|
|
|
+endif
|
|
|
+export RPATH_FLAG
|
|
|
+
|
|
|
+ifndef MSVC
|
|
|
+ifndef PIC_CFLAGS
|
|
|
+ PIC_CFLAGS := -fPIC
|
|
|
+endif
|
|
|
+ifndef PIC_CPPFLAGS
|
|
|
+ PIC_CPPFLAGS := -DPIC
|
|
|
+endif
|
|
|
+endif
|
|
|
+
|
|
|
+export PIC_CFLAGS
|
|
|
+export PIC_CPPFLAGS
|
|
|
+
|
|
|
+BCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT))
|
|
|
+NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT))
|
|
|
+TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT))
|
|
|
+
|
|
|
+ifndef OCAMLFIND
|
|
|
+ OCAMLFIND := ocamlfind
|
|
|
+endif
|
|
|
+export OCAMLFIND
|
|
|
+
|
|
|
+ifndef OCAML
|
|
|
+ OCAML := ocaml
|
|
|
+endif
|
|
|
+export OCAML
|
|
|
+
|
|
|
+ifndef OCAMLC
|
|
|
+ OCAMLC := ocamlc
|
|
|
+endif
|
|
|
+export OCAMLC
|
|
|
+
|
|
|
+ifndef OCAMLOPT
|
|
|
+ OCAMLOPT := ocamlopt
|
|
|
+endif
|
|
|
+export OCAMLOPT
|
|
|
+
|
|
|
+ifndef OCAMLMKTOP
|
|
|
+ OCAMLMKTOP := ocamlmktop
|
|
|
+endif
|
|
|
+export OCAMLMKTOP
|
|
|
+
|
|
|
+ifndef OCAMLCP
|
|
|
+ OCAMLCP := ocamlcp
|
|
|
+endif
|
|
|
+export OCAMLCP
|
|
|
+
|
|
|
+ifndef OCAMLDEP
|
|
|
+ OCAMLDEP := ocamldep
|
|
|
+endif
|
|
|
+export OCAMLDEP
|
|
|
+
|
|
|
+ifndef OCAMLLEX
|
|
|
+ OCAMLLEX := ocamllex
|
|
|
+endif
|
|
|
+export OCAMLLEX
|
|
|
+
|
|
|
+ifndef OCAMLYACC
|
|
|
+ OCAMLYACC := ocamlyacc
|
|
|
+endif
|
|
|
+export OCAMLYACC
|
|
|
+
|
|
|
+ifndef OCAMLMKLIB
|
|
|
+ OCAMLMKLIB := ocamlmklib
|
|
|
+endif
|
|
|
+export OCAMLMKLIB
|
|
|
+
|
|
|
+ifndef OCAML_GLADECC
|
|
|
+ OCAML_GLADECC := lablgladecc2
|
|
|
+endif
|
|
|
+export OCAML_GLADECC
|
|
|
+
|
|
|
+ifndef OCAML_GLADECC_FLAGS
|
|
|
+ OCAML_GLADECC_FLAGS :=
|
|
|
+endif
|
|
|
+export OCAML_GLADECC_FLAGS
|
|
|
+
|
|
|
+ifndef CAMELEON_REPORT
|
|
|
+ CAMELEON_REPORT := report
|
|
|
+endif
|
|
|
+export CAMELEON_REPORT
|
|
|
+
|
|
|
+ifndef CAMELEON_REPORT_FLAGS
|
|
|
+ CAMELEON_REPORT_FLAGS :=
|
|
|
+endif
|
|
|
+export CAMELEON_REPORT_FLAGS
|
|
|
+
|
|
|
+ifndef CAMELEON_ZOGGY
|
|
|
+ CAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmo
|
|
|
+endif
|
|
|
+export CAMELEON_ZOGGY
|
|
|
+
|
|
|
+ifndef CAMELEON_ZOGGY_FLAGS
|
|
|
+ CAMELEON_ZOGGY_FLAGS :=
|
|
|
+endif
|
|
|
+export CAMELEON_ZOGGY_FLAGS
|
|
|
+
|
|
|
+ifndef OXRIDL
|
|
|
+ OXRIDL := oxridl
|
|
|
+endif
|
|
|
+export OXRIDL
|
|
|
+
|
|
|
+ifndef CAMLIDL
|
|
|
+ CAMLIDL := camlidl
|
|
|
+endif
|
|
|
+export CAMLIDL
|
|
|
+
|
|
|
+ifndef CAMLIDLDLL
|
|
|
+ CAMLIDLDLL := camlidldll
|
|
|
+endif
|
|
|
+export CAMLIDLDLL
|
|
|
+
|
|
|
+ifndef NOIDLHEADER
|
|
|
+ MAYBE_IDL_HEADER := -header
|
|
|
+endif
|
|
|
+export NOIDLHEADER
|
|
|
+
|
|
|
+export NO_CUSTOM
|
|
|
+
|
|
|
+ifndef CAMLP4
|
|
|
+ CAMLP4 := camlp4
|
|
|
+endif
|
|
|
+export CAMLP4
|
|
|
+
|
|
|
+ifndef REAL_OCAMLFIND
|
|
|
+ ifdef PACKS
|
|
|
+ ifndef CREATE_LIB
|
|
|
+ ifdef THREADS
|
|
|
+ PACKS += threads
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+ empty :=
|
|
|
+ space := $(empty) $(empty)
|
|
|
+ comma := ,
|
|
|
+ ifdef PREDS
|
|
|
+ PRE_OCAML_FIND_PREDICATES := $(subst $(space),$(comma),$(PREDS))
|
|
|
+ PRE_OCAML_FIND_PACKAGES := $(subst $(space),$(comma),$(PACKS))
|
|
|
+ OCAML_FIND_PREDICATES := -predicates $(PRE_OCAML_FIND_PREDICATES)
|
|
|
+ # OCAML_DEP_PREDICATES := -syntax $(PRE_OCAML_FIND_PREDICATES)
|
|
|
+ OCAML_FIND_PACKAGES := $(OCAML_FIND_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES)
|
|
|
+ OCAML_DEP_PACKAGES := $(OCAML_DEP_PREDICATES) -package $(PRE_OCAML_FIND_PACKAGES)
|
|
|
+ else
|
|
|
+ OCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS))
|
|
|
+ OCAML_DEP_PACKAGES :=
|
|
|
+ endif
|
|
|
+ OCAML_FIND_LINKPKG := -linkpkg
|
|
|
+ REAL_OCAMLFIND := $(OCAMLFIND)
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+export OCAML_FIND_PACKAGES
|
|
|
+export OCAML_DEP_PACKAGES
|
|
|
+export OCAML_FIND_LINKPKG
|
|
|
+export REAL_OCAMLFIND
|
|
|
+
|
|
|
+ifndef OCAMLDOC
|
|
|
+ OCAMLDOC := ocamldoc
|
|
|
+endif
|
|
|
+export OCAMLDOC
|
|
|
+
|
|
|
+ifndef LATEX
|
|
|
+ LATEX := latex
|
|
|
+endif
|
|
|
+export LATEX
|
|
|
+
|
|
|
+ifndef DVIPS
|
|
|
+ DVIPS := dvips
|
|
|
+endif
|
|
|
+export DVIPS
|
|
|
+
|
|
|
+ifndef PS2PDF
|
|
|
+ PS2PDF := ps2pdf
|
|
|
+endif
|
|
|
+export PS2PDF
|
|
|
+
|
|
|
+ifndef OCAMLMAKEFILE
|
|
|
+ OCAMLMAKEFILE := OCamlMakefile
|
|
|
+endif
|
|
|
+export OCAMLMAKEFILE
|
|
|
+
|
|
|
+ifndef OCAMLLIBPATH
|
|
|
+ OCAMLLIBPATH := \
|
|
|
+ $(shell $(OCAMLC) 2>/dev/null -where || echo /usr/local/lib/ocaml)
|
|
|
+endif
|
|
|
+export OCAMLLIBPATH
|
|
|
+
|
|
|
+ifndef OCAML_LIB_INSTALL
|
|
|
+ OCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contrib
|
|
|
+endif
|
|
|
+export OCAML_LIB_INSTALL
|
|
|
+
|
|
|
+###########################################################################
|
|
|
+
|
|
|
+#################### change following sections only if
|
|
|
+#################### you know what you are doing!
|
|
|
+
|
|
|
+# delete target files when a build command fails
|
|
|
+.PHONY: .DELETE_ON_ERROR
|
|
|
+.DELETE_ON_ERROR:
|
|
|
+
|
|
|
+# for pedants using "--warn-undefined-variables"
|
|
|
+export MAYBE_IDL
|
|
|
+export REAL_RESULT
|
|
|
+export CAMLIDLFLAGS
|
|
|
+export THREAD_FLAG
|
|
|
+export RES_CLIB
|
|
|
+export MAKEDLL
|
|
|
+export ANNOT_FLAG
|
|
|
+export C_OXRIDL
|
|
|
+export SUBPROJS
|
|
|
+export CFLAGS_WIN32
|
|
|
+export CPPFLAGS_WIN32
|
|
|
+
|
|
|
+INCFLAGS :=
|
|
|
+
|
|
|
+SHELL := /bin/sh
|
|
|
+
|
|
|
+MLDEPDIR := ._d
|
|
|
+BCDIDIR := ._bcdi
|
|
|
+NCDIDIR := ._ncdi
|
|
|
+
|
|
|
+FILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.glade
|
|
|
+
|
|
|
+FILTERED := $(filter $(FILTER_EXTNS), $(SOURCES))
|
|
|
+SOURCE_DIRS := $(filter-out ./, $(sort $(dir $(FILTERED))))
|
|
|
+
|
|
|
+FILTERED_REP := $(filter %.rep, $(FILTERED))
|
|
|
+DEP_REP := $(FILTERED_REP:%.rep=$(MLDEPDIR)/%.d)
|
|
|
+AUTO_REP := $(FILTERED_REP:.rep=.ml)
|
|
|
+
|
|
|
+FILTERED_ZOG := $(filter %.zog, $(FILTERED))
|
|
|
+DEP_ZOG := $(FILTERED_ZOG:%.zog=$(MLDEPDIR)/%.d)
|
|
|
+AUTO_ZOG := $(FILTERED_ZOG:.zog=.ml)
|
|
|
+
|
|
|
+FILTERED_GLADE := $(filter %.glade, $(FILTERED))
|
|
|
+DEP_GLADE := $(FILTERED_GLADE:%.glade=$(MLDEPDIR)/%.d)
|
|
|
+AUTO_GLADE := $(FILTERED_GLADE:.glade=.ml)
|
|
|
+
|
|
|
+FILTERED_ML := $(filter %.ml, $(FILTERED))
|
|
|
+DEP_ML := $(FILTERED_ML:%.ml=$(MLDEPDIR)/%.d)
|
|
|
+
|
|
|
+FILTERED_MLI := $(filter %.mli, $(FILTERED))
|
|
|
+DEP_MLI := $(FILTERED_MLI:.mli=.di)
|
|
|
+
|
|
|
+FILTERED_MLL := $(filter %.mll, $(FILTERED))
|
|
|
+DEP_MLL := $(FILTERED_MLL:%.mll=$(MLDEPDIR)/%.d)
|
|
|
+AUTO_MLL := $(FILTERED_MLL:.mll=.ml)
|
|
|
+
|
|
|
+FILTERED_MLY := $(filter %.mly, $(FILTERED))
|
|
|
+DEP_MLY := $(FILTERED_MLY:%.mly=$(MLDEPDIR)/%.d) $(FILTERED_MLY:.mly=.di)
|
|
|
+AUTO_MLY := $(FILTERED_MLY:.mly=.mli) $(FILTERED_MLY:.mly=.ml)
|
|
|
+
|
|
|
+FILTERED_IDL := $(filter %.idl, $(FILTERED))
|
|
|
+DEP_IDL := $(FILTERED_IDL:%.idl=$(MLDEPDIR)/%.d) $(FILTERED_IDL:.idl=.di)
|
|
|
+C_IDL := $(FILTERED_IDL:%.idl=%_stubs.c)
|
|
|
+ifndef NOIDLHEADER
|
|
|
+ C_IDL += $(FILTERED_IDL:.idl=.h)
|
|
|
+endif
|
|
|
+OBJ_C_IDL := $(FILTERED_IDL:%.idl=%_stubs.$(EXT_OBJ))
|
|
|
+AUTO_IDL := $(FILTERED_IDL:.idl=.mli) $(FILTERED_IDL:.idl=.ml) $(C_IDL)
|
|
|
+
|
|
|
+FILTERED_OXRIDL := $(filter %.oxridl, $(FILTERED))
|
|
|
+DEP_OXRIDL := $(FILTERED_OXRIDL:%.oxridl=$(MLDEPDIR)/%.d) $(FILTERED_OXRIDL:.oxridl=.di)
|
|
|
+AUTO_OXRIDL := $(FILTERED_OXRIDL:.oxridl=.mli) $(FILTERED_OXRIDL:.oxridl=.ml) $(C_OXRIDL)
|
|
|
+
|
|
|
+FILTERED_C_CXX := $(filter %.c %.m %.$(EXT_CXX), $(FILTERED))
|
|
|
+OBJ_C_CXX := $(FILTERED_C_CXX:.c=.$(EXT_OBJ))
|
|
|
+OBJ_C_CXX := $(OBJ_C_CXX:.m=.$(EXT_OBJ))
|
|
|
+OBJ_C_CXX := $(OBJ_C_CXX:.$(EXT_CXX)=.$(EXT_OBJ))
|
|
|
+
|
|
|
+PRE_TARGETS += $(AUTO_MLL) $(AUTO_MLY) $(AUTO_IDL) $(AUTO_OXRIDL) $(AUTO_ZOG) $(AUTO_REP) $(AUTO_GLADE)
|
|
|
+
|
|
|
+ALL_DEPS := $(DEP_ML) $(DEP_MLI) $(DEP_MLL) $(DEP_MLY) $(DEP_IDL) $(DEP_OXRIDL) $(DEP_ZOG) $(DEP_REP) $(DEP_GLADE)
|
|
|
+
|
|
|
+MLDEPS := $(filter %.d, $(ALL_DEPS))
|
|
|
+MLIDEPS := $(filter %.di, $(ALL_DEPS))
|
|
|
+BCDEPIS := $(MLIDEPS:%.di=$(BCDIDIR)/%.di)
|
|
|
+NCDEPIS := $(MLIDEPS:%.di=$(NCDIDIR)/%.di)
|
|
|
+
|
|
|
+ALLML := $(filter %.mli %.ml %.mll %.mly %.idl %.oxridl %.rep %.zog %.glade, $(FILTERED))
|
|
|
+
|
|
|
+IMPLO_INTF := $(ALLML:%.mli=%.mli.__)
|
|
|
+IMPLO_INTF := $(foreach file, $(IMPLO_INTF), \
|
|
|
+ $(basename $(file)).cmi $(basename $(file)).cmo)
|
|
|
+IMPLO_INTF := $(filter-out %.mli.cmo, $(IMPLO_INTF))
|
|
|
+IMPLO_INTF := $(IMPLO_INTF:%.mli.cmi=%.cmi)
|
|
|
+
|
|
|
+IMPLX_INTF := $(IMPLO_INTF:.cmo=.cmx)
|
|
|
+
|
|
|
+INTF := $(filter %.cmi, $(IMPLO_INTF))
|
|
|
+IMPL_CMO := $(filter %.cmo, $(IMPLO_INTF))
|
|
|
+IMPL_CMX := $(IMPL_CMO:.cmo=.cmx)
|
|
|
+IMPL_ASM := $(IMPL_CMO:.cmo=.asm)
|
|
|
+IMPL_S := $(IMPL_CMO:.cmo=.s)
|
|
|
+
|
|
|
+OBJ_LINK := $(OBJ_C_IDL) $(OBJ_C_CXX)
|
|
|
+OBJ_FILES := $(IMPL_CMO:.cmo=.$(EXT_OBJ)) $(OBJ_LINK)
|
|
|
+
|
|
|
+EXECS := $(addsuffix $(EXE), \
|
|
|
+ $(sort $(TOPRESULT) $(BCRESULT) $(NCRESULT)))
|
|
|
+ifdef WIN32
|
|
|
+ EXECS += $(BCRESULT).dll $(NCRESULT).dll
|
|
|
+endif
|
|
|
+
|
|
|
+CLIB_BASE := $(RESULT)$(RES_CLIB_SUF)
|
|
|
+ifneq ($(strip $(OBJ_LINK)),)
|
|
|
+ RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB)
|
|
|
+endif
|
|
|
+
|
|
|
+ifdef WIN32
|
|
|
+DLLSONAME := dll$(CLIB_BASE).dll
|
|
|
+else
|
|
|
+DLLSONAME := dll$(CLIB_BASE).so
|
|
|
+endif
|
|
|
+
|
|
|
+NONEXECS := $(INTF) $(IMPL_CMO) $(IMPL_CMX) $(IMPL_ASM) $(IMPL_S) \
|
|
|
+ $(OBJ_FILES) $(PRE_TARGETS) $(BCRESULT).cma $(NCRESULT).cmxa \
|
|
|
+ $(NCRESULT).$(EXT_LIB) $(BCRESULT).cmi $(BCRESULT).cmo \
|
|
|
+ $(NCRESULT).cmi $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \
|
|
|
+ $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \
|
|
|
+ $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx \
|
|
|
+ $(LIB_PACK_NAME).$(EXT_OBJ)
|
|
|
+
|
|
|
+ifndef STATIC
|
|
|
+ NONEXECS += $(DLLSONAME)
|
|
|
+endif
|
|
|
+
|
|
|
+ifndef LIBINSTALL_FILES
|
|
|
+ LIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \
|
|
|
+ $(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB)
|
|
|
+ ifndef STATIC
|
|
|
+ ifneq ($(strip $(OBJ_LINK)),)
|
|
|
+ LIBINSTALL_FILES += $(DLLSONAME)
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+export LIBINSTALL_FILES
|
|
|
+
|
|
|
+ifdef WIN32
|
|
|
+ # some extra stuff is created while linking DLLs
|
|
|
+ NONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).lib
|
|
|
+endif
|
|
|
+
|
|
|
+TARGETS := $(EXECS) $(NONEXECS)
|
|
|
+
|
|
|
+# If there are IDL-files
|
|
|
+ifneq ($(strip $(FILTERED_IDL)),)
|
|
|
+ MAYBE_IDL := -cclib -lcamlidl
|
|
|
+endif
|
|
|
+
|
|
|
+ifdef USE_CAMLP4
|
|
|
+ CAMLP4PATH := \
|
|
|
+ $(shell $(CAMLP4) -where 2>/dev/null || echo /usr/local/lib/camlp4)
|
|
|
+ INCFLAGS := -I $(CAMLP4PATH)
|
|
|
+ CINCFLAGS := -I$(CAMLP4PATH)
|
|
|
+endif
|
|
|
+
|
|
|
+INCFLAGS := $(INCFLAGS) $(INCDIRS:%=-I %) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %)
|
|
|
+CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%)
|
|
|
+
|
|
|
+ifndef MSVC
|
|
|
+ CLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \
|
|
|
+ $(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%)
|
|
|
+
|
|
|
+ ifeq ($(ELF_RPATH), yes)
|
|
|
+ CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%)
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifndef PROFILING
|
|
|
+ INTF_OCAMLC := $(OCAMLC)
|
|
|
+else
|
|
|
+ ifndef THREADS
|
|
|
+ INTF_OCAMLC := $(OCAMLCP) -p $(OCAMLCPFLAGS)
|
|
|
+ else
|
|
|
+ # OCaml does not support profiling byte code
|
|
|
+ # with threads (yet), therefore we force an error.
|
|
|
+ ifndef REAL_OCAMLC
|
|
|
+ $(error Profiling of multithreaded byte code not yet supported by OCaml)
|
|
|
+ endif
|
|
|
+ INTF_OCAMLC := $(OCAMLC)
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifndef MSVC
|
|
|
+ COMMON_LDFLAGS := $(LDFLAGS:%=-ccopt %) $(SOURCE_DIRS:%=-ccopt -L%) \
|
|
|
+ $(LIBDIRS:%=-ccopt -L%) $(EXTLIBDIRS:%=-ccopt -L%) \
|
|
|
+ $(EXTLIBDIRS:%=-ccopt -Wl $(OCAML_DEFAULT_DIRS:%=-ccopt -L%))
|
|
|
+
|
|
|
+ ifeq ($(ELF_RPATH),yes)
|
|
|
+ COMMON_LDFLAGS += $(EXTLIBDIRS:%=-ccopt -Wl,$(RPATH_FLAG)%)
|
|
|
+ endif
|
|
|
+else
|
|
|
+ COMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \
|
|
|
+ $(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \
|
|
|
+ $(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) "
|
|
|
+endif
|
|
|
+
|
|
|
+CLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %')
|
|
|
+ifdef MSVC
|
|
|
+ ifndef STATIC
|
|
|
+ # MSVC libraries do not have 'lib' prefix
|
|
|
+ CLIBS_OPTS := $(CLIBS:%=-cclib %.lib)
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifneq ($(strip $(OBJ_LINK)),)
|
|
|
+ ifdef CREATE_LIB
|
|
|
+ OBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL)
|
|
|
+ else
|
|
|
+ OBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL)
|
|
|
+ endif
|
|
|
+else
|
|
|
+ OBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL)
|
|
|
+endif
|
|
|
+
|
|
|
+ifdef LIB_PACK_NAME
|
|
|
+ FOR_PACK_NAME := $(shell echo $(LIB_PACK_NAME) | awk '{print toupper(substr($$0,1,1))substr($$0,2)}')
|
|
|
+endif
|
|
|
+
|
|
|
+# If we have to make byte-code
|
|
|
+ifndef REAL_OCAMLC
|
|
|
+ BYTE_OCAML := y
|
|
|
+
|
|
|
+ # EXTRADEPS is added dependencies we have to insert for all
|
|
|
+ # executable files we generate. Ideally it should be all of the
|
|
|
+ # libraries we use, but it's hard to find the ones that get searched on
|
|
|
+ # the path since I don't know the paths built into the compiler, so
|
|
|
+ # just include the ones with slashes in their names.
|
|
|
+ EXTRADEPS := $(addsuffix .cma,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i))))
|
|
|
+
|
|
|
+
|
|
|
+ ifndef LIB_PACK_NAME
|
|
|
+ SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS)
|
|
|
+ else
|
|
|
+ SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLBCFLAGS)
|
|
|
+ endif
|
|
|
+
|
|
|
+ REAL_OCAMLC := $(INTF_OCAMLC)
|
|
|
+
|
|
|
+ REAL_IMPL := $(IMPL_CMO)
|
|
|
+ REAL_IMPL_INTF := $(IMPLO_INTF)
|
|
|
+ IMPL_SUF := .cmo
|
|
|
+
|
|
|
+ DEPFLAGS :=
|
|
|
+ MAKE_DEPS := $(MLDEPS) $(BCDEPIS)
|
|
|
+
|
|
|
+ ifdef CREATE_LIB
|
|
|
+ override CFLAGS := $(PIC_CFLAGS) $(CFLAGS)
|
|
|
+ override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS)
|
|
|
+ ifndef STATIC
|
|
|
+ ifneq ($(strip $(OBJ_LINK)),)
|
|
|
+ MAKEDLL := $(DLLSONAME)
|
|
|
+ ALL_LDFLAGS := -dllib $(DLLSONAME)
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+
|
|
|
+ ifndef NO_CUSTOM
|
|
|
+ ifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" ""
|
|
|
+ ALL_LDFLAGS += -custom
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+
|
|
|
+ ALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \
|
|
|
+ $(COMMON_LDFLAGS) $(LIBS:%=%.cma)
|
|
|
+ CAMLIDLDLLFLAGS :=
|
|
|
+
|
|
|
+ ifdef THREADS
|
|
|
+ ifdef VMTHREADS
|
|
|
+ THREAD_FLAG := -vmthread
|
|
|
+ else
|
|
|
+ THREAD_FLAG := -thread
|
|
|
+ endif
|
|
|
+ ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS)
|
|
|
+ ifndef CREATE_LIB
|
|
|
+ ifndef REAL_OCAMLFIND
|
|
|
+ ALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS)
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+
|
|
|
+# we have to make native-code
|
|
|
+else
|
|
|
+ EXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i))))
|
|
|
+ ifndef PROFILING
|
|
|
+ SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS)
|
|
|
+ PLDFLAGS :=
|
|
|
+ else
|
|
|
+ SPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS)
|
|
|
+ PLDFLAGS := -p
|
|
|
+ endif
|
|
|
+
|
|
|
+ ifndef LIB_PACK_NAME
|
|
|
+ SPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS)
|
|
|
+ else
|
|
|
+ SPECIAL_OCAMLFLAGS := -for-pack $(FOR_PACK_NAME) $(OCAMLNCFLAGS)
|
|
|
+ endif
|
|
|
+ REAL_IMPL := $(IMPL_CMX)
|
|
|
+ REAL_IMPL_INTF := $(IMPLX_INTF)
|
|
|
+ IMPL_SUF := .cmx
|
|
|
+
|
|
|
+ override CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS)
|
|
|
+
|
|
|
+ DEPFLAGS := -native
|
|
|
+ MAKE_DEPS := $(MLDEPS) $(NCDEPIS)
|
|
|
+
|
|
|
+ ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \
|
|
|
+ $(OCAMLNLDFLAGS) $(COMMON_LDFLAGS)
|
|
|
+ CAMLIDLDLLFLAGS := -opt
|
|
|
+
|
|
|
+ ifndef CREATE_LIB
|
|
|
+ ALL_LDFLAGS += $(LIBS:%=%.cmxa)
|
|
|
+ else
|
|
|
+ override CFLAGS := $(PIC_CFLAGS) $(CFLAGS)
|
|
|
+ override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS)
|
|
|
+ endif
|
|
|
+
|
|
|
+ ifdef THREADS
|
|
|
+ THREAD_FLAG := -thread
|
|
|
+ ALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS)
|
|
|
+ ifndef CREATE_LIB
|
|
|
+ ifndef REAL_OCAMLFIND
|
|
|
+ ALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS)
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+export MAKE_DEPS
|
|
|
+
|
|
|
+ifdef ANNOTATE
|
|
|
+ ANNOT_FLAG := -annot
|
|
|
+else
|
|
|
+endif
|
|
|
+
|
|
|
+ALL_OCAMLCFLAGS := $(THREAD_FLAG) $(ANNOT_FLAG) $(OCAMLFLAGS) \
|
|
|
+ $(INCFLAGS) $(SPECIAL_OCAMLFLAGS)
|
|
|
+
|
|
|
+ifdef make_deps
|
|
|
+ -include $(MAKE_DEPS)
|
|
|
+ PRE_TARGETS :=
|
|
|
+endif
|
|
|
+
|
|
|
+###########################################################################
|
|
|
+# USER RULES
|
|
|
+
|
|
|
+# Call "OCamlMakefile QUIET=" to get rid of all of the @'s.
|
|
|
+QUIET=@
|
|
|
+
|
|
|
+# generates byte-code (default)
|
|
|
+byte-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \
|
|
|
+ REAL_RESULT="$(BCRESULT)" make_deps=yes
|
|
|
+bc: byte-code
|
|
|
+
|
|
|
+byte-code-nolink: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
|
|
|
+ REAL_RESULT="$(BCRESULT)" make_deps=yes
|
|
|
+bcnl: byte-code-nolink
|
|
|
+
|
|
|
+top: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \
|
|
|
+ REAL_RESULT="$(BCRESULT)" make_deps=yes
|
|
|
+
|
|
|
+# generates native-code
|
|
|
+
|
|
|
+native-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \
|
|
|
+ REAL_RESULT="$(NCRESULT)" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ make_deps=yes
|
|
|
+nc: native-code
|
|
|
+
|
|
|
+native-code-nolink: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
|
|
|
+ REAL_RESULT="$(NCRESULT)" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ make_deps=yes
|
|
|
+ncnl: native-code-nolink
|
|
|
+
|
|
|
+# generates byte-code libraries
|
|
|
+byte-code-library: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(BCRESULT).cma \
|
|
|
+ REAL_RESULT="$(BCRESULT)" \
|
|
|
+ CREATE_LIB=yes \
|
|
|
+ make_deps=yes
|
|
|
+bcl: byte-code-library
|
|
|
+
|
|
|
+# generates native-code libraries
|
|
|
+native-code-library: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(NCRESULT).cmxa \
|
|
|
+ REAL_RESULT="$(NCRESULT)" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ CREATE_LIB=yes \
|
|
|
+ make_deps=yes
|
|
|
+ncl: native-code-library
|
|
|
+
|
|
|
+ifdef WIN32
|
|
|
+# generates byte-code dll
|
|
|
+byte-code-dll: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(BCRESULT).dll \
|
|
|
+ REAL_RESULT="$(BCRESULT)" \
|
|
|
+ make_deps=yes
|
|
|
+bcd: byte-code-dll
|
|
|
+
|
|
|
+# generates native-code dll
|
|
|
+native-code-dll: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(NCRESULT).dll \
|
|
|
+ REAL_RESULT="$(NCRESULT)" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ make_deps=yes
|
|
|
+ncd: native-code-dll
|
|
|
+endif
|
|
|
+
|
|
|
+# generates byte-code with debugging information
|
|
|
+debug-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \
|
|
|
+ REAL_RESULT="$(BCRESULT)" make_deps=yes \
|
|
|
+ OCAMLFLAGS="-g $(OCAMLFLAGS)" \
|
|
|
+ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
|
|
|
+dc: debug-code
|
|
|
+
|
|
|
+debug-code-nolink: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
|
|
|
+ REAL_RESULT="$(BCRESULT)" make_deps=yes \
|
|
|
+ OCAMLFLAGS="-g $(OCAMLFLAGS)" \
|
|
|
+ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
|
|
|
+dcnl: debug-code-nolink
|
|
|
+
|
|
|
+# generates byte-code with debugging information (native code)
|
|
|
+debug-native-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \
|
|
|
+ REAL_RESULT="$(NCRESULT)" make_deps=yes \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ OCAMLFLAGS="-g $(OCAMLFLAGS)" \
|
|
|
+ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
|
|
|
+dnc: debug-native-code
|
|
|
+
|
|
|
+debug-native-code-nolink: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \
|
|
|
+ REAL_RESULT="$(NCRESULT)" make_deps=yes \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ OCAMLFLAGS="-g $(OCAMLFLAGS)" \
|
|
|
+ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
|
|
|
+dncnl: debug-native-code-nolink
|
|
|
+
|
|
|
+# generates byte-code libraries with debugging information
|
|
|
+debug-code-library: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(BCRESULT).cma \
|
|
|
+ REAL_RESULT="$(BCRESULT)" make_deps=yes \
|
|
|
+ CREATE_LIB=yes \
|
|
|
+ OCAMLFLAGS="-g $(OCAMLFLAGS)" \
|
|
|
+ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
|
|
|
+dcl: debug-code-library
|
|
|
+
|
|
|
+# generates byte-code libraries with debugging information (native code)
|
|
|
+debug-native-code-library: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(NCRESULT).cmxa \
|
|
|
+ REAL_RESULT="$(NCRESULT)" make_deps=yes \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ CREATE_LIB=yes \
|
|
|
+ OCAMLFLAGS="-g $(OCAMLFLAGS)" \
|
|
|
+ OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"
|
|
|
+dncl: debug-native-code-library
|
|
|
+
|
|
|
+# generates byte-code for profiling
|
|
|
+profiling-byte-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \
|
|
|
+ REAL_RESULT="$(BCRESULT)" PROFILING="y" \
|
|
|
+ make_deps=yes
|
|
|
+pbc: profiling-byte-code
|
|
|
+
|
|
|
+# generates native-code
|
|
|
+
|
|
|
+profiling-native-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \
|
|
|
+ REAL_RESULT="$(NCRESULT)" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ PROFILING="y" \
|
|
|
+ make_deps=yes
|
|
|
+pnc: profiling-native-code
|
|
|
+
|
|
|
+# generates byte-code libraries
|
|
|
+profiling-byte-code-library: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(BCRESULT).cma \
|
|
|
+ REAL_RESULT="$(BCRESULT)" PROFILING="y" \
|
|
|
+ CREATE_LIB=yes \
|
|
|
+ make_deps=yes
|
|
|
+pbcl: profiling-byte-code-library
|
|
|
+
|
|
|
+# generates native-code libraries
|
|
|
+profiling-native-code-library: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(RES_CLIB) $(NCRESULT).cmxa \
|
|
|
+ REAL_RESULT="$(NCRESULT)" PROFILING="y" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ CREATE_LIB=yes \
|
|
|
+ make_deps=yes
|
|
|
+pncl: profiling-native-code-library
|
|
|
+
|
|
|
+# packs byte-code objects
|
|
|
+pack-byte-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \
|
|
|
+ REAL_RESULT="$(BCRESULT)" \
|
|
|
+ PACK_LIB=yes make_deps=yes
|
|
|
+pabc: pack-byte-code
|
|
|
+
|
|
|
+# packs native-code objects
|
|
|
+pack-native-code: $(PRE_TARGETS)
|
|
|
+ $(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \
|
|
|
+ $(NCRESULT).cmx $(NCRESULT).$(EXT_OBJ) \
|
|
|
+ REAL_RESULT="$(NCRESULT)" \
|
|
|
+ REAL_OCAMLC="$(OCAMLOPT)" \
|
|
|
+ PACK_LIB=yes make_deps=yes
|
|
|
+panc: pack-native-code
|
|
|
+
|
|
|
+# generates HTML-documentation
|
|
|
+htdoc: $(DOC_DIR)/$(RESULT)/html/index.html
|
|
|
+
|
|
|
+# generates Latex-documentation
|
|
|
+ladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex
|
|
|
+
|
|
|
+# generates PostScript-documentation
|
|
|
+psdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps
|
|
|
+
|
|
|
+# generates PDF-documentation
|
|
|
+pdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf
|
|
|
+
|
|
|
+# generates all supported forms of documentation
|
|
|
+doc: htdoc ladoc psdoc pdfdoc
|
|
|
+
|
|
|
+###########################################################################
|
|
|
+# LOW LEVEL RULES
|
|
|
+
|
|
|
+$(REAL_RESULT): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS) $(RESULTDEPS)
|
|
|
+ $(REAL_OCAMLFIND) $(REAL_OCAMLC) \
|
|
|
+ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \
|
|
|
+ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \
|
|
|
+ $(REAL_IMPL)
|
|
|
+
|
|
|
+nolink: $(REAL_IMPL_INTF) $(OBJ_LINK)
|
|
|
+
|
|
|
+ifdef WIN32
|
|
|
+$(REAL_RESULT).dll: $(REAL_IMPL_INTF) $(OBJ_LINK)
|
|
|
+ $(CAMLIDLDLL) $(CAMLIDLDLLFLAGS) $(OBJ_LINK) $(CLIBS) \
|
|
|
+ -o $@ $(REAL_IMPL)
|
|
|
+endif
|
|
|
+
|
|
|
+%$(TOPSUFFIX): $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS)
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLMKTOP) \
|
|
|
+ $(OCAML_FIND_PACKAGES) $(OCAML_FIND_LINKPKG) \
|
|
|
+ $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@$(EXE) \
|
|
|
+ $(REAL_IMPL)
|
|
|
+
|
|
|
+.SUFFIXES: .mli .ml .cmi .cmo .cmx .cma .cmxa .$(EXT_OBJ) \
|
|
|
+ .mly .di .d .$(EXT_LIB) .idl %.oxridl .c .m .$(EXT_CXX) .h .so \
|
|
|
+ .rep .zog .glade
|
|
|
+
|
|
|
+ifndef STATIC
|
|
|
+ifdef MINGW
|
|
|
+# From OCaml 3.11.0, ocamlmklib is available on windows
|
|
|
+OCAMLMLIB_EXISTS = $(shell which $(OCAMLMKLIB))
|
|
|
+ifeq ($(strip $(OCAMLMLIB_EXISTS)),)
|
|
|
+$(DLLSONAME): $(OBJ_LINK)
|
|
|
+ $(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \
|
|
|
+ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \
|
|
|
+ '$(OCAMLLIBPATH)/ocamlrun.a' \
|
|
|
+ -Wl,--whole-archive \
|
|
|
+ -Wl,--export-all-symbols \
|
|
|
+ -Wl,--allow-multiple-definition \
|
|
|
+ -Wl,--enable-auto-import
|
|
|
+else
|
|
|
+$(DLLSONAME): $(OBJ_LINK)
|
|
|
+ $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \
|
|
|
+ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) \
|
|
|
+ $(CFRAMEWORKS:%=-framework %) \
|
|
|
+ $(OCAMLMKLIB_FLAGS)
|
|
|
+endif
|
|
|
+else
|
|
|
+ifdef MSVC
|
|
|
+$(DLLSONAME): $(OBJ_LINK)
|
|
|
+ link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \
|
|
|
+ $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \
|
|
|
+ '$(OCAMLLIBPATH)/ocamlrun.lib'
|
|
|
+
|
|
|
+else
|
|
|
+$(DLLSONAME): $(OBJ_LINK)
|
|
|
+ $(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \
|
|
|
+ -o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \
|
|
|
+ $(OCAMLMKLIB_FLAGS)
|
|
|
+endif
|
|
|
+endif
|
|
|
+endif
|
|
|
+
|
|
|
+ifndef LIB_PACK_NAME
|
|
|
+$(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS)
|
|
|
+ $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL)
|
|
|
+
|
|
|
+$(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS)
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(REAL_IMPL)
|
|
|
+else
|
|
|
+# Packing a bytecode library
|
|
|
+LIB_PACK_NAME_MLI = $(wildcard $(LIB_PACK_NAME).mli)
|
|
|
+ifeq ($(LIB_PACK_NAME_MLI),)
|
|
|
+LIB_PACK_NAME_CMI = $(LIB_PACK_NAME).cmi
|
|
|
+else
|
|
|
+# $(LIB_PACK_NAME).mli exists, it likely depends on other compiled interfaces
|
|
|
+LIB_PACK_NAME_CMI =
|
|
|
+$(LIB_PACK_NAME).cmi: $(REAL_IMPL_INTF)
|
|
|
+endif
|
|
|
+ifdef BYTE_OCAML
|
|
|
+$(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmo: $(REAL_IMPL_INTF)
|
|
|
+ $(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack -o $(LIB_PACK_NAME).cmo $(OCAMLLDFLAGS) $(REAL_IMPL)
|
|
|
+# Packing into a unit which can be transformed into a library
|
|
|
+# Remember the .ml's must have been compiled with -for-pack $(LIB_PACK_NAME)
|
|
|
+else
|
|
|
+$(LIB_PACK_NAME_CMI) $(LIB_PACK_NAME).cmx: $(REAL_IMPL_INTF)
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLOPT) -pack -o $(LIB_PACK_NAME).cmx $(OCAMLLDFLAGS) $(REAL_IMPL)
|
|
|
+endif
|
|
|
+
|
|
|
+$(RESULT).cma: $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS)
|
|
|
+ $(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(OBJS_LIBS) $(ALL_LDFLAGS) -o $@ $(LIB_PACK_NAME).cmo
|
|
|
+
|
|
|
+$(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS)
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLOPT) -a $(OBJS_LIBS) $(filter-out -custom, $(ALL_LDFLAGS)) -o $@ $(LIB_PACK_NAME).cmx
|
|
|
+endif
|
|
|
+
|
|
|
+$(RES_CLIB): $(OBJ_LINK)
|
|
|
+ifndef MSVC
|
|
|
+ ifneq ($(strip $(OBJ_LINK)),)
|
|
|
+ $(AR) rcs $@ $(OBJ_LINK)
|
|
|
+ endif
|
|
|
+else
|
|
|
+ ifneq ($(strip $(OBJ_LINK)),)
|
|
|
+ lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK)
|
|
|
+ endif
|
|
|
+endif
|
|
|
+
|
|
|
+%.cmi: %.mli $(EXTRADEPS)
|
|
|
+ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
|
|
|
+ if [ -z "$$pp" ]; then \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c $(THREAD_FLAG) $(ANNOT_FLAG) \
|
|
|
+ $(OCAMLFLAGS) $(INCFLAGS) $<; \
|
|
|
+ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c $(THREAD_FLAG) $(ANNOT_FLAG) \
|
|
|
+ $(OCAMLFLAGS) $(INCFLAGS) $<; \
|
|
|
+ else \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c -pp \"$$pp $(PPFLAGS)\" $(THREAD_FLAG) $(ANNOT_FLAG) \
|
|
|
+ $(OCAMLFLAGS) $(INCFLAGS) $<; \
|
|
|
+ $(REAL_OCAMLFIND) $(INTF_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c -pp "$$pp $(PPFLAGS)" $(THREAD_FLAG) $(ANNOT_FLAG) \
|
|
|
+ $(OCAMLFLAGS) $(INCFLAGS) $<; \
|
|
|
+ fi
|
|
|
+
|
|
|
+%.cmi: %$(IMPL_SUF);
|
|
|
+
|
|
|
+%$(IMPL_SUF) %.$(EXT_OBJ): %.ml $(EXTRADEPS)
|
|
|
+ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
|
|
|
+ if [ -z "$$pp" ]; then \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c $(ALL_OCAMLCFLAGS) $<; \
|
|
|
+ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c $(ALL_OCAMLCFLAGS) $<; \
|
|
|
+ else \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c -pp \"$$pp $(PPFLAGS)\" $(ALL_OCAMLCFLAGS) $<; \
|
|
|
+ $(REAL_OCAMLFIND) $(REAL_OCAMLC) $(OCAML_FIND_PACKAGES) \
|
|
|
+ -c -pp "$$pp $(PPFLAGS)" $(ALL_OCAMLCFLAGS) $<; \
|
|
|
+ fi
|
|
|
+
|
|
|
+.PRECIOUS: %.ml
|
|
|
+%.ml: %.mll
|
|
|
+ $(OCAMLLEX) $(LFLAGS) $<
|
|
|
+
|
|
|
+.PRECIOUS: %.ml %.mli
|
|
|
+%.ml %.mli: %.mly
|
|
|
+ $(OCAMLYACC) $(YFLAGS) $<
|
|
|
+ $(QUIET)pp=`sed -n -e 's/.*(\*pp \([^*]*\) \*).*/\1/p;q' $<`; \
|
|
|
+ if [ ! -z "$$pp" ]; then \
|
|
|
+ mv $*.ml $*.ml.temporary; \
|
|
|
+ echo "(*pp $$pp $(PPFLAGS)*)" > $*.ml; \
|
|
|
+ cat $*.ml.temporary >> $*.ml; \
|
|
|
+ rm $*.ml.temporary; \
|
|
|
+ mv $*.mli $*.mli.temporary; \
|
|
|
+ echo "(*pp $$pp $(PPFLAGS)*)" > $*.mli; \
|
|
|
+ cat $*.mli.temporary >> $*.mli; \
|
|
|
+ rm $*.mli.temporary; \
|
|
|
+ fi
|
|
|
+
|
|
|
+
|
|
|
+.PRECIOUS: %.ml
|
|
|
+%.ml: %.rep
|
|
|
+ $(CAMELEON_REPORT) $(CAMELEON_REPORT_FLAGS) -gen $<
|
|
|
+
|
|
|
+.PRECIOUS: %.ml
|
|
|
+%.ml: %.zog
|
|
|
+ $(CAMELEON_ZOGGY) $(CAMELEON_ZOGGY_FLAGS) -impl $< > $@
|
|
|
+
|
|
|
+.PRECIOUS: %.ml
|
|
|
+%.ml: %.glade
|
|
|
+ $(OCAML_GLADECC) $(OCAML_GLADECC_FLAGS) $< > $@
|
|
|
+
|
|
|
+.PRECIOUS: %.ml %.mli
|
|
|
+%.ml %.mli: %.oxridl
|
|
|
+ $(OXRIDL) $<
|
|
|
+
|
|
|
+.PRECIOUS: %.ml %.mli %_stubs.c %.h
|
|
|
+%.ml %.mli %_stubs.c %.h: %.idl
|
|
|
+ $(CAMLIDL) $(MAYBE_IDL_HEADER) $(IDLFLAGS) \
|
|
|
+ $(CAMLIDLFLAGS) $<
|
|
|
+ $(QUIET)if [ $(NOIDLHEADER) ]; then touch $*.h; fi
|
|
|
+
|
|
|
+%.$(EXT_OBJ): %.c
|
|
|
+ $(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \
|
|
|
+ $(CPPFLAGS) $(CPPFLAGS_WIN32) \
|
|
|
+ $(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $<
|
|
|
+
|
|
|
+%.$(EXT_OBJ): %.m
|
|
|
+ $(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \
|
|
|
+ -I'$(OCAMLLIBPATH)' \
|
|
|
+ $< $(CFLAG_O)$@
|
|
|
+
|
|
|
+%.$(EXT_OBJ): %.$(EXT_CXX)
|
|
|
+ $(CXX) -c $(CXXFLAGS) $(CINCFLAGS) $(CPPFLAGS) \
|
|
|
+ -I'$(OCAMLLIBPATH)' \
|
|
|
+ $< $(CFLAG_O)$@
|
|
|
+
|
|
|
+$(MLDEPDIR)/%.d: %.ml
|
|
|
+ $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi
|
|
|
+ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
|
|
|
+ if [ -z "$$pp" ]; then \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
|
|
|
+ $(INCFLAGS) $< \> $@; \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
|
|
|
+ $(INCFLAGS) $< > $@; \
|
|
|
+ else \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
|
|
|
+ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \
|
|
|
+ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \
|
|
|
+ fi
|
|
|
+
|
|
|
+$(BCDIDIR)/%.di $(NCDIDIR)/%.di: %.mli
|
|
|
+ $(QUIET)if [ ! -d $(@D) ]; then mkdir -p $(@D); fi
|
|
|
+ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $<`; \
|
|
|
+ if [ -z "$$pp" ]; then \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< \> $@; \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(INCFLAGS) $< > $@; \
|
|
|
+ else \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \
|
|
|
+ -pp \"$$pp $(PPFLAGS)\" $(INCFLAGS) $< \> $@; \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \
|
|
|
+ -pp "$$pp $(PPFLAGS)" $(INCFLAGS) $< > $@; \
|
|
|
+ fi
|
|
|
+
|
|
|
+$(DOC_DIR)/$(RESULT)/html:
|
|
|
+ mkdir -p $@
|
|
|
+
|
|
|
+$(DOC_DIR)/$(RESULT)/html/index.html: $(DOC_DIR)/$(RESULT)/html $(DOC_FILES)
|
|
|
+ rm -rf $</*
|
|
|
+ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $(FIRST_DOC_FILE)`; \
|
|
|
+ if [ -z "$$pp" ]; then \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -html -d $< $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -html -d $< $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES); \
|
|
|
+ else \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp \"$$pp $(PPFLAGS)\" -html -d $< $(OCAMLDOCFLAGS) \
|
|
|
+ $(INCFLAGS) $(DOC_FILES); \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp "$$pp $(PPFLAGS)" -html -d $< $(OCAMLDOCFLAGS) \
|
|
|
+ $(INCFLAGS) $(DOC_FILES); \
|
|
|
+ fi
|
|
|
+
|
|
|
+$(DOC_DIR)/$(RESULT)/latex:
|
|
|
+ mkdir -p $@
|
|
|
+
|
|
|
+$(DOC_DIR)/$(RESULT)/latex/doc.tex: $(DOC_DIR)/$(RESULT)/latex $(DOC_FILES)
|
|
|
+ rm -rf $</*
|
|
|
+ $(QUIET)pp=`sed -n -e '/^#/d' -e 's/(\*pp \([^*]*\) \*)/\1/p;q' $(FIRST_DOC_FILE)`; \
|
|
|
+ if [ -z "$$pp" ]; then \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) \
|
|
|
+ $(DOC_FILES) -o $@; \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -latex $(OCAMLDOCFLAGS) $(INCFLAGS) $(DOC_FILES) \
|
|
|
+ -o $@; \
|
|
|
+ else \
|
|
|
+ $(ECHO) $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp \"$$pp $(PPFLAGS)\" -latex $(OCAMLDOCFLAGS) \
|
|
|
+ $(INCFLAGS) $(DOC_FILES) -o $@; \
|
|
|
+ $(REAL_OCAMLFIND) $(OCAMLDOC) $(OCAML_FIND_PACKAGES) -pp "$$pp $(PPFLAGS)" -latex $(OCAMLDOCFLAGS) \
|
|
|
+ $(INCFLAGS) $(DOC_FILES) -o $@; \
|
|
|
+ fi
|
|
|
+
|
|
|
+$(DOC_DIR)/$(RESULT)/latex/doc.ps: $(DOC_DIR)/$(RESULT)/latex/doc.tex
|
|
|
+ cd $(DOC_DIR)/$(RESULT)/latex && \
|
|
|
+ $(LATEX) doc.tex && \
|
|
|
+ $(LATEX) doc.tex && \
|
|
|
+ $(DVIPS) $(DVIPSFLAGS) doc.dvi -o $(@F)
|
|
|
+
|
|
|
+$(DOC_DIR)/$(RESULT)/latex/doc.pdf: $(DOC_DIR)/$(RESULT)/latex/doc.ps
|
|
|
+ cd $(DOC_DIR)/$(RESULT)/latex && $(PS2PDF) $(<F)
|
|
|
+
|
|
|
+define make_subproj
|
|
|
+.PHONY:
|
|
|
+subproj_$(1):
|
|
|
+ $$(eval $$(call PROJ_$(1)))
|
|
|
+ $(QUIET)if [ "$(SUBTARGET)" != "all" ]; then \
|
|
|
+ $(MAKE) -f $(OCAMLMAKEFILE) $(SUBTARGET); \
|
|
|
+ fi
|
|
|
+endef
|
|
|
+
|
|
|
+$(foreach subproj,$(SUBPROJS),$(eval $(call make_subproj,$(subproj))))
|
|
|
+
|
|
|
+.PHONY:
|
|
|
+subprojs: $(SUBPROJS:%=subproj_%)
|
|
|
+
|
|
|
+###########################################################################
|
|
|
+# (UN)INSTALL RULES FOR LIBRARIES
|
|
|
+
|
|
|
+.PHONY: libinstall
|
|
|
+libinstall: all
|
|
|
+ $(QUIET)printf "\nInstalling library with ocamlfind\n"
|
|
|
+ $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META $(LIBINSTALL_FILES)
|
|
|
+ $(QUIET)printf "\nInstallation successful.\n"
|
|
|
+
|
|
|
+.PHONY: libinstall-byte-code
|
|
|
+libinstall-byte-code: all
|
|
|
+ $(QUIET)printf "\nInstalling byte-code library with ocamlfind\n"
|
|
|
+ $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META \
|
|
|
+ $(filter-out $(RESULT).$(EXT_LIB) $(RESULT).cmxa, $(LIBINSTALL_FILES))
|
|
|
+ $(QUIET)printf "\nInstallation successful.\n"
|
|
|
+
|
|
|
+.PHONY: libinstall-native-code
|
|
|
+libinstall-native-code: all
|
|
|
+ $(QUIET)printf "\nInstalling native-code library with ocamlfind\n"
|
|
|
+ $(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META \
|
|
|
+ $(filter-out $(DLLSONAME) $(RESULT).cma, $(LIBINSTALL_FILES))
|
|
|
+ $(QUIET)printf "\nInstallation successful.\n"
|
|
|
+
|
|
|
+.PHONY: libuninstall
|
|
|
+libuninstall:
|
|
|
+ $(QUIET)printf "\nUninstalling library with ocamlfind\n"
|
|
|
+ $(OCAMLFIND) remove $(OCAMLFIND_INSTFLAGS) $(RESULT)
|
|
|
+ $(QUIET)printf "\nUninstallation successful.\n"
|
|
|
+
|
|
|
+.PHONY: rawinstall
|
|
|
+rawinstall: all
|
|
|
+ $(QUIET)printf "\nInstalling library to: $(OCAML_LIB_INSTALL)\n"
|
|
|
+ -install -d $(OCAML_LIB_INSTALL)
|
|
|
+ for i in $(LIBINSTALL_FILES); do \
|
|
|
+ if [ -f $$i ]; then \
|
|
|
+ install -c -m 0644 $$i $(OCAML_LIB_INSTALL); \
|
|
|
+ fi; \
|
|
|
+ done
|
|
|
+ $(QUIET)printf "\nInstallation successful.\n"
|
|
|
+
|
|
|
+.PHONY: rawuninstall
|
|
|
+rawuninstall:
|
|
|
+ $(QUIET)printf "\nUninstalling library from: $(OCAML_LIB_INSTALL)\n"
|
|
|
+ cd $(OCAML_LIB_INSTALL) && rm $(notdir $(LIBINSTALL_FILES))
|
|
|
+ $(QUIET)printf "\nUninstallation successful.\n"
|
|
|
+
|
|
|
+###########################################################################
|
|
|
+# MAINTENANCE RULES
|
|
|
+
|
|
|
+.PHONY: clean
|
|
|
+clean::
|
|
|
+ rm -f $(TARGETS) $(TRASH)
|
|
|
+ rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR)
|
|
|
+
|
|
|
+.PHONY: cleanup
|
|
|
+cleanup::
|
|
|
+ rm -f $(NONEXECS) $(TRASH)
|
|
|
+ rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR)
|
|
|
+
|
|
|
+.PHONY: clean-doc
|
|
|
+clean-doc::
|
|
|
+ rm -rf $(DOC_DIR)/$(RESULT)
|
|
|
+
|
|
|
+.PHONY: clean-all
|
|
|
+clean-all:: clean clean-doc
|
|
|
+
|
|
|
+.PHONY: nobackup
|
|
|
+nobackup:
|
|
|
+ rm -f *.bak *~ *.dup
|