Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mincss
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Taddeüs Kroes
mincss
Commits
add01315
Commit
add01315
authored
Jul 14, 2014
by
Taddeüs Kroes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replaced OCamlMakefile with custom Makefile
parent
3feaacd0
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
25 additions
and
1316 deletions
+25
-1316
Makefile
Makefile
+25
-17
OCamlMakefile
OCamlMakefile
+0
-1299
types.ml
types.ml
+0
-0
No files found.
Makefile
View file @
add01315
RESULT
:=
mincss
SOURCES
:=
types.ml types.mli stringify.ml lexer.mll parser.mly util.ml parse.ml
\
main.ml
PRE_TARGETS
:=
types.ml types.cmi stringify.cmi
LIBS
:=
str
BASENAMES
:=
types stringify parser lexer util parse main
# Set debugging flag to enable exception backtraces for OCAMLRUNPARAM=b
OCAMLFLAGS
:=
-g
OFILES
:=
$(
addsuffix
.cmx,
$(BASENAMES)
)
OCAMLYACC
:=
menhir
YFLAGS
:=
--infer
--explain
--dump
OCAMLCFLAGS
:=
-g
OCAMLLDFLAGS
:=
OCAMLLDLIBS
:=
str.cmxa
.PHONY
:
all myclean
.PHONY
:
all clean
.PRECIOUS
:
$(addprefix .cmi
,
$(BASENAMES))
all
:
native-code
all
:
$(RESULT)
clean
::
myclean
%.ml
:
%.mll
ocamllex
-o
$@
$<
# The Types module needs an implementation to stop ocamlc from complaining
types.ml
:
types.mli
cp
$<
$@
%.ml
:
%.mly
menhir
--infer
--explain
$<
myclean
:
rm
-f
a.out types.ml parser.conflicts parser.automaton
%.cmi
:
%.mli
ocamlc
-c
$(OCAMLCFLAGS)
-o
$@
$<
include
OCamlMakefile
parser.cmx
:
parser.cmi
parser.mli
:
parser.ml
%.cmx
:
%.ml
ocamlfind ocamlopt
-package
batteries
-c
$(OCAMLCFLAGS)
-o
$@
$
(
<:.cmi
=
.ml
)
$(RESULT)
:
$(OFILES)
ocamlopt
-o
$@
$(OCAMLLDFLAGS)
$(OCAMLLDLIBS)
$^
clean
:
rm
-f
*
.cmi
*
.cmx
*
.o lexer.ml parser.ml parser.mli
$(RESULT)
OCamlMakefile
deleted
100644 → 0
View file @
3feaacd0
###########################################################################
# 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
types.ml
i
→
types.ml
View file @
add01315
File moved
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment