caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Ocamldoc and multiple packages
@ 2009-09-11 15:47 Alexey Rodriguez
  2009-09-11 18:45 ` [Caml-list] " Ashish Agarwal
  2009-09-12 15:27 ` Edgar Friendly
  0 siblings, 2 replies; 5+ messages in thread
From: Alexey Rodriguez @ 2009-09-11 15:47 UTC (permalink / raw)
  To: OCaml List

Dear list,

I am trying to build ocamldoc documentation for an ocaml project that
contains multiple packages (collections of modules built using
-for-pack and -pack). My current setup generates documentation for
each package but it won't generate hyperlinks to modules in other
packages (module not found errors). I tried using the -load and -dump
commands to allow ocamldoc see the ocamldoc-results of the referred to
package, but I still get problems. I suspect that the problem arises
because ocamldoc does not have a -pack option, so it always sees
modules in a flat way. So if you have package Pack1 with module A, and
module B in Pack2 which refers to Pack1.A.t, ocamldoc cannot solve
this reference because it does not know that module A is inside
another module called Pack1.

The solutions I see right now seem to involve more effort than I am
willing to spend. So, before I embark on a task that might take too
long I would like to ask for tips on this. How do you perform ocamldoc
generation for projects with multiple packages? Thanks!

Cheers,

Alexey


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Ocamldoc and multiple packages
  2009-09-11 15:47 Ocamldoc and multiple packages Alexey Rodriguez
@ 2009-09-11 18:45 ` Ashish Agarwal
  2009-09-12 15:27 ` Edgar Friendly
  1 sibling, 0 replies; 5+ messages in thread
From: Ashish Agarwal @ 2009-09-11 18:45 UTC (permalink / raw)
  To: Alexey Rodriguez; +Cc: OCaml List

[-- Attachment #1: Type: text/plain, Size: 1611 bytes --]

I don't know the answer but you might try using ocamlbuild's mlpack and
odocl features, and see how it does it.

On Fri, Sep 11, 2009 at 11:47 AM, Alexey Rodriguez <mrchebas@gmail.com>wrote:

> Dear list,
>
> I am trying to build ocamldoc documentation for an ocaml project that
> contains multiple packages (collections of modules built using
> -for-pack and -pack). My current setup generates documentation for
> each package but it won't generate hyperlinks to modules in other
> packages (module not found errors). I tried using the -load and -dump
> commands to allow ocamldoc see the ocamldoc-results of the referred to
> package, but I still get problems. I suspect that the problem arises
> because ocamldoc does not have a -pack option, so it always sees
> modules in a flat way. So if you have package Pack1 with module A, and
> module B in Pack2 which refers to Pack1.A.t, ocamldoc cannot solve
> this reference because it does not know that module A is inside
> another module called Pack1.
>
> The solutions I see right now seem to involve more effort than I am
> willing to spend. So, before I embark on a task that might take too
> long I would like to ask for tips on this. How do you perform ocamldoc
> generation for projects with multiple packages? Thanks!
>
> Cheers,
>
> Alexey
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>

[-- Attachment #2: Type: text/html, Size: 2262 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Ocamldoc and multiple packages
  2009-09-11 15:47 Ocamldoc and multiple packages Alexey Rodriguez
  2009-09-11 18:45 ` [Caml-list] " Ashish Agarwal
@ 2009-09-12 15:27 ` Edgar Friendly
  2009-09-15 12:11   ` Alexey Rodriguez
  1 sibling, 1 reply; 5+ messages in thread
From: Edgar Friendly @ 2009-09-12 15:27 UTC (permalink / raw)
  To: Alexey Rodriguez; +Cc: OCaml List

Alexey Rodriguez wrote:
> Dear list,
> 
> I am trying to build ocamldoc documentation for an ocaml project that
> contains multiple packages (collections of modules built using
> -for-pack and -pack). 

Batteries also has this problem, and does a decent job of solving it
through methods that are too complicated for me to explain in the margin
of this email.  :)  Read the source.

E


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Caml-list] Ocamldoc and multiple packages
  2009-09-12 15:27 ` Edgar Friendly
@ 2009-09-15 12:11   ` Alexey Rodriguez
  0 siblings, 0 replies; 5+ messages in thread
From: Alexey Rodriguez @ 2009-09-15 12:11 UTC (permalink / raw)
  To: Edgar Friendly; +Cc: OCaml List

Hi Edgar,

On Sat, Sep 12, 2009 at 5:27 PM, Edgar Friendly <thelema314@gmail.com> wrote:
> Alexey Rodriguez wrote:
>> Dear list,
>>
>> I am trying to build ocamldoc documentation for an ocaml project that
>> contains multiple packages (collections of modules built using
>> -for-pack and -pack).
>
> Batteries also has this problem, and does a decent job of solving it
> through methods that are too complicated for me to explain in the margin
> of this email.  :)  Read the source.

I had a quick look at batteries. I understood that the build system
makes one ocaml source file with the module structure of the whole
project, which ocamldoc should be able to parse. This solution looks
reusable (at least the idea does not seem too complex to implement).
Thanks for the tip!

Thanks to anyone else who replied.

Cheers,

Alexey


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Ocamldoc and multiple packages
       [not found] <20090911220901.C8F36BCB1@yquem.inria.fr>
@ 2009-09-14 13:36 ` Bertrand Jeannet
  0 siblings, 0 replies; 5+ messages in thread
From: Bertrand Jeannet @ 2009-09-14 13:36 UTC (permalink / raw)
  To: caml-list



> ------------------------------------------------------------------------
> 
> Subject:
> [Caml-list] Ocamldoc and multiple packages
> From:
> Alexey Rodriguez <mrchebas@gmail.com>
> Date:
> Fri, 11 Sep 2009 17:47:09 +0200
> To:
> OCaml List <caml-list@inria.fr>
> 
> To:
> OCaml List <caml-list@inria.fr>
> 
> 
> Dear list,
> 
> I am trying to build ocamldoc documentation for an ocaml project that
> contains multiple packages (collections of modules built using
> -for-pack and -pack). My current setup generates documentation for
> each package but it won't generate hyperlinks to modules in other
> packages (module not found errors). I tried using the -load and -dump
> commands to allow ocamldoc see the ocamldoc-results of the referred to
> package, but I still get problems. I suspect that the problem arises
> because ocamldoc does not have a -pack option, so it always sees
> modules in a flat way. So if you have package Pack1 with module A, and
> module B in Pack2 which refers to Pack1.A.t, ocamldoc cannot solve
> this reference because it does not know that module A is inside
> another module called Pack1.
> 
> The solutions I see right now seem to involve more effort than I am
> willing to spend. So, before I embark on a task that might take too
> long I would like to ask for tips on this. How do you perform ocamldoc
> generation for projects with multiple packages? Thanks!
> 
> Cheers,
> 
> Alexey
> 


I wrote very recently a small script that packs source modules into a 
big module, and takes care of ocamldoc convention, which is to interpret 
in each file the first (** *) comment as the title associated to the module.

I am very bad at sh and gawk script, so the result (given below) is not 
very elegant...

It would of course be better (and much more robust) to have a direct 
support in ocamldoc.

Bertrand

-----------

#/bin/sh

# command line (very primitive...)
if test $1 != "-o"; then
     echo "ocamlpack: usage: ocamlpack -o outputmodule -title <str> 
module1 module2 ..."
     exit -1
fi
shift
out=$1
shift
if test $1 != "-title"; then
     echo "ocamlpack: usage: ocamlpack -o outputmodule -title <str> 
module1 module2 ..."
     exit -1
fi
shift
outtitle=$1
shift

# prepare output
/bin/rm -f $out.ml $out.mli
echo "(** $outtitle *)">$out.ml
echo "(** $outtitle *)">$out.mli

# iterate on input module,
for i in $*; do
     name=$i
# 1.A Look for the first (** *) comment, and output it to out.ml
# (see ocamldoc convention)
     gawk -v name=$name '
BEGIN {
   start=1
   # isolate module name from path/modulename
   nb = split(name, dirname, "/")
   name = dirname[nb]
   if (RLENGTH>0)
     name = substr(name,RINDEX,length(name)-RINDEX)
   # Capitalize the module name
   hd = toupper(substr(name,1,1))
   tl = substr(name,2,length(name)-1)
}
# Look for the first (** *) comment, and output it
{
   if (start==1) {
     match($0, /\(\*\*([ ]+)([^*]*)([ ]+)\*\)/ )
     if (RLENGTH>0){
       start=0
       title=substr($0,RSTART+4,RLENGTH-7)
       print "\n(** {1 Module [",hd tl "]:",title "} *)\n"
       print "module",hd tl,"= struct"
     }
   }
}
END {
   if (start==1) {
     print "\n(** {1 Module [",hd tl "]} *)\n"
     print "module",hd tl,"= struct"
   }
}
'	$i.ml >>$out.ml
# 1.B Output the rest of name.ml to out.ml
	gawk -v name=$name '
{
   if (start==1) {
     match($0, /\(\*\*([ ]+)([^*]*)([ ]+)\*\)/ )
     if (RLENGTH>0)
       start=0
     else
       print $0
   }
   else
     print " ",$0
}
END { print "end\n" }
'	$i.ml >>$out.ml

# 2.A Look for the first (** *) comment, and output it to out.mli
     gawk -v name=$name '
BEGIN {
   start=1
   nb = split(name, dirname, "/")
   name = dirname[nb]
   if (RLENGTH>0)
     name = substr(name,RINDEX,length(name)-RINDEX)
   hd = toupper(substr(name,1,1))
   tl = substr(name,2,length(name)-1)
}
{
   if (start==1) {
     match($0, /\(\*\*([ ]+)([^*]*)([ ]+)\*\)/ )
     if (RLENGTH>0){
       start=0
       title=substr($0,RSTART+4,RLENGTH-7)
       print "\n(** {1 Module [",hd tl "]:",title "} *)\n"
       print "module",hd tl,": sig"
     }
   }
}
END {
   if (start==1) {
     print "\n(** {1 Module [",hd tl "]} *)\n"
     print "module",hd tl,": sig"
   }
}
'	$i.mli >>$out.mli
# 2.B Output the rest of name.mli to out.mli
	gawk -v name=$name '
{
   if (start==1) {
     match($0, /\(\*\*([ ]+)([^*]*)([ ]+)\*\)/ )
     if (RLENGTH>0)
       start=0
     else
       print $0
   }
   else
     print " ",$0
}
END { print "end\n" }
'	$i.mli >>$out.mli
done


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-09-15 12:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-11 15:47 Ocamldoc and multiple packages Alexey Rodriguez
2009-09-11 18:45 ` [Caml-list] " Ashish Agarwal
2009-09-12 15:27 ` Edgar Friendly
2009-09-15 12:11   ` Alexey Rodriguez
     [not found] <20090911220901.C8F36BCB1@yquem.inria.fr>
2009-09-14 13:36 ` Bertrand Jeannet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).