From e6fe13d2abd86d47e2be0c3b12fd8d4532d9c52f Mon Sep 17 00:00:00 2001
From: Erwan Jahier <jahier@imag.fr>
Date: Fri, 29 Nov 2013 16:24:37 +0100
Subject: [PATCH] Add a lus4ocaml plugin (for rdbg).

Fix a bug in socExec.ml (strangely untriggered before) along the way.
---
 .gitignore         |    8 +-
 Makefile.common    |   35 --
 OCamlMakefile      | 1277 --------------------------------------------
 _oasis             |   12 +-
 _tags              |   27 +
 src/lus2licRun.ml  |   95 ++++
 src/lus2licRun.mli |    8 +
 src/lv6version.ml  |    4 +-
 src/main.ml        |   18 +-
 src/socExec.ml     |    4 +-
 test/lus2lic.sum   |    4 +-
 11 files changed, 160 insertions(+), 1332 deletions(-)
 delete mode 100644 Makefile.common
 delete mode 100644 OCamlMakefile
 create mode 100644 _tags
 create mode 100644 src/lus2licRun.ml
 create mode 100644 src/lus2licRun.mli

diff --git a/.gitignore b/.gitignore
index 776efa4d..b4f6b852 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,4 +55,10 @@ lus2lic-types.pdf
 lus2lic.pdf
 *.tex
 ocamldoc
-test/*
\ No newline at end of file
+test/*
+_build/
+main.native
+myocamlbuild.ml
+setup.data
+setup.ml
+configure
diff --git a/Makefile.common b/Makefile.common
deleted file mode 100644
index e650ab88..00000000
--- a/Makefile.common
+++ /dev/null
@@ -1,35 +0,0 @@
-
-curdir=$(shell pwd)
-
-
-OBJDIR=./obj$(HOSTTYPE)
-SRCDIR=./src
-
-LN=ln -s
-$(OBJDIR)/% : $(SRCDIR)/%
-	rm -f $@; cd $(OBJDIR) && $(LN) ../$(SRCDIR)/$* . && cd $(curdir)
-
-$(OBJDIR):
-	mkdir $(OBJDIR)
-
-OCAMLMAKEFILE = ./OCamlMakefile
-RESULT=$(OBJDIR)/lus2lic$(EXE)
-OCAMLFLAGS=-I +rdbg-plugin
-OCAMLLDFLAGS=-I +rdbg-plugin
-LIBS=str unix nums rdbg-plugin
-
-OCAMLC=ocamlc
-OCAMLOPT=ocamlopt
-
-ifeq ($(HOSTTYPE),win32)
-  OCAMLC=/usr/i586-mingw32msvc/bin/ocamlc
-  OCAMLOPT=/usr/i586-mingw32msvc/bin/ocamlopt
-  OCAMLDEP=/usr/i586-mingw32msvc/bin/ocamldep
-  OCAMLRUN=/usr/i586-mingw32msvc/bin/ocamlrun
-  OCAMLLIB=`/usr/i586-mingw32msvc/bin/ocamlc -where`
-endif
-
-ifeq ($(HOSTTYPE),cygwin)
-CFLAGS=-mno-cygwin
-endif
-
diff --git a/OCamlMakefile b/OCamlMakefile
deleted file mode 100644
index e9deb247..00000000
--- a/OCamlMakefile
+++ /dev/null
@@ -1,1277 +0,0 @@
-###########################################################################
-#                              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
-    # - win32
-    # - cygwin
-    # - some other string means Unix
-    # - empty means ocamlc does not support -config
-
-ifeq ($(SYSTEM),mingw)
-  MINGW=1
-endif
-ifeq ($(SYSTEM),win32)
-  MSVC=1
-endif
-
-ifdef MINGW
-  export MINGW
-  WIN32 := 1
-  # We are compiling with cygwin tools:
-  CFLAGS_WIN32 := -mno-cygwin
-  # The default value 'cc' makes 'ocamlc -cc "cc"' raises the error 'The
-  # NTVDM CPU has encountered an illegal instruction'.
-  CC := gcc
-  # 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 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
-
-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
-
-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 := -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).$(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) \
-				$(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
-# 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 $(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
-# Packing a bytecode library
-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 $(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
-
-.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
diff --git a/_oasis b/_oasis
index b59a94bb..dbe86081 100644
--- a/_oasis
+++ b/_oasis
@@ -4,6 +4,7 @@ Version:     1
 Synopsis:    The Lustre V6 compiler
 Authors:     Erwan Jahier and Pascal Raymond
 License:     LGPL-3 with OCaml linking exception
+Plugins:     DevFiles (0.3), META (0.3)
 Synopsis:    The Lustre V6 Verimag compiler
 Homepage:    http://www-verimag.imag.fr/lustre-v6.html
 Description: The Lustre V6 Verimag compiler
@@ -16,4 +17,13 @@ Executable lus2lic
   Install:true
   CompiledObject: native
 
-
+Library lus4ocaml
+  Modules:    Lus2licRun
+  Path:       src/
+  BuildTools: ocamlbuild 
+  BuildDepends: str,unix,num,rdbg-plugin
+  Install:true
+  XMETAEnable: true
+  XMETADescription: an API to call the Lustre v6 interpreter from ocaml
+  InternalModules: SocExecValue,SocUtils,Lv6util,Lv6version,Lv6errors,Lxm,Lv6MainArgs,Verbose,Soc,SocPredef,Ident,SocExec,SocExecEvalPredef,Compile,AstTab,AstTabSymbol,AstInstanciateModel,Lv6parserUtils,AstV6,FilenameExtras,LicTab,LicDump,AstPredef,Lic,AstCore,LicName,IdSolver,EvalConst,LicEvalConst,LicEvalType,UnifyType,Ast2lic,AstV6Dump,EvalClock,UnifyClock,LicEvalClock,EvalType,LicPrg,LicMetaOp,L2lCheckOutputs,Misc,L2lRmPoly,L2lExpandMetaOp,L2lSplit,L2lExpandNodes,L2lExpandArrays,L2lCheckLoops,Lv6lexer,Lv6parser,AstRecognizePredef,Lic2soc,ActionsDeps,Toposort
+# Comment se passer de cette liste à la Prevert ?
diff --git a/_tags b/_tags
new file mode 100644
index 00000000..e5934099
--- /dev/null
+++ b/_tags
@@ -0,0 +1,27 @@
+# OASIS_START
+# DO NOT EDIT (digest: 27f968445ada0c5de5d09ce2bf0e3fd2)
+# Ignore VCS directories, you can use the same kind of rule outside 
+# OASIS_START/STOP if you want to exclude directories that contains 
+# useless stuff for the build process
+<**/.svn>: -traverse
+<**/.svn>: not_hygienic
+".bzr": -traverse
+".bzr": not_hygienic
+".hg": -traverse
+".hg": not_hygienic
+".git": -traverse
+".git": not_hygienic
+"_darcs": -traverse
+"_darcs": not_hygienic
+# Executable lus2lic
+"src/main.native": pkg_str
+"src/main.native": pkg_unix
+"src/main.native": pkg_num
+"src/main.native": pkg_rdbg-plugin
+# Library lus4ocaml
+"src/lus4ocaml.cmxs": use_lus4ocaml
+<src/*.ml{,i}>: pkg_str
+<src/*.ml{,i}>: pkg_unix
+<src/*.ml{,i}>: pkg_num
+<src/*.ml{,i}>: pkg_rdbg-plugin
+# OASIS_STOP
diff --git a/src/lus2licRun.ml b/src/lus2licRun.ml
new file mode 100644
index 00000000..c74dac92
--- /dev/null
+++ b/src/lus2licRun.ml
@@ -0,0 +1,95 @@
+(* Time-stamp: <modified the 29/11/2013 (at 15:23) by Erwan Jahier> *)
+(*-----------------------------------------------------------------------
+** Copyright (C) - Verimag.
+*)
+
+type vars = (string * string) list
+
+open Lv6MainArgs
+open Soc
+open SocExecValue
+
+(* xxx avoidable code duplic with main.ml *)
+let make argv =
+  let opt = Lv6MainArgs.parse argv in
+  let node = opt.main_node in
+  Verbose.exe ~level:3 (fun () ->
+    Gc.set { (Gc.get ()) with Gc.verbose = 0x01 }
+  );
+  if (opt.infiles = []) then (
+    Lv6MainArgs.usage stderr opt;
+    exit 1
+  );
+  let new_dft_pack = Filename.basename (Filename.chop_extension (List.hd opt.infiles)) in
+  Ident.set_dft_pack_name new_dft_pack;
+
+  let main_node = 
+    if opt.main_node = "" then None else 
+      Some (Ident.idref_of_string opt.main_node)
+  in
+  if opt.outfile <> "" then opt.oc <- open_out opt.outfile;
+  let nsl = Compile.get_source_list opt opt.infiles in
+  let lic_prg = Compile.doit opt nsl main_node in
+
+  let first_file = List.hd opt.infiles in
+  let nk = (Lic.node_key_of_idref (Ident.to_idref opt.main_node)) in
+  let sk, soc_tbl = 
+    if LicPrg.node_exists lic_prg nk then (
+      Lic2soc.f lic_prg nk 
+    ) else (
+      print_string ("Error: cannot find node "^opt.main_node^" in "^
+                       (String.concat "," opt.infiles)^".\n");
+      flush stdout;
+      exit 1
+    )
+  in
+  let soc = try Soc.SocMap.find sk soc_tbl with Not_found -> assert false in
+  let vntl_of_profile = List.map (fun (x,t) -> x,SocUtils.string_of_type_ref t) in
+  let soc_inputs  = (SocExec.expand_profile false (fst soc.profile)) in
+  let soc_outputs = (SocExec.expand_profile true (snd soc.profile)) in
+  let (vntl_i:Data.vntl) = vntl_of_profile soc_inputs in
+  let (vntl_o:Data.vntl) = vntl_of_profile soc_outputs in
+  let oc = stdout in
+(*    Lv6util.dump_entete oc;  *)
+(*    RifIO.write_interface oc vntl_i vntl_o None None;  *)
+(*    RifIO.flush oc;  *)
+
+  let (to_soc_subst : SocExecValue.ctx -> Soc.var list -> Data.subst list) =
+    fun ctx vl ->
+(*       let sl = List.map (fun var -> fst var, SocExecValue.get_value ctx (Var var)) vl in *)
+      let sl = SocExecValue.filter_top_subst ctx.s in
+      let sl = List.flatten (List.map SocExec.expand_subst sl) in
+  (* If the order ever matters, I could try the following.  :
+     try List.map (fun v -> fst v,
+     List.assoc (fst v) sl) vl with Not_found -> assert false
+  *)
+      sl
+  in
+  let (add_subst : Data.subst list -> SocExecValue.substs -> SocExecValue.substs) = 
+    fun s ctx_s ->
+      let s = SocExec.unexpand_profile s (fst soc.profile) in
+      List.fold_left (fun acc (id,v) -> SocExecValue.sadd acc [id] v) ctx_s s
+  in
+  let ctx_ref = ref (SocExecValue.create_ctx soc_tbl soc) in
+  let step sl_in =
+    let ctx = { !ctx_ref with s = add_subst sl_in !ctx_ref.s } in
+    let ctx = SocExec.do_step soc_tbl soc ctx in
+    let sl_out = to_soc_subst ctx soc_outputs in
+    ctx_ref := ctx;
+(*     RifIO.write_outputs oc Util.my_string_of_float  vntl_o sl_out; *)
+(*     RifIO.flush oc; *)
+    sl_out
+  in
+  let step_dbg sl_in ectx cont =
+    let cont2 ctx =
+      let sl_out = to_soc_subst ctx soc_outputs in
+      ctx_ref := ctx;
+      cont sl_out ectx
+    in
+    ctx_ref := { !ctx_ref with s = add_subst sl_in !ctx_ref.s };
+    SocExec.do_step_dbg soc_tbl soc ectx !ctx_ref cont2
+  in 
+  let (mems_in  : Data.subst list) = [] in (* XXX todo *)
+  let (mems_out : Data.subst list) = [] in (* XXX todo *)
+  vntl_i,vntl_o, (fun _ -> ()), step, step_dbg, mems_in, mems_out
+
diff --git a/src/lus2licRun.mli b/src/lus2licRun.mli
new file mode 100644
index 00000000..f6cc3eb0
--- /dev/null
+++ b/src/lus2licRun.mli
@@ -0,0 +1,8 @@
+
+type vars = (string * string) list
+
+val make: string array ->
+  vars * vars * (string -> unit) 
+  * (Data.subst list -> Data.subst list)
+  * (Data.subst list -> Event.ctx -> (Data.subst list -> Event.ctx -> Event.t) -> Event.t)
+  * Data.subst list * Data.subst list
diff --git a/src/lv6version.ml b/src/lv6version.ml
index a3df66d5..8a5dcf0a 100644
--- a/src/lv6version.ml
+++ b/src/lv6version.ml
@@ -1,7 +1,7 @@
 (** Automatically generated from Makefile *) 
 let tool = "lus2lic"
 let branch = "(no"
-let commit = "423"
-let sha_1 = "4610f3bbda8c7e2402c965e346b1c56f080f22db"
+let commit = "424"
+let sha_1 = "6df08d9435db179fd1ca1dd837101236e17738ac"
 let str = (branch ^ "." ^ commit ^ " (" ^ sha_1 ^ ")")
 let maintainer = "jahier@imag.fr"
diff --git a/src/main.ml b/src/main.ml
index 2ba7e799..db7dc8c8 100644
--- a/src/main.ml
+++ b/src/main.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 27/05/2013 (at 16:53) by Erwan Jahier> *)
+(* Time-stamp: <modified the 29/11/2013 (at 15:05) by Erwan Jahier> *)
 
 open Verbose
 open AstV6
@@ -184,24 +184,16 @@ let main () = (
 
     Verbose.exe ~level:3 (fun () -> Gc.print_stat stdout);
    ) with 
-      Sys_error(s) ->
-        prerr_string (s^"\n");
-        my_exit opt 1
-    | Global_error s ->
-      print_global_error s ;
-      my_exit opt 1
-    | Parse_error ->
-      print_compile_error (Lxm.last_made ()) "syntax error";
-      my_exit opt 1
+      Sys_error(s) -> prerr_string (s^"\n");  my_exit opt 1
+    | Global_error s -> print_global_error s; my_exit opt 1
+    | Parse_error -> print_compile_error (Lxm.last_made ()) "syntax error"; my_exit opt 1
     | Unknown_var(lxm,id) -> 
       print_compile_error lxm ("unknown variable (" ^ (Ident.to_string id) ^")");
       my_exit opt 1
     | Unknown_constant(lxm,str) -> 
       print_compile_error lxm ("unknown constant (" ^ str ^")");
       my_exit opt 1
-    | Compile_error(lxm,msg) -> 
-      print_compile_error lxm msg;
-      my_exit opt 1
+    | Compile_error(lxm,msg) -> print_compile_error lxm msg;  my_exit opt 1
     | L2lCheckLoops.Error(lxm,msg,lic_prg) -> 
       (* Sometime it helps to see the current state of the faulty program *)
       LicPrg.to_file opt lic_prg main_node;
diff --git a/src/socExec.ml b/src/socExec.ml
index 1bc05c69..524776c6 100644
--- a/src/socExec.ml
+++ b/src/socExec.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 21/11/2013 (at 11:28) by Erwan Jahier> *)
+(* Time-stamp: <modified the 29/11/2013 (at 15:31) by Erwan Jahier> *)
 
 open Soc
 open Data
@@ -248,6 +248,7 @@ let (unexpand_profile : sl -> Soc.var list -> sl) =
         (* Returns the (accumulated) result and the unused subst
            (which should be empty at the top-level call) *)
         match sl_todo, vl with
+          | [],_::_ -> sl_done,[] 
           | _,[] -> sl_done, sl_todo
           | s::sl, (_, (Bool| Int | Real))::vl -> aux (s::sl_done) sl vl
           | (id,v)::sl, (_,Enum(n,el))::vl -> 
@@ -275,7 +276,6 @@ let (unexpand_profile : sl -> Soc.var list -> sl) =
 
           | _, (vn,Extern id)::_ -> assert false (* finish me! *)
           | _, (vn,Alpha _  )::_ -> assert false (* should not occur *)
-          | [],_::_ -> assert false  (* should not occur *)
 
     and (aux_field : sl * (ident * Data.v) list -> ident * Data.t -> sl * (ident * Data.v) list ) =
       fun (sl_todo, fl) (fn, t) ->
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index 78eacb35..4206145e 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,4 +1,4 @@
-Test Run By jahier on Thu Nov 28 11:04:59 2013
+Test Run By jahier on Fri Nov 29 16:21:55 2013
 Native configuration is i686-pc-linux-gnu
 
 		=== lus2lic tests ===
@@ -1030,3 +1030,5 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman
 # of expected failures		37
 testcase ./lus2lic.tests/non-reg.exp completed in 104 seconds
 testcase ./lus2lic.tests/progression.exp completed in 0 seconds
+testcase ./lus2lic.tests/non-reg.exp completed in 104 seconds
+testcase ./lus2lic.tests/progression.exp completed in 0 seconds
-- 
GitLab