Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed
############################################################################ OCamlMakefile# Copyright (C) 1999-2007 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 SOURCESSOURCES := foo.mlendifexport SOURCESifndef RES_CLIB_SUFRES_CLIB_SUF := _stubsendifexport RES_CLIB_SUFifndef RESULTRESULT := fooendifexport RESULT := $(strip $(RESULT))export LIB_PACK_NAMEifndef DOC_FILESDOC_FILES := $(filter %.mli, $(SOURCES))endifexport DOC_FILESFIRST_DOC_FILE := $(firstword $(DOC_FILES))export BCSUFFIXexport NCSUFFIXifndef TOPSUFFIXTOPSUFFIX := .topendifexport 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 THREADSexport VMTHREADSexport ANNOTATEexport USE_CAMLP4export INCDIRSexport LIBDIRSexport EXTLIBDIRSexport RESULTDEPSexport OCAML_DEFAULT_DIRSexport LIBSexport CLIBSexport CFRAMEWORKSexport OCAMLFLAGSexport OCAMLNCFLAGSexport OCAMLBCFLAGSexport OCAMLLDFLAGSexport OCAMLNLDFLAGSexport OCAMLBLDFLAGSexport OCAMLMKLIB_FLAGSifndef OCAMLCPFLAGSOCAMLCPFLAGS := aendifexport OCAMLCPFLAGSifndef DOC_DIRDOC_DIR := docendifexport DOC_DIRexport PPFLAGSexport LFLAGSexport YFLAGSexport IDLFLAGSexport OCAMLDOCFLAGSexport OCAMLFIND_INSTFLAGSexport DVIPSFLAGSexport STATIC# Add a list of optional trash files that should be deleted by "make clean"export TRASHECHO := echoifdef REALLY_QUIETexport REALLY_QUIETECHO := trueLFLAGS := $(LFLAGS) -qYFLAGS := $(YFLAGS) -qendif#################### variables depending on your OCaml-installationifdef MINGWexport MINGWWIN32 := 1CFLAGS_WIN32 := -mno-cygwinendififdef MSVCexport MSVCWIN32 := 1ifndef STATICCPPFLAGS_WIN32 := -DCAML_DLLendifCFLAGS_WIN32 += -nologoEXT_OBJ := objEXT_LIB := libifeq ($(CC),gcc)# work around GNU Make default valueifdef THREADSCC := cl -MTelseCC := clendifendififeq ($(CXX),g++)# work around GNU Make default valueCXX := $(CC)endifCFLAG_O := -Foendififdef WIN32EXT_CXX := cppEXE := .exeendififndef EXT_OBJEXT_OBJ := oendififndef EXT_LIBEXT_LIB := aendififndef EXT_CXXEXT_CXX := ccendififndef EXEEXE := # emptyendififndef CFLAG_OCFLAG_O := -o # do not delete this comment (preserves trailing whitespace)!endifexport CCexport CXXexport CFLAGSexport CXXFLAGSexport LDFLAGSexport CPPFLAGSifndef RPATH_FLAGifdef ELF_RPATH_FLAGRPATH_FLAG := $(ELF_RPATH_FLAG)elseRPATH_FLAG := -Rendifendifexport RPATH_FLAGifndef MSVCifndef PIC_CFLAGSPIC_CFLAGS := -fPICendififndef PIC_CPPFLAGSPIC_CPPFLAGS := -DPICendifendifexport PIC_CFLAGSexport PIC_CPPFLAGSBCRESULT := $(addsuffix $(BCSUFFIX), $(RESULT))NCRESULT := $(addsuffix $(NCSUFFIX), $(RESULT))TOPRESULT := $(addsuffix $(TOPSUFFIX), $(RESULT))ifndef OCAMLFINDOCAMLFIND := ocamlfindendifexport OCAMLFINDifndef OCAMLCOCAMLC := ocamlcendifexport OCAMLCifndef OCAMLOPTOCAMLOPT := ocamloptendifexport OCAMLOPTifndef OCAMLMKTOPOCAMLMKTOP := ocamlmktopendifexport OCAMLMKTOPifndef OCAMLCPOCAMLCP := ocamlcpendifexport OCAMLCPifndef OCAMLDEPOCAMLDEP := ocamldependifexport OCAMLDEPifndef OCAMLLEXOCAMLLEX := ocamllexendifexport OCAMLLEXifndef OCAMLYACCOCAMLYACC := ocamlyaccendifexport OCAMLYACCifndef OCAMLMKLIBOCAMLMKLIB := ocamlmklibendifexport OCAMLMKLIBifndef OCAML_GLADECCOCAML_GLADECC := lablgladecc2endifexport OCAML_GLADECCifndef OCAML_GLADECC_FLAGSOCAML_GLADECC_FLAGS :=endifexport OCAML_GLADECC_FLAGSifndef CAMELEON_REPORTCAMELEON_REPORT := reportendifexport CAMELEON_REPORTifndef CAMELEON_REPORT_FLAGSCAMELEON_REPORT_FLAGS :=endifexport CAMELEON_REPORT_FLAGSifndef CAMELEON_ZOGGYCAMELEON_ZOGGY := camlp4o pa_zog.cma pr_o.cmoendifexport CAMELEON_ZOGGYifndef CAMELEON_ZOGGY_FLAGSCAMELEON_ZOGGY_FLAGS :=endifexport CAMELEON_ZOGGY_FLAGSifndef OXRIDLOXRIDL := oxridlendifexport OXRIDLifndef CAMLIDLCAMLIDL := camlidlendifexport CAMLIDLifndef CAMLIDLDLLCAMLIDLDLL := camlidldllendifexport CAMLIDLDLLifndef NOIDLHEADERMAYBE_IDL_HEADER := -headerendifexport NOIDLHEADERexport NO_CUSTOMifndef CAMLP4CAMLP4 := camlp4endifexport CAMLP4ifndef REAL_OCAMLFINDifdef PACKSifndef CREATE_LIBifdef THREADSPACKS += threadsendifendifempty :=space := $(empty) $(empty)comma := ,ifdef PREDSPRE_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)elseOCAML_FIND_PACKAGES := -package $(subst $(space),$(comma),$(PACKS))OCAML_DEP_PACKAGES :=endifOCAML_FIND_LINKPKG := -linkpkgREAL_OCAMLFIND := $(OCAMLFIND)endifendifexport OCAML_FIND_PACKAGESexport OCAML_DEP_PACKAGESexport OCAML_FIND_LINKPKGexport REAL_OCAMLFINDifndef OCAMLDOCOCAMLDOC := ocamldocendifexport OCAMLDOCifndef LATEXLATEX := latexendifexport LATEXifndef DVIPSDVIPS := dvipsendifexport DVIPSifndef PS2PDFPS2PDF := ps2pdfendifexport PS2PDFifndef OCAMLMAKEFILEOCAMLMAKEFILE := OCamlMakefileendifexport OCAMLMAKEFILEifndef OCAMLLIBPATHOCAMLLIBPATH := \$(shell $(OCAMLC) 2>/dev/null -where || echo /usr/local/lib/ocaml)endifexport OCAMLLIBPATHifndef OCAML_LIB_INSTALLOCAML_LIB_INSTALL := $(OCAMLLIBPATH)/contribendifexport 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_IDLexport REAL_RESULTexport CAMLIDLFLAGSexport THREAD_FLAGexport RES_CLIBexport MAKEDLLexport ANNOT_FLAGexport C_OXRIDLexport SUBPROJSexport CFLAGS_WIN32export CPPFLAGS_WIN32INCFLAGS :=SHELL := /bin/shMLDEPDIR := ._dBCDIDIR := ._bcdiNCDIDIR := ._ncdiFILTER_EXTNS := %.mli %.ml %.mll %.mly %.idl %.oxridl %.c %.m %.$(EXT_CXX) %.rep %.zog %.gladeFILTERED := $(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 NOIDLHEADERC_IDL += $(FILTERED_IDL:.idl=.h)endifOBJ_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 WIN32EXECS += $(BCRESULT).dll $(NCRESULT).dllendifCLIB_BASE := $(RESULT)$(RES_CLIB_SUF)ifneq ($(strip $(OBJ_LINK)),)RES_CLIB := lib$(CLIB_BASE).$(EXT_LIB)endififdef WIN32DLLSONAME := $(CLIB_BASE).dllelseDLLSONAME := dll$(CLIB_BASE).soendifNONEXECS := $(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).o \$(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \$(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).oifndef STATICNONEXECS += $(DLLSONAME)endififndef LIBINSTALL_FILESLIBINSTALL_FILES := $(RESULT).mli $(RESULT).cmi $(RESULT).cma \$(RESULT).cmxa $(RESULT).$(EXT_LIB) $(RES_CLIB)ifndef STATICifneq ($(strip $(OBJ_LINK)),)LIBINSTALL_FILES += $(DLLSONAME)endifendifendifexport LIBINSTALL_FILESifdef WIN32# some extra stuff is created while linking DLLsNONEXECS += $(BCRESULT).$(EXT_LIB) $(BCRESULT).exp $(NCRESULT).exp $(CLIB_BASE).exp $(CLIB_BASE).libendifTARGETS := $(EXECS) $(NONEXECS)# If there are IDL-filesifneq ($(strip $(FILTERED_IDL)),)MAYBE_IDL := -cclib -lcamlidlendififdef USE_CAMLP4CAMLP4PATH := \$(shell $(CAMLP4) -where 2>/dev/null || echo /usr/local/lib/camlp4)INCFLAGS := -I $(CAMLP4PATH)CINCFLAGS := -I$(CAMLP4PATH)endifDINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %)INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-I %)CINCFLAGS += $(SOURCE_DIRS:%=-I%) $(INCDIRS:%=-I%) $(OCAML_DEFAULT_DIRS:%=-I%)ifndef MSVCCLIBFLAGS += $(SOURCE_DIRS:%=-L%) $(LIBDIRS:%=-L%) \$(EXTLIBDIRS:%=-L%) $(OCAML_DEFAULT_DIRS:%=-L%)ifeq ($(ELF_RPATH), yes)CLIBFLAGS += $(EXTLIBDIRS:%=-Wl,$(RPATH_FLAG)%)endifendififndef PROFILINGINTF_OCAMLC := $(OCAMLC)elseifndef THREADSINTF_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)endifINTF_OCAMLC := $(OCAMLC)endifendififndef MSVCCOMMON_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)%)endifelseCOMMON_LDFLAGS := -ccopt "/link -NODEFAULTLIB:LIBC $(LDFLAGS:%=%) $(SOURCE_DIRS:%=-LIBPATH:%) \$(LIBDIRS:%=-LIBPATH:%) $(EXTLIBDIRS:%=-LIBPATH:%) \$(OCAML_DEFAULT_DIRS:%=-LIBPATH:%) "endifCLIBS_OPTS := $(CLIBS:%=-cclib -l%) $(CFRAMEWORKS:%=-cclib '-framework %')ifdef MSVCifndef STATIC# MSVC libraries do not have 'lib' prefixCLIBS_OPTS := $(CLIBS:%=-cclib %.lib)endifendififneq ($(strip $(OBJ_LINK)),)ifdef CREATE_LIBOBJS_LIBS := -cclib -l$(CLIB_BASE) $(CLIBS_OPTS) $(MAYBE_IDL)elseOBJS_LIBS := $(OBJ_LINK) $(CLIBS_OPTS) $(MAYBE_IDL)endifelseOBJS_LIBS := $(CLIBS_OPTS) $(MAYBE_IDL)endif# If we have to make byte-codeifndef REAL_OCAMLCBYTE_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))))SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS)REAL_OCAMLC := $(INTF_OCAMLC)REAL_IMPL := $(IMPL_CMO)REAL_IMPL_INTF := $(IMPLO_INTF)IMPL_SUF := .cmoDEPFLAGS :=MAKE_DEPS := $(MLDEPS) $(BCDEPIS)ifdef CREATE_LIBoverride CFLAGS := $(PIC_CFLAGS) $(CFLAGS)override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS)ifndef STATICifneq ($(strip $(OBJ_LINK)),)MAKEDLL := $(DLLSONAME)ALL_LDFLAGS := -dllib $(DLLSONAME)endifendifendififndef NO_CUSTOMifneq "$(strip $(OBJ_LINK) $(THREADS) $(MAYBE_IDL) $(CLIBS) $(CFRAMEWORKS))" ""ALL_LDFLAGS += -customendifendifALL_LDFLAGS += $(INCFLAGS) $(OCAMLLDFLAGS) $(OCAMLBLDFLAGS) \$(COMMON_LDFLAGS) $(LIBS:%=%.cma)CAMLIDLDLLFLAGS :=ifdef THREADSifdef VMTHREADSTHREAD_FLAG := -vmthreadelseTHREAD_FLAG := -threadendifALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS)ifndef CREATE_LIBifndef REAL_OCAMLFINDALL_LDFLAGS := unix.cma threads.cma $(ALL_LDFLAGS)endifendifendif# we have to make native-codeelseEXTRADEPS := $(addsuffix .cmxa,$(foreach i,$(LIBS),$(if $(findstring /,$(i)),$(i))))ifndef PROFILINGSPECIAL_OCAMLFLAGS := $(OCAMLNCFLAGS)PLDFLAGS :=elseSPECIAL_OCAMLFLAGS := -p $(OCAMLNCFLAGS)PLDFLAGS := -pendifREAL_IMPL := $(IMPL_CMX)REAL_IMPL_INTF := $(IMPLX_INTF)IMPL_SUF := .cmxoverride CPPFLAGS := -DNATIVE_CODE $(CPPFLAGS)DEPFLAGS := -nativeMAKE_DEPS := $(MLDEPS) $(NCDEPIS)ALL_LDFLAGS := $(PLDFLAGS) $(INCFLAGS) $(OCAMLLDFLAGS) \$(OCAMLNLDFLAGS) $(COMMON_LDFLAGS)CAMLIDLDLLFLAGS := -optifndef CREATE_LIBALL_LDFLAGS += $(LIBS:%=%.cmxa)elseoverride CFLAGS := $(PIC_CFLAGS) $(CFLAGS)override CPPFLAGS := $(PIC_CPPFLAGS) $(CPPFLAGS)endififdef THREADSTHREAD_FLAG := -threadALL_LDFLAGS := $(THREAD_FLAG) $(ALL_LDFLAGS)ifndef CREATE_LIBifndef REAL_OCAMLFINDALL_LDFLAGS := unix.cmxa threads.cmxa $(ALL_LDFLAGS)endifendifendifendifexport MAKE_DEPSifdef ANNOTATEANNOT_FLAG := -dtypeselseendifALL_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=yesbc: byte-codebyte-code-nolink: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \REAL_RESULT="$(BCRESULT)" make_deps=yesbcnl: byte-code-nolinktop: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(TOPRESULT) \REAL_RESULT="$(BCRESULT)" make_deps=yes# generates native-codenative-code: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \REAL_RESULT="$(NCRESULT)" \REAL_OCAMLC="$(OCAMLOPT)" \make_deps=yesnc: native-codenative-code-nolink: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) nolink \REAL_RESULT="$(NCRESULT)" \REAL_OCAMLC="$(OCAMLOPT)" \make_deps=yesncnl: native-code-nolink# generates byte-code librariesbyte-code-library: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \$(RES_CLIB) $(BCRESULT).cma \REAL_RESULT="$(BCRESULT)" \CREATE_LIB=yes \make_deps=yesbcl: byte-code-library# generates native-code librariesnative-code-library: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \$(RES_CLIB) $(NCRESULT).cmxa \REAL_RESULT="$(NCRESULT)" \REAL_OCAMLC="$(OCAMLOPT)" \CREATE_LIB=yes \make_deps=yesncl: native-code-libraryifdef WIN32# generates byte-code dllbyte-code-dll: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \$(RES_CLIB) $(BCRESULT).dll \REAL_RESULT="$(BCRESULT)" \make_deps=yesbcd: byte-code-dll# generates native-code dllnative-code-dll: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \$(RES_CLIB) $(NCRESULT).dll \REAL_RESULT="$(NCRESULT)" \REAL_OCAMLC="$(OCAMLOPT)" \make_deps=yesncd: native-code-dllendif# generates byte-code with debugging informationdebug-code: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \REAL_RESULT="$(BCRESULT)" make_deps=yes \OCAMLFLAGS="-g $(OCAMLFLAGS)" \OCAMLLDFLAGS="-g $(OCAMLLDFLAGS)"dc: debug-codedebug-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-codedebug-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 informationdebug-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).cma \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 profilingprofiling-byte-code: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT) \REAL_RESULT="$(BCRESULT)" PROFILING="y" \make_deps=yespbc: profiling-byte-code# generates native-codeprofiling-native-code: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(NCRESULT) \REAL_RESULT="$(NCRESULT)" \REAL_OCAMLC="$(OCAMLOPT)" \PROFILING="y" \make_deps=yespnc: profiling-native-code# generates byte-code librariesprofiling-byte-code-library: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \$(RES_CLIB) $(BCRESULT).cma \REAL_RESULT="$(BCRESULT)" PROFILING="y" \CREATE_LIB=yes \make_deps=yespbcl: profiling-byte-code-library# generates native-code librariesprofiling-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=yespncl: profiling-native-code-library# packs byte-code objectspack-byte-code: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) $(BCRESULT).cmo \REAL_RESULT="$(BCRESULT)" \PACK_LIB=yes make_deps=yespabc: pack-byte-code# packs native-code objectspack-native-code: $(PRE_TARGETS)$(QUIET)$(MAKE) -r -f $(OCAMLMAKEFILE) \$(NCRESULT).cmx $(NCRESULT).o \REAL_RESULT="$(NCRESULT)" \REAL_OCAMLC="$(OCAMLOPT)" \PACK_LIB=yes make_deps=yespanc: pack-native-code# generates HTML-documentationhtdoc: $(DOC_DIR)/$(RESULT)/html/index.html# generates Latex-documentationladoc: $(DOC_DIR)/$(RESULT)/latex/doc.tex# generates PostScript-documentationpsdoc: $(DOC_DIR)/$(RESULT)/latex/doc.ps# generates PDF-documentationpdfdoc: $(DOC_DIR)/$(RESULT)/latex/doc.pdf# generates all supported forms of documentationdoc: 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) \$(ALL_LDFLAGS) $(OBJS_LIBS) -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) \$(ALL_LDFLAGS) $(OBJS_LIBS) -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 .gladeifndef STATICifdef MINGW$(DLLSONAME): $(OBJ_LINK)$(CC) $(CFLAGS) $(CFLAGS_WIN32) $(OBJ_LINK) -shared -o $@ \-Wl,--whole-archive $(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/lib%.a))) \$(OCAMLLIBPATH)/ocamlrun.a \-Wl,--export-all-symbols \-Wl,--no-whole-archiveelseifdef MSVC$(DLLSONAME): $(OBJ_LINK)link /NOLOGO /DLL /OUT:$@ $(OBJ_LINK) \$(wildcard $(foreach dir,$(LIBDIRS),$(CLIBS:%=$(dir)/%.lib))) \$(OCAMLLIBPATH)/ocamlrun.libelse$(DLLSONAME): $(OBJ_LINK)$(OCAMLMKLIB) $(INCFLAGS) $(CLIBFLAGS) \-o $(CLIB_BASE) $(OBJ_LINK) $(CLIBS:%=-l%) $(CFRAMEWORKS:%=-framework %) \$(OCAMLMKLIB_FLAGS)endifendifendififndef LIB_PACK_NAME$(RESULT).cma: $(REAL_IMPL_INTF) $(MAKEDLL) $(EXTRADEPS) $(RESULTDEPS)$(REAL_OCAMLFIND) $(REAL_OCAMLC) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(REAL_IMPL)$(RESULT).cmxa $(RESULT).$(EXT_LIB): $(REAL_IMPL_INTF) $(EXTRADEPS) $(RESULTDEPS)$(REAL_OCAMLFIND) $(OCAMLOPT) -a $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(REAL_IMPL)elseifdef 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)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 $(ALL_LDFLAGS) $(OBJS_LIBS) -o $@ $(LIB_PACK_NAME).cmo$(RESULT).cmxa $(RESULT).$(EXT_LIB): $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmx $(EXTRADEPS) $(RESULTDEPS)$(REAL_OCAMLFIND) $(OCAMLOPT) -a $(filter-out -custom, $(ALL_LDFLAGS)) $(OBJS_LIBS) -o $@ $(LIB_PACK_NAME).cmxendif$(RES_CLIB): $(OBJ_LINK)ifndef MSVCifneq ($(strip $(OBJ_LINK)),)$(AR) rcs $@ $(OBJ_LINK)endifelseifneq ($(strip $(OBJ_LINK)),)lib -nologo -debugtype:cv -out:$(RES_CLIB) $(OBJ_LINK)endifendif.mli.cmi: $(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.ml.cmi .ml.$(EXT_OBJ) .ml.cmx .ml.cmo: $(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) $<; \fiifdef PACK_LIB$(REAL_RESULT).cmo $(REAL_RESULT).cmx $(REAL_RESULT).o: $(REAL_IMPL_INTF) $(OBJ_LINK) $(EXTRADEPS)$(REAL_OCAMLFIND) $(REAL_OCAMLC) -pack $(ALL_LDFLAGS) \$(OBJS_LIBS) -o $@ $(REAL_IMPL)endif.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.c.$(EXT_OBJ):$(OCAMLC) -c -cc "$(CC)" -ccopt "$(CFLAGS) \$(CPPFLAGS) $(CPPFLAGS_WIN32) \$(CFLAGS_WIN32) $(CINCFLAGS) $(CFLAG_O)$@ " $<.m.$(EXT_OBJ):$(CC) -c $(CFLAGS) $(CINCFLAGS) $(CPPFLAGS) \-I'$(OCAMLLIBPATH)' \$< $(CFLAG_O)$@.$(EXT_CXX).$(EXT_OBJ):$(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) \$(DINCFLAGS) $< \> $@; \$(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \$(DINCFLAGS) $< > $@; \else \$(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \-pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \$(REAL_OCAMLFIND) $(OCAMLDEP) $(OCAML_DEP_PACKAGES) \-pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \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) $(DINCFLAGS) $< \> $@; \$(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) $(DINCFLAGS) $< > $@; \else \$(ECHO) $(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \-pp \"$$pp $(PPFLAGS)\" $(DINCFLAGS) $< \> $@; \$(REAL_OCAMLFIND) $(OCAMLDEP) $(DEPFLAGS) \-pp "$$pp $(PPFLAGS)" $(DINCFLAGS) $< > $@; \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.texcd $(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.pscd $(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); \fiendef$(foreach subproj,$(SUBPROJS),$(eval $(call make_subproj,$(subproj)))).PHONY:subprojs: $(SUBPROJS:%=subproj_%)############################################################################ (UN)INSTALL RULES FOR LIBRARIES.PHONY: libinstalllibinstall: all$(QUIET)printf "\nInstalling library with ocamlfind\n"$(OCAMLFIND) install $(OCAMLFIND_INSTFLAGS) $(RESULT) META $(LIBINSTALL_FILES)$(QUIET)printf "\nInstallation successful.\n".PHONY: libinstall-byte-codelibinstall-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-codelibinstall-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: libuninstalllibuninstall:$(QUIET)printf "\nUninstalling library with ocamlfind\n"$(OCAMLFIND) remove $(OCAMLFIND_INSTFLAGS) $(RESULT)$(QUIET)printf "\nUninstallation successful.\n".PHONY: rawinstallrawinstall: 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: rawuninstallrawuninstall:$(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: cleanclean::rm -f $(TARGETS) $(TRASH)rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR).PHONY: cleanupcleanup::rm -f $(NONEXECS) $(TRASH)rm -rf $(BCDIDIR) $(NCDIDIR) $(MLDEPDIR).PHONY: clean-docclean-doc::rm -rf $(DOC_DIR)/$(RESULT).PHONY: clean-allclean-all:: clean clean-doc.PHONY: nobackupnobackup:rm -f *.bak *~ *.dup