[Omake] Problem with OCamlPackage
Alain Frisch
alain.frisch at lexifi.com
Fri Sep 28 03:14:15 PDT 2007
Hello,
I've got some problems with the OCamlPackage function in OCaml.om. If I
simply do:
OCAMLDEP_MODULES_ENABLED = false
NATIVE_ENABLED = false
OCamlPackage(p, a)
then "omake p.cmi" warns me that:
These file are targeted separately, but appear as effects of a single
rule.
This is likely to lead to unpredictable behavior.
targets:
tmp\p.cmo
(File c:\Program Files\OMake\lib\omake\\build\OCaml.om: line
863, characters 3-31)
tmp\p.cmi
(File c:\Program Files\OMake\lib\omake\\build\OCaml.om: line
888, characters 4-11)
*** omake:
These file are targeted separately, but appear as effects of a
single rule.
This is likely to lead to unpredictable behavior.
targets:
tmp\p.cmi
(File c:\Program Files\OMake\lib\omake\\build\OCaml.om: line
888, characters 4-11)
tmp\p.cmo
(File c:\Program Files\OMake\lib\omake\\build\OCaml.om: line
863, characters 3-31)
and indeed, I've observed strange behaviors (corrupted interfaces in
parallel build).
Why are rules duplicated in the definition of OCamlPackage? I've tried
the following, and it seems to work fine (I haven't tested the case when
the .mli file exists):
public.OCamlPackage(name, files) =
protected.OFILES = $(addsuffix $(EXT_OBJ), $(files))
protected.CMOFILES = $(addsuffix .cmo, $(files))
protected.CMXFILES = $(addsuffix .cmx, $(files))
protected.OBJ = $(file $(name)$(EXT_OBJ))
protected.CMO = $(file $(name).cmo)
protected.CMX = $(file $(name).cmx)
protected.CMI = $(file $(name).cmi)
protected.MLI = $(file $(name).mli)
protected.BYTE_TARGETS = $(CMO)
protected.NATIVE_TARGETS = $(CMX) $(OBJ)
protected.TARGETS = $(CMI)
if $(NATIVE_ENABLED)
TARGETS += $(NATIVE_TARGETS)
export
if $(BYTE_ENABLED)
TARGETS += $(BYTE_TARGETS)
export
#
# Link commands
#
protected.BYTE_DEPS = $(CMOFILES)
protected.NATIVE_DEPS = $(CMXFILES) $(OFILES)
if $(target-exists $(MLI))
BYTE_DEPS += $(CMI)
NATIVE_DEPS += $(CMI)
$(CMI): $(MLI) :scanner: scan-ocaml-$(basename $(name)).mli
$(OCamlC) -c $<
export
elseif $(NATIVE_ENABLED)
BYTE_DEPS += $(CMI)
NATIVE_TARGETS += $(CMI)
export
else
BYTE_TARGETS += $(CMI)
export
$(BYTE_TARGETS): $(BYTE_DEPS)
$(OCAMLFIND) $(OCAMLC) $(LAZY_OCAMLFINDFLAGS)
$(PREFIXED_OCAMLPACKS) $(OCAMLFLAGS) \
$(OCAMLCFLAGS) $(OCAML_LIB_FLAGS) -pack -o $(CMO)
$(OCamlLinkSort $(CMOFILES))
$(NATIVE_TARGETS): $(NATIVE_DEPS)
$(OCAMLFIND) $(OCAMLOPTLINK) $(LAZY_OCAMLFINDFLAGS)
$(PREFIXED_OCAMLPACKS) $(OCAMLFLAGS) \
$(OCAMLOPTFLAGS) $(OCAML_LIB_FLAGS) -pack -o $(CMX)
$(OCamlLinkSort $(CMXFILES))
return $(TARGETS)
-- Alain
More information about the Omake
mailing list