Repository: thrift Updated Branches: refs/heads/master ab8ff1abf -> b28160b9c
THRIFT-2364: use oasis to build thrift for ocaml Client: OCaml Patch: Spiros Eliopoulos <selio...@gmail.com> This closes #1193 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/b28160b9 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/b28160b9 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/b28160b9 Branch: refs/heads/master Commit: b28160b9c38b7febc3843cf69c6abc12c4d79df5 Parents: ab8ff1a Author: James E. King, III <jk...@apache.org> Authored: Wed Feb 15 14:23:44 2017 -0500 Committer: James E. King, III <jk...@apache.org> Committed: Wed Feb 15 14:23:44 2017 -0500 ---------------------------------------------------------------------- lib/ocaml/.gitignore | 11 + lib/ocaml/DEVELOPMENT | 76 +++ lib/ocaml/Makefile | 23 - lib/ocaml/OCamlMakefile | 1231 ----------------------------------- lib/ocaml/README-OCamlMakefile | 643 ------------------ lib/ocaml/descr | 1 + lib/ocaml/opam | 8 + lib/ocaml/url | 2 + 8 files changed, 98 insertions(+), 1897 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/.gitignore ---------------------------------------------------------------------- diff --git a/lib/ocaml/.gitignore b/lib/ocaml/.gitignore new file mode 100644 index 0000000..0d9a6af --- /dev/null +++ b/lib/ocaml/.gitignore @@ -0,0 +1,11 @@ +_build/ +_tags +configure +setup.data +setup.ml +myocamlbuild.ml +*/META +*/*.mllib +*/*.mldylib +Makefile +OCamlMakefile http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/DEVELOPMENT ---------------------------------------------------------------------- diff --git a/lib/ocaml/DEVELOPMENT b/lib/ocaml/DEVELOPMENT new file mode 100644 index 0000000..3d5a03c --- /dev/null +++ b/lib/ocaml/DEVELOPMENT @@ -0,0 +1,76 @@ +Thrift OCaml Development +======================== + +Prerequisites +------------- + +In order to build this library, you must have the following installed: + + * The OCaml compiler, preferably >4.00 + * The Oasis build tool + +In addition you may want to install OPAM, which will allow you to setup an +OCaml development environment that's isolated from your system installation, +much like virutalenv for Python or the myriad systems available for Ruby. If +you have OPAM installed, then installing Oasis is as simple as running: + + $ opam install oasis + +Building +-------- + +Once all the prerequisites have been installed, run the following commands: + + $ oasis setup + $ ./configure + $ make + +The `oasis setup` command will generate the configure script and Makefile, +along with other files that opam will use to create an installable library. +The cofigure script will ensure that all build dependencies are installed, and +make will actually build the library. + +To remove files that the compiler geneates, run: + + $ make clean + +To remove those files _as well as_ files that the setup and configure process +generates, run: + + $ rm `cat .gitignore` + +Installing +---------- + +If you're using opam, simply run the following command: + + $ make install + +While development, you may want to install your latest build on the system to +test against other libraries or programs. To do this, use: + + $ make reinstall + +Distribution +------------ + +The de facto preferred method for distributing OCaml libraries is through the +OPAM package repository. To publish the latest package, issue a pull request +against the following github repository: + + https://github.com/ocaml/opam-repository + +The pull requestion should add the following directory structure and files: + + package + |__thrift + |__thrift.<VERSION> + |__ descr + |__ opam + |__ url + +Templates for the following files can be found in the opam/ subdirectory of +this library's root, with XXX(...) indicating fields that need to be filled +out. You can find further documentation here: + + http://opam.ocaml.org/doc/Packaging.html http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/Makefile ---------------------------------------------------------------------- diff --git a/lib/ocaml/Makefile b/lib/ocaml/Makefile deleted file mode 100644 index 6abeee7..0000000 --- a/lib/ocaml/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -all: - cd src; make; cd .. -clean: - cd src; make clean; cd .. http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/OCamlMakefile ---------------------------------------------------------------------- diff --git a/lib/ocaml/OCamlMakefile b/lib/ocaml/OCamlMakefile deleted file mode 100644 index b0b9252..0000000 --- a/lib/ocaml/OCamlMakefile +++ /dev/null @@ -1,1231 +0,0 @@ -########################################################################### -# 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 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 - -ifdef MINGW - export MINGW - WIN32 := 1 - CFLAGS_WIN32 := -mno-cygwin -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 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 := $(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).o \ - $(RES_CLIB) $(IMPL_CMO:.cmo=.annot) \ - $(LIB_PACK_NAME).cmi $(LIB_PACK_NAME).cmo $(LIB_PACK_NAME).cmx $(LIB_PACK_NAME).o - -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 - -DINCFLAGS := $(INCFLAGS) $(SOURCE_DIRS:%=-I %) $(OCAML_DEFAULT_DIRS:%=-I %) -INCFLAGS := $(DINCFLAGS) $(INCDIRS:%=-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 - -# 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)))) - SPECIAL_OCAMLFLAGS := $(OCAMLBCFLAGS) - - 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 - - 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 := -dtypes -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).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 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).o \ - 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) \ - $(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 .glade - -ifndef STATIC -ifdef 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-archive -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 $(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) -else -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) -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).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 - -.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) $<; \ - fi - -ifdef 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.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 http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/README-OCamlMakefile ---------------------------------------------------------------------- diff --git a/lib/ocaml/README-OCamlMakefile b/lib/ocaml/README-OCamlMakefile deleted file mode 100644 index 57ef019..0000000 --- a/lib/ocaml/README-OCamlMakefile +++ /dev/null @@ -1,643 +0,0 @@ -NOTE (bryanduxbury): OCamlMakefile is safe to include in the project after -https://issues.apache.org/jira/browse/LEGAL-58. - ---------------------------------------------------------------------------- - - Distribution of "ocaml_make" - Copyright (C) 1999 - 2006 Markus Mottl - free to copy and modify! - USE AT YOUR OWN RISK! - ---------------------------------------------------------------------------- - - PREREQUISITES - - *** YOU WILL NEED GNU-MAKE VERSION >3.80 *** - ---------------------------------------------------------------------------- - - Contents of this distribution - -Changes - guess what? ;-) - -OCamlMakefile - Makefile for easy handling of compilation of not so easy - OCaml-projects. It generates dependencies of OCaml-files - automatically, is able to handle "ocamllex"-, - "ocamlyacc"-, IDL- and C-files, knows how to run - preprocessors and generates native- or byte-code, as - executable or as library - with thread-support if you - want! Profiling and debugging support can be added on - the fly! There is also support for installing libraries. - Ah, yes, and you can also create toplevels from any - sources: this allows you immediate interactive testing. - Automatic generation of documentation is easy due to - integration of support for OCamldoc. - -README - this file - -calc/ - Directory containing a quite fully-featured example - of what "OCamlMakefile" can do for you. This example - makes use of "ocamllex", "ocamlyacc", IDL + C and - threads. - -camlp4/ - This simple example demonstrates how to automatically - preprocess files with the camlp4-preprocessor. - -gtk/ - Demonstration of how to use OCamlMakefile with GTK - and threads. Courtesy of Tim Freeman <t...@fungible.com>. - -idl/ - Contains a very small example of how to use - "camlidl" together with "OCamlMakefile". Also intended - to show, how easy it is to interface OCaml and C. - -threads/ - Two examples of how to use threads (originally - posted by Xavier Leroy some time ago). Shows the use of - "OCamlMakefile" in an environment of multiple compilation - targets. - ---------------------------------------------------------------------------- - - Why should you use it? - -For several reasons: - - * It is well-tested (I use it in all of my projects). - - * In contrast to most other approaches it generates dependencies - correctly by ensuring that all automatically generated OCaml-files - exist before dependency calculation. This is the only way to - guarantee that "ocamldep" works correctly. - - * It is extremely convenient (at least I think so ;-). - Even quite complex compilation processes (see example "calc.ml") - need very little information to work correctly - actually just about - the minimum (file names of sources). - ---------------------------------------------------------------------------- - - When you shouldn't use it... - -In projects where every compilation unit needs different flags - but -in such complicated cases you will be on your own anyway. Luckily, -this doesn't happen too frequently... - ---------------------------------------------------------------------------- - - How to use "OCamlMakefile" in your own project - (Take a look at the examples for a quick introduction!) - -Create your project-specific "Makefile" in the appropriate directory. - -Now there are two ways of making use of "OCamlMakefile": - - 1) Have a look at the default settings in "OCamlMakefile" and set - them to the values that are vaild on your system - whether the - path to the standard libraries is ok, what executables shall be - used, etc... - - 2) Copy it into the directory of the project to be compiled. - Add "-include OCamlMakefile" as a last line of your "Makefile". - - 3) Put it somewhere else on the system. In this case you will have to - set a variable "OCAMLMAKEFILE" in your project-specific "Makefile". - This is the way in which the examples are written: so you need - only one version of "OCamlMakefile" to manage all your projects! - See the examples for details. - -You should usually specify two further variables for your project: - - * SOURCES (default: foo.ml) - * RESULT (default: foo) - -Put all the sources necessary for a target into variable "SOURCES". -Then set "RESULT" to the name of the target. If you want to generate -libraries, you should *not* specify the suffix (".cma", ".cmxa", ".a") -- it will be added automatically if you specify that you want to build -a library. - - ** Don't forget to add the ".mli"-files, too! ** - ** Don't forget that order of the source files matters! ** - -The order is important, because it matters during linking anyway -due to potential side effects caused at program startup. This is -why OCamlMakefile does not attempt to partially order dependencies by -itself, which might confuse users even more. It just compiles and links -OCaml-sources in the order specified by the user, even if it could -determine automatically that the order cannot be correct. - -The minimum of your "Makefile" looks like this (assuming that -"OCamlMakefile" is in the search path of "make"): - - -include OCamlMakefile - -This will assume that you want to compile a file "foo.ml" to a binary -"foo". - -Otherwise, your Makefile will probably contain something like this: - - SOURCES = foo.ml - RESULT = foo - -include OCamlMakefile - -Be careful with the names you put into these variables: if they are wrong, -a "make clean" might erase the wrong files - but I know you will not do -that ;-) - -A simple "make" will generate a byte-code executable. If you want to -change this, you may add an "all"-rule that generates something else. - -E.g.: - - SOURCES = foo.ml - RESULT = foo - all: native-code-library - -include OCamlMakefile - -This will build a native-code library "foo.cmxa" (+ "foo.a") from file -"foo.ml". - -You may even build several targets at once. To produce byte- and native-code -executables with one "make", add the following rule: - - all: byte-code native-code - -You will probably want to use a different suffix for each of these targets -so that the result will not be overwritten (see optional variables below -for details). - -You may also tell "make" at the command-line what kind of target to -produce (e.g. "make nc"). Here all the possibilities with shortcuts -between parenthesis: - - * byte-code (bc) - * byte-code-nolink (bcnl) - no linking stage - * byte-code-library (bcl) - * native-code (nc) - * native-code-nolink (ncnl) - no linking stage - * native-code-library (ncl) - * debug-code (dc) - * debug-code-nolink (dcnl) - no linking stage - * debug-code-library (dcl) - * profiling-byte-code (pbc) - * profiling-byte-code-library (pbcl) - * profiling-native-code (pnc) - * profiling-native-code-library (pncl) - * byte-code-dll (bcd) - * native-code-dll (ncd) - * pack-byte-code (pabc) - * pack-native-code (panc) - * toplevel interpreter (top) - * subprojs - -Here a short note concerning building and linking byte code libraries -with C-files: - - OCaml links C-object files only when they are used in an executable. - After compilation they should be placed in some directory that is in - your include path if you link your library against an executable. - - It is sometimes more convenient to link all C-object files into a - single C-library. Then you have to override the automatic link flags - of your library using "-noautolink" and add another linkflag that - links in your C-library explicitly. - -What concerns maintenance: - - "make clean" removes all (all!) automatically generated files - so - again: make sure your variables are ok! - - "make cleanup" is similar to "make clean" but leaves executables. - -Another way to destroy some important files is by having "OCamlMakefile" -automatically generate files with the same name. Read the documentation -about the tools in the OCaml-distribution to see what kind of files are -generated. "OCamlMakefile" additionally generates ('%' is basename of -source file): - - %_idl.c - "camlidl" generates a file "%.c" from "%.idl", but this is - not such a good idea, because when generating native-code, - both the file "%.c" and "%.ml" would generate files "%.o" - which would overwrite each other. Thus, "OCamlMakefile" - renames "%.c" to "%_idl.c" to work around this problem. - -The dependencies are stored in three different subdirectories (dot dirs): - - ._d - contains dependencies for .ml-files - ._bcdi - contains byte code dependencies for .mli-files - ._ncdi - contains native code dependencies for .mli-files - -The endings of the dependency files are: "%.d" for those generated from -"%.ml"-files, "%.di" for ones derived from "%.mli"-files. - ---------------------------------------------------------------------------- - - Debugging - - This is easy: if you discover a bug, just do a "make clean; make dc" - to recompile your project with debugging information. Then you can - immediately apply "ocamldebug" to the executable. - ---------------------------------------------------------------------------- - - Profiling - - For generating code that can be profiled with "ocamlprof" (byte code) - or "gprof" (native code), compile your project with one of the profiling - targets (see targets above). E.g.: - - * "make pbc" will build byte code that can be profiled with - "ocamlprof". - - * "make pnc" will build native code that can be profiled with - "gprof". - - Please note that it is not currently possible to profile byte code with - threads. OCamlMakefile will force an error if you try to do this. - - A short hint for DEC Alpha-users (under Digital Unix): you may also - compile your sources to native code without any further profiling - options/targets. Then call "pixie my_exec", "my_exec" being your - executable. This will produce (among other files) an executable - "my_exec.pixie". Call it and it will produce profiling information which - can be analysed using "prof -pixie my_exec". The resulting information - is extremely detailed and allows analysis up to the clock cycle level... - ---------------------------------------------------------------------------- - - Using Preprocessors - - Because one could employ any kind of program that reads from standard - input and prints to standard output as preprocessor, there cannot be any - default way to handle all of them correctly without further knowledge. - - Therefore you have to cooperate a bit with OCamlMakefile to let - preprocessing happen automatically. Basically, this only requires - that you put a comment into the first line of files that should be - preprocessed, e.g.: - - (*pp cat *) - ... rest of program ... - - OCamlMakefile looks at the first line of your files, and if it finds - a comment that starts with "(*pp", then it will assume that the - rest of the comment tells it how to correctly call the appropriate - preprocessor. In this case the program "cat" will be called, which will, - of course, just output the source text again without changing it. - - If you are, for example, an advocate of the new "revised syntax", - which is supported by the camlp4 preprocessor, you could simply write: - - (*pp camlp4r *) - ... rest of program in revised syntax ... - - Simple, isn't it? - - If you want to write your own syntax extensions, just take a look at the - example in the directory "camlp4": it implements the "repeat ... until" - extension as described in the camlp4-tutorial. - ---------------------------------------------------------------------------- - - Library (Un-)Installation Support - - OCamlMakefile contains two targets using "ocamlfind" for this purpose: - - * libinstall - * libuninstall - - These two targets require the existence of the variable - "LIBINSTALL_FILES", which should be set to all the files that you - want to install in the library directory (usually %.mli, %.cmi, %.cma, - %.cmxa, %.a and possibly further C-libraries). The target "libinstall" - has the dependency "all" to force compilation of the library so make - sure you define target "all" in your Makefile appropriately. - - The targets inform the user about the configured install path and ask - for confirmation to (un)install there. If you want to use them, it - is often a good idea to just alias them in your Makefile to "install" - and "uninstall" respectively. - - Two other targets allow installation of files into a particular - directory (without using ocamlfind): - - * rawinstall - * rawuninstall - ---------------------------------------------------------------------------- - - Building toplevels - - There is just one target for this: - - * top - - The generated file can be used immediately for interactive sessions - - even with scanners, parsers, C-files, etc.! - ---------------------------------------------------------------------------- - - Generating documentation - - The following targets are supported: - - * htdoc - generates HTML-documentation - * ladoc - generates Latex-documentation - * psdoc - generates PostScript-documentation - * pdfdoc - generates PDF-documentation - * doc - generates all supported forms of documentation - * clean-doc - generates all supported forms of documentation - - All of them generate a sub-directory "doc". More precisely, for HTML it - is "doc/$(RESULT)/html" and for Latex, PostScript and PDF the directory - "doc/$(RESULT)/latex". See the OCamldoc-manual for details and the - optional variables below for settings you can control. - ---------------------------------------------------------------------------- - - Handling subprojects - - You can have several targets in the same directory and manage them - from within an single Makefile. - - Give each subproject a name, e.g. "p1", "p2", etc. Then you export - settings specific to each project by using variables of the form - "PROJ_p1", "PROJ_p2", etc. E.g.: - - define PROJ_p1 - SOURCES="foo.ml main.ml" - RESULT="p1" - OCAMLFLAGS="-unsafe" - endef - export PROJ_p1 - - define PROJ_p2 - ... - endef - export PROJ_p2 - - You may also export common settings used by all projects directly, e.g. - "export THREADS = y". - - Now it is a good idea to define, which projects should be affected by - commands by default. E.g.: - - ifndef SUBPROJS - export SUBPROJS = p1 p2 - endif - - This will automatically generate a given target for all those - subprojects if this variable has not been defined in the shell - environment or in the command line of the make-invocation by the user. - E.g., "make dc" will generate debug code for all subprojects. - - Then you need to define a default action for your subprojects if "make" - has been called without arguments: - - all: bc - - This will build byte code by default for all subprojects. - - Finally, you'll have to define a catch-all target that uses the target - provided by the user for all subprojects. Just add (assuming that - OCAMLMAKEFILE has been defined appropriately): - - %: - @make -f $(OCAMLMAKEFILE) subprojs SUBTARGET=$@ - - See the "threads"-directory in the distribution for a short example! - ---------------------------------------------------------------------------- - - Optional variables that may be passed to "OCamlMakefile" - - * LIB_PACK_NAME - packs all modules of a library into a module whose - name is given in variable "LIB_PACK_NAME". - - * RES_CLIB_SUF - when building a library that contains C-stubs, this - variable controls the suffix appended to the name - of the C-library (default: "_stubs"). - - * THREADS - say "THREADS = yes" if you need thread support compiled in, - otherwise leave it away. - - * VMTHREADS - say "VMTHREADS = yes" if you want to force VM-level - scheduling of threads (byte-code only). - - * ANNOTATE - say "ANNOTATE = yes" to generate type annotation files - (.annot) to support displaying of type information - in editors. - - * USE_CAMLP4 - say "USE_CAMLP4 = yes" in your "Makefile" if you - want to include the camlp4 directory during the - build process, otherwise leave it away. - - * INCDIRS - directories that should be searched for ".cmi"- and - ".cmo"-files. You need not write "-I ..." - just the - plain names. - * LIBDIRS - directories that should be searched for libraries - Also just put the plain paths into this variable - * EXTLIBDIRS - Same as "LIBDIRS", but paths in this variable are - also added to the binary via the "-R"-flag so that - dynamic libraries in non-standard places can be found. - * RESULTDEPS - Targets on which results (executables or libraries) - should additionally depend. - - * PACKS - adds packages under control of "findlib". - - * PREDS - specifies "findlib"-predicates. - - * LIBS - OCaml-libraries that should be linked (just plain names). - E.g. if you want to link the Str-library, just write - "str" (without quotes). - The new OCaml-compiler handles libraries in such - a way that they "remember" whether they have to - be linked against a C-library and it gets linked - in automatically. - If there is a slash in the library name (such as - "./str" or "lib/foo") then make is told that the - generated files depend on the library. This - helps to ensure that changes to your libraries are - taken into account, which is important if you are - regenerating your libraries frequently. - * CLIBS - C-libraries that should be linked (just plain names). - - * PRE_TARGETS - set this to a list of target files that you want - to have buildt before dependency calculation actually - takes place. E.g. use this to automatically compile - modules needed by camlp4, which have to be available - before other modules can be parsed at all. - - ** WARNING **: the files mentioned in this variable - will be removed when "make clean" is executed! - - * LIBINSTALL_FILES - the files of a library that should be installed - using "findlib". Default: - - $(RESULT).mli $(RESULT).cmi $(RESULT).cma - $(RESULT).cmxa $(RESULT).a lib$(RESULT).a - - * OCAML_LIB_INSTALL - target directory for "rawinstall/rawuninstall". - (default: $(OCAMLLIBPATH)/contrib) - - * DOC_FILES - names of files from which documentation is generated. - (default: all .mli-files in your $(SOURCES)). - - * DOC_DIR - name of directory where documentation should be stored. - - * OCAMLFLAGS - flags passed to the compilers - * OCAMLBCFLAGS - flags passed to the byte code compiler only - * OCAMLNCFLAGS - flags passed to the native code compiler only - - * OCAMLLDFLAGS - flags passed to the OCaml-linker - * OCAMLBLDFLAGS - flags passed to the OCaml-linker when linking byte code - * OCAMLNLDFLAGS - flags passed to the OCaml-linker when linking - native code - - * OCAMLMKLIB_FLAGS - flags passed to the OCaml library tool - - * OCAMLCPFLAGS - profiling flags passed to "ocamlcp" (default: "a") - - * PPFLAGS - additional flags passed to the preprocessor (default: none) - - * LFLAGS - flags passed to "ocamllex" - * YFLAGS - flags passed to "ocamlyacc" - * IDLFLAGS - flags passed to "camlidl" - - * OCAMLDOCFLAGS - flags passed to "ocamldoc" - - * OCAMLFIND_INSTFLAGS - flags passed to "ocamlfind" during installation - (default: none) - - * DVIPSFLAGS - flags passed to dvips - (when generating documentation in PostScript). - - * STATIC - set this variable if you want to force creation - of static libraries - - * CC - the C-compiler to be used - * CXX - the C++-compiler to be used - - * CFLAGS - additional flags passed to the C-compiler. - The flag "-DNATIVE_CODE" will be passed automatically - if you choose to build native code. This allows you - to compile your C-files conditionally. But please - note: You should do a "make clean" or remove the - object files manually or touch the %.c-files: - otherwise, they may not be correctly recompiled - between different builds. - - * CXXFLAGS - additional flags passed to the C++-compiler. - - * CPPFLAGS - additional flags passed to the C-preprocessor. - - * CFRAMEWORKS - Objective-C framework to pass to linker on MacOS X. - - * LDFLAGS - additional flags passed to the C-linker - - * RPATH_FLAG - flag passed through to the C-linker to set a path for - dynamic libraries. May need to be set by user on - exotic platforms. (default: "-R"). - - * ELF_RPATH_FLAG - this flag is used to set the rpath on ELF-platforms. - (default: "-R") - - * ELF_RPATH - if this flag is "yes", then the RPATH_FLAG will be - passed by "-Wl" to the linker as normal on - ELF-platforms. - - * OCAMLLIBPATH - path to the OCaml-standard-libraries - (first default: `$(OCAMLC) -where`) - (second default: "/usr/local/lib/ocaml") - - * OCAML_DEFAULT_DIRS - additional path in which the user can supply - default directories to his own collection of - libraries. The idea is to pass this as an environment - variable so that the Makefiles do not have to contain - this path all the time. - - * OCAMLFIND - ocamlfind from findlib (default: "ocamlfind") - * OCAMLC - byte-code compiler (default: "ocamlc") - * OCAMLOPT - native-code compiler (default: "ocamlopt") - * OCAMLMKTOP - top-level compiler (default: "ocamlmktop") - * OCAMLCP - profiling byte-code compiler (default: "ocamlcp") - * OCAMLDEP - dependency generator (default: "ocamldep") - * OCAMLLEX - scanner generator (default: "ocamllex") - * OCAMLYACC - parser generator (default: "ocamlyacc") - * OCAMLMKLIB - tool to create libraries (default: "ocamlmklib") - * CAMLIDL - IDL-code generator (default: "camlidl") - * CAMLIDLDLL - IDL-utility (default: "camlidldll") - * CAMLP4 - camlp4 preprocessor (default: "camlp4") - * OCAMLDOC - OCamldoc-command (default: "ocamldoc") - - * LATEX - Latex-processor (default: "latex") - * DVIPS - dvips-command (default: "dvips") - * PS2PDF - PostScript-to-PDF converter (default: "ps2pdf") - - * CAMELEON_REPORT - report tool of Cameleon (default: "report") - * CAMELEON_REPORT_FLAGS - flags for the report tool of Cameleon - - * CAMELEON_ZOGGY - zoggy tool of Cameleon - (default: "camlp4o pa_zog.cma pr_o.cmo") - * CAMELEON_ZOGGY_FLAGS - flags for the zoggy tool of Cameleon - - * OCAML_GLADECC - Glade compiler for OCaml (default: "lablgladecc2") - * OCAML_GLADECC_FLAGS - flags for the Glade compiler - - * OXRIDL - OXRIDL-generator (default: "oxridl") - - * NOIDLHEADER - set to "yes" to prohibit "OCamlMakefile" from using - the default camlidl-flag "-header". - - * NO_CUSTOM - Prevent linking in custom mode. - - * QUIET - unsetting this variable (e.g. "make QUIET=") - will print all executed commands, including - intermediate ones. This allows more comfortable - debugging when things go wrong during a build. - - * REALLY_QUIET - when set this flag turns off output from some commands. - - * OCAMLMAKEFILE - location of (=path to) this "OCamlMakefile". - Because it calles itself recursively, it has to - know where it is. (default: "OCamlMakefile" = - local directory) - - * BCSUFFIX - Suffix for all byte-code files. E.g.: - - RESULT = foo - BCSUFFIX = _bc - - This will produce byte-code executables/libraries - with basename "foo_bc". - - * NCSUFFIX - Similar to "BCSUFFIX", but for native-code files. - * TOPSUFFIX - Suffix added to toplevel interpreters (default: ".top") - - * SUBPROJS - variable containing the names of subprojects to be - compiled. - - * SUBTARGET - target to be built for all projects in variable - SUBPROJS. - ---------------------------------------------------------------------------- - - Optional variables for Windows users - - * MINGW - variable to detect the MINGW-environment - * MSVC - variable to detect the MSVC-compiler - ---------------------------------------------------------------------------- - -Up-to-date information (newest release of distribution) can always be -found at: - - http://www.ocaml.info/home/ocaml_sources.html - ---------------------------------------------------------------------------- - -Enjoy! - -New York, 2007-04-22 -Markus Mottl - -e-mail: markus.mo...@gmail.com -WWW: http://www.ocaml.info http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/descr ---------------------------------------------------------------------- diff --git a/lib/ocaml/descr b/lib/ocaml/descr new file mode 100644 index 0000000..a41749d --- /dev/null +++ b/lib/ocaml/descr @@ -0,0 +1 @@ +OCaml bindings for the Apache Thrift RPC system http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/opam ---------------------------------------------------------------------- diff --git a/lib/ocaml/opam b/lib/ocaml/opam new file mode 100644 index 0000000..9dbc3d9 --- /dev/null +++ b/lib/ocaml/opam @@ -0,0 +1,8 @@ +opam-version: "1" +maintainer: "XXX(FILL ME IN WITH EMAIL)" +build: [ + [make] + [make "install"] +] +remove: [["ocamlfind" "remove" "thrift"]] +depends: ["ocamlfind"] http://git-wip-us.apache.org/repos/asf/thrift/blob/b28160b9/lib/ocaml/url ---------------------------------------------------------------------- diff --git a/lib/ocaml/url b/lib/ocaml/url new file mode 100644 index 0000000..fe4d604 --- /dev/null +++ b/lib/ocaml/url @@ -0,0 +1,2 @@ +archive: "XXX(FILL ME IN WITH URL)" +checksum: "XXX(FILL ME IN WITH MD5)"