From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Original-To: caml-list@sympa.inria.fr Delivered-To: caml-list@sympa.inria.fr Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id 69DF37F734 for ; Tue, 22 Sep 2015 08:23:04 +0200 (CEST) IronPort-PHdr: 9a23:gdFkzRGFbnCXtOiv97gNjp1GYnF86YWxBRYc798ds5kLTJ75r8+wAkXT6L1XgUPTWs2DsrQf27aQ6PGrCDxIyK3CmU5BWaQEbwUCh8QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYsExnyfTB4Ov7yUtaLyZ/ni6bpqtaCM01hv3mUX/BbFF2OtwLft80b08NJC50a7V/3mEZOYPlc3mhyJFiezF7W78a0+4N/oWwL46pyv+YJa6jxfrw5QLpEF3xmdjltvIy4/SXEGCyk734YGkEXiQYAVwPM6RW/WpbqrgPrr/dw3W+bO9f3RPY6Q2Lxwb1sTUrNgT0bNjhx3Gzyh8h0i+oPpRu7ux15z4PRbYWRM9Jxe6rceZURQm8XDZUZbDBIHo7pN9hHNOEGJ+sN6tCl/1Y= Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=martindemello@gmail.com; spf=Pass smtp.mailfrom=martindemello@gmail.com; spf=None smtp.helo=postmaster@mail-vk0-f53.google.com Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of martindemello@gmail.com) identity=pra; client-ip=209.85.213.53; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="martindemello@gmail.com"; x-sender="martindemello@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of martindemello@gmail.com designates 209.85.213.53 as permitted sender) identity=mailfrom; client-ip=209.85.213.53; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="martindemello@gmail.com"; x-sender="martindemello@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail2-smtp-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-vk0-f53.google.com) identity=helo; client-ip=209.85.213.53; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="martindemello@gmail.com"; x-sender="postmaster@mail-vk0-f53.google.com"; x-conformance=sidf_compatible X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0B3AgBk8gBWnDXVVdFdg0M1aQatAIRmgleIZIIrhzYHPBABAQEBAQEBARABAQEBAQYNCQkhLoIdgiARHQEbHgMSAwYHNwIkAREBBQEWDDWHdgEDEplWjUGCBYEwPjGLRoFsgnmKFAoZJw1WhDYBBQ6GZYx6gUMFhzSGPodzhRGHeIFNRocQij+FbxIjgRcRJ4RMHjOJbQEBAQ X-IPAS-Result: A0B3AgBk8gBWnDXVVdFdg0M1aQatAIRmgleIZIIrhzYHPBABAQEBAQEBARABAQEBAQYNCQkhLoIdgiARHQEbHgMSAwYHNwIkAREBBQEWDDWHdgEDEplWjUGCBYEwPjGLRoFsgnmKFAoZJw1WhDYBBQ6GZYx6gUMFhzSGPodzhRGHeIFNRocQij+FbxIjgRcRJ4RMHjOJbQEBAQ X-IronPort-AV: E=Sophos;i="5.17,571,1437429600"; d="scan'208";a="178802946" Received: from mail-vk0-f53.google.com ([209.85.213.53]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 22 Sep 2015 08:23:03 +0200 Received: by vkfp126 with SMTP id p126so71493vkf.3 for ; Mon, 21 Sep 2015 23:23:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=fyYnGCfoJtGk0Mt/pTbqDRzGZw8YwQlA668PC1aW+5Y=; b=s05uxnx7nnG0R5kIxB4qS+LVRCBn4EdITiKbKkArQkL4HEJQzXdpN+ZzYXRrODzJvy DX0fRkyWEpYotgLufVaN2AOitKRcWXBsIabtEk+5VaHfW3i4iwDpgLDXuxrzqTGogi0V PLbKrt4vLMCusZwfq4oDVLi4NQKY0WvfZE5rJ3EJZTd0NeIs/kOKDSrzeyabd7AozcNt lJ01jPVbHnvV6skSiRGgtfJbG4SdIrCgoUJYCezX9ozWmKwHkBHyeu8B87fwkQcxMd9C D0qEXDdgGgZKEemzpHhkJgNbINpjZl6IIv2m/ElN1XICiLuJskxQpmQ7BR4mGPy4tonL ONyA== MIME-Version: 1.0 X-Received: by 10.31.151.80 with SMTP id z77mr15709226vkd.18.1442902982288; Mon, 21 Sep 2015 23:23:02 -0700 (PDT) Received: by 10.103.51.142 with HTTP; Mon, 21 Sep 2015 23:23:02 -0700 (PDT) Date: Mon, 21 Sep 2015 23:23:02 -0700 Message-ID: From: Martin DeMello To: OCaml List Content-Type: multipart/alternative; boundary=001a1140f36eb46c2205205007c1 Subject: [Caml-list] building and using a library in a subdirectory --001a1140f36eb46c2205205007c1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable If I have my project set up like this: =2E =E2=94=9C=E2=94=80=E2=94=80 file.ml =E2=94=9C=E2=94=80=E2=94=80 plugins =E2=94=82 =E2=94=94=E2=94=80=E2=94=80 puz =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_bin.ml =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_match.ml =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz.ml =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_plugin.mllib =E2=94=82 =E2=94=9C=E2=94=80=E2=94=80 puz_types.ml =E2=94=82 =E2=94=94=E2=94=80=E2=94=80 puz_utils.ml =E2=94=94=E2=94=80=E2=94=80 _tags $ cat plugins/puz/puz_plugin.mllib Puz Puz_bin Puz_match This works: $ ocamlbuild -use-ocamlfind plugins/puz/puz_plugin.cmxa Finished, 22 targets (3 cached) in 00:00:03. My _tags file: ------------------------------------------------ $ cat _tags true: thread,debug true: package(core_kernel) "plugins/puz": include : package(labltk) <**/puz.*>: package(unix), package(str), package(core_kernel), package(bitstring), package(mikmatch_pcre) <**/*_bin.*>: package(bitstring.syntax), syntax(bitstring) <**/*_match.*>: package(mikmatch_pcre), syntax(camlp4o) ------------------------------------------------ But I can't figure out how to use this library in my main program. This is a minimal example of what I'm trying to do, not working of course: $ cat file.ml open Core_kernel.Std let read fname =3D let data =3D In_channel.read_all fname in Puz_plugin.read data $ ocamlbuild -use-ocamlfind file.native + ocamlfind ocamlc -c -g -thread -package core_kernel -I plugins/puz -o file.cmo file.ml File "file.ml", line 5, characters 2-17: Error: Unbound module Puz_plugin martin --001a1140f36eb46c2205205007c1 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
If I have my project set up like this:

=
.
=E2=94=9C=E2=94=80=E2=94=80 fil= e.ml
=E2=94=9C=E2=94=80=E2=94=80 plugins
=E2=94=82 = =C2=A0 =E2=94=94=E2=94=80=E2=94=80 puz
=E2=94=82 =C2=A0 =C2=A0 = =C2=A0 =E2=94=9C=E2=94=80=E2=94=80 puz_bin.ml=
=E2=94=82 =C2=A0 =C2=A0 =C2=A0 =E2=94=9C=E2=94=80=E2=94=80 <= a href=3D"http://puz_match.ml">puz_match.ml
=E2=94=82 =C2=A0 = =C2=A0 =C2=A0 =E2=94=9C=E2=94=80=E2=94=80 puz.ml<= /a>
=E2=94= =82 =C2=A0 =C2=A0 =C2=A0 =E2=94=94=E2=94=80=E2=94=80 puz_utils.ml
=E2=94=94=E2=94=80=E2=94=80 _tags

$ cat plugins/puz/puz_plugin.mllib=C2=A0
Puz Puz_bin Puz_match

This works:

$ ocamlbuild -use-ocamlfind plugins/puz/puz_plu= gin.cmxa
Finished, 22 targets (3 cached) in 00:00:03.
=

My _tags file:
------------------------------= ------------------
$ cat _tags=C2=A0
true: thread,debug
true: package(core_kernel)

"plugins/puz": include

<gui.*>: package(labltk)
<**/puz.*>: package(un= ix), package(str), package(core_kernel), package(bitstring), package(mikmat= ch_pcre)
<*= */*_bin.*>: package(bitstring.syntax), syntax(bitstring)
<**/*_match.*>: package= (mikmatch_pcre), syntax(camlp4o)
-------------------= -----------------------------

But I can't = figure out how to use this library in my main program. This is a minimal ex= ample of what I'm trying to do, not working of course:

$ cat file.ml=C2=A0
= open Core_kernel.Std

let read fname =3D
= =C2=A0 let data =3D In_channel.read_all fname in
=C2=A0 Puz_plugi= n.read data

$ ocamlbuild -use-ocamlfind= file.native
+ ocamlfind ocamlc -c -g -thread -package core_kerne= l -I plugins/puz -o file.cmo file.ml
File "file.ml", line 5, charact= ers 2-17:
Error: Unbound module Puz_plugin

martin
--001a1140f36eb46c2205205007c1--