开发者

OcaIDE doesn't see JoCaml tools

I'm having a problem while using OcaIDE in ocamlbuild mode. I'm trying to compile my own JoCaml sources. According to the JoCaml manual (bottom of page), to use ocamlbuild with JoCaml, I just need to add the -use-jocaml argument to ocamlbuild. Indeed, if I go to the root of my project and write

ocamlbuild -use-jocaml foo.native

it generates my executable just fine.

However, in OcaI开发者_如何转开发DE I get

/bin/sh: jocamldep: command not found

In OcaIDE, the -use-jocaml flag is passed in the "Other Flags" box (in Project Properties). And that certainly is working, as the complaint is precisely that it doesn't find jocaml stuff. The puzzling thing is that jocaml is installed and can be accessed from any random terminal window. For example, running

jocamldep -modules foo.ml > foo.ml.depends

on my project does generate the desired dependency file.

So, it would seem I would have to configure OcaIDE and tell it where JoCaml executables are or something. This is done for OCaml, for example. But there is no place to do that for JoCaml. And it's really strange that, if jocamldep/jocamlc/etc are all accessible from anywhere, OcaIDE wouldn't be able to pick them.

Any ideas?

(I am aware I can do an ocamlbuild plugin and pass the flag in a "myocamlbuild.ml" file. I'll probably use that a latter stage after I get familiar with ocamlbuild plugins. But here the question is about OcaIDE. EDIT: Actually, ocamlbuild plugins don't seem to be a solution as, although there is an option -use-jocaml in ocamlbuild to enforce jocaml use (and it works fine), the plugin system doesn't support it, i.e. use_jocaml (or something involving jocaml) is not in the list of options.)


When you start a build on an ocamlbuild project, OcaIDE calls:

ocaml.exec.ExecHelper#execMerge

which creates a new java.lang.ProcessBuilder, and uses its default environment (ProcessBuilder#environment()).

To help debug your problem, please run the following Java program in your Eclipse:

public static void main(String[] args) {
    Map<String, String> environment = new ProcessBuilder().environment();
    for (Entry<String, String> entry : environment.entrySet()) {
        if ("path".equalsIgnoreCase(entry.getKey())) {
            System.out.println("PATH = " + entry.getValue());
        }
    }
}

It should display the same path that is passed to OcamlBuild.

You could also import the OcaIDE plug-in source in your workspace and run it in debug mode, with a breakpoint in ocaml.exec.ExecHelper#execMerge to see how ocamlbuild is called.


You could try to create a shell script to start Eclipse with the correct path:

Something like startEclipse.sh (located in the same folder as the eclipse executable):

#!/bin/bash
export PATH=<your path to JoCaml>:$PATH
./eclipse
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜