mirror of
				https://github.com/johnwhitington/cpdf-source.git
				synced 2025-06-05 22:09:39 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			1300 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1300 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ###########################################################################
 | |
| #                              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 := $(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 := $(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
 |