Hello,
I'm building a pair of companion oasis build spec and opam package setup for a C library. libdai I figured out how to get swig and oasis to build most things I need, but I'm having trouble getting oasis to not generate _stubs targets that aren't found. There is a static C/++ libdai.a file that is the product of the project I'm trying to wrap. I can't convince oasis to use that instead. Here's my _oasis target:
Library "dai"
Path: ./
Install: false
Modules: Swig, Dai
CompiledObject: best
CSources: dai_wrap.cxx.c
CCOpt: -g -xc++ "-I../../include"
With a fresh clone of libdai, I get dai_wrap.cxx.c by doing the following in ./swig after building libdai:
$(SWIG) -ocaml -c++ dai.i
mv dai_wrap.cxx dai_wrap.cxx.c
sed -i -e 's/caml_array_length/caml_array_len/g' dai_wrap.cxx.c
I got my swig and dai ml files by doing the following:
swig2.0 -ocaml -co swig.mli
I build by doing the following:
ocaml
setup.ml -build
I get the following error:
Solver failed:
Ocamlbuild knows of no rules that apply to a target named ./libdai_stubs.a. This can happen if you ask Ocamlbuild to build a target with the wrong extension (e.g. .opt instead of .native) or if the source files live in directories that have not been specified as include directories.
Compilation unsuccessful after building 8 targets (8 cached) in 00:00:00.
E: Failure("Command ''/usr/bin/ocamlbuild' ./libdai_stubs.a ./dlldai_stubs.so ./dai.cma ./dai.cmxa ./dai.a ./dai.cmxs -j 5 -tag debug' terminated with error code 6")
I want to make sure that the actual target shared library that was produced by the libdai build file itself is linked against. But oasis is assuming I have a _stubs target. I read in the documentation here that: "The usual idiom is to append _stubs
to the name."
If anybody needs to replicate my issue, I have a docker container with this already.