diff -Nru ocaml-tools-20090719/debian/changelog ocaml-tools-20120103/debian/changelog --- ocaml-tools-20090719/debian/changelog 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/changelog 2012-01-18 14:28:48.000000000 +0000 @@ -1,3 +1,34 @@ +ocaml-tools (20120103-2) unstable; urgency=low + + * Fix debian/rules targets to call install before binary-indep + (Closes: #656330) + + -- Mehdi Dogguy Wed, 18 Jan 2012 15:28:07 +0100 + +ocaml-tools (20120103-1) unstable; urgency=low + + [ Ralf Treinen ] + * Fixed typo in long description (closes: #583937) + + [ Stefano Zacchiroli ] + * remove myself from Uploaders + + [ Stéphane Glondu ] + * Switch packaging to git + + [ Mehdi Dogguy ] + * Add myself to Uploaders. + * New release + - retintroduce ocamldot since its functionality is not provided + by ocamldoc. + * Fix typo in README.Debian + * Fix copyright-refers-to-deprecated-bsd-license-file + * Bump Standards-Version to 3.9.2, no further changes required + * Fix debian-rules-missing-recommended-target build-{arch,indep} + * Convert to 3.0 (quilt) source format + + -- Mehdi Dogguy Wed, 04 Jan 2012 22:23:43 +0100 + ocaml-tools (20090719-1) unstable; urgency=low [ Stefano Zacchiroli ] diff -Nru ocaml-tools-20090719/debian/control ocaml-tools-20120103/debian/control --- ocaml-tools-20090719/debian/control 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/control 2012-01-12 17:04:31.000000000 +0000 @@ -4,23 +4,24 @@ Maintainer: Debian OCaml Maintainers Uploaders: Ralf Treinen , - Stefano Zacchiroli , + Mehdi Dogguy , Samuel Mimram -Build-Depends: debhelper (>= 6.0.7~) -Standards-Version: 3.8.2 -Vcs-Svn: svn://svn.debian.org/svn/pkg-ocaml-maint/trunk/packages/ocaml-tools/trunk -Vcs-Browser: http://svn.debian.org/wsvn/pkg-ocaml-maint/trunk/packages/ocaml-tools/trunk/ +Build-Depends: debhelper (>= 6.0.7~), ocaml-nox, dh-ocaml (>= 0.9) +Standards-Version: 3.9.2 +Vcs-Git: git://git.debian.org/git/pkg-ocaml-maint/packages/ocaml-tools.git +Vcs-Browser: http://git.debian.org/?p=pkg-ocaml-maint/packages/ocaml-tools.git Package: ocaml-tools Architecture: all -Depends: ${misc:Depends} +Depends: ${misc:Depends}, ocaml-base-nox-${F:OCamlABI} Recommends: vim, vim-addon-manager Enhances: ocaml Suggests: autoconf, otags Description: tools for OCaml developers - This package collects various tools to help developing Objectiva Caml + This package collects various tools to help developing Objective Caml (OCaml) programs; in particular it contains: . * ocaml-autoconf: autoconf macros for OCaml * omlet: a better OCaml indentation mode for vim * a configure.in and Makefile.in template + * ocamldot: generate program dependency graphs for OCaml programs diff -Nru ocaml-tools-20090719/debian/copyright ocaml-tools-20120103/debian/copyright --- ocaml-tools-20090719/debian/copyright 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/copyright 2012-01-12 17:04:31.000000000 +0000 @@ -16,9 +16,34 @@ License: -This program is distributed under the BSD "3-clauses" license. On -Debian systems, the full text of the license can be found in the file -/usr/share/common-licenses/BSD . +This program is distributed under the BSD "3-clauses" license: + + Copyright (c) The Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. configure.in and Makefile.in ---------------------------- @@ -51,3 +76,13 @@ On Debian systems you can find a copy of this license in /usr/share/common-licenses/GPL-2 +ocamldot +-------- +Dowloaded from http://www.research.att.com/~trevor/ocamldot/index.html + +Upstream Author: Trevor Jim + +Copyright: + +Ocamldot was written by Trevor Jim. It is in the public domain; use +it however you like, at your own risk. diff -Nru ocaml-tools-20090719/debian/docs ocaml-tools-20120103/debian/docs --- ocaml-tools-20090719/debian/docs 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/docs 2012-01-12 17:04:31.000000000 +0000 @@ -2,3 +2,4 @@ ocaml-autoconf/ocaml.m4.txt omlet-*/README.omlet omlet-*/changelog.omlet +README.ocamldot diff -Nru ocaml-tools-20090719/debian/gbp.conf ocaml-tools-20120103/debian/gbp.conf --- ocaml-tools-20090719/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/debian/gbp.conf 2012-01-12 17:04:31.000000000 +0000 @@ -0,0 +1,2 @@ +[DEFAULT] +pristine-tar = True diff -Nru ocaml-tools-20090719/debian/install ocaml-tools-20120103/debian/install --- ocaml-tools-20090719/debian/install 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/install 2012-01-12 17:04:31.000000000 +0000 @@ -8,3 +8,6 @@ # autoconf samples autoconf/configure.in /usr/share/ocaml-tools autoconf/Makefile.in /usr/share/ocaml-tools + +# ocamldot +ocamldot/ocamldot /usr/bin diff -Nru ocaml-tools-20090719/debian/manpages ocaml-tools-20120103/debian/manpages --- ocaml-tools-20090719/debian/manpages 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/manpages 2012-01-12 17:04:31.000000000 +0000 @@ -1 +1,2 @@ ocaml-autoconf/ocaml.m4.1 +ocamldot/ocamldot.1 diff -Nru ocaml-tools-20090719/debian/README.Debian ocaml-tools-20120103/debian/README.Debian --- ocaml-tools-20090719/debian/README.Debian 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/README.Debian 2012-01-12 17:04:31.000000000 +0000 @@ -1,7 +1,7 @@ Omlet ----- This package provides the vim addon omlet which is a replacement for the -official vim mode for OCaml files. It is not enable per default. If you want to +official vim mode for OCaml files. It is not enabled per default. If you want to enable it for your user account just execute vim-addons install omlet diff -Nru ocaml-tools-20090719/debian/rules ocaml-tools-20120103/debian/rules --- ocaml-tools-20090719/debian/rules 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/rules 2012-01-18 14:29:54.000000000 +0000 @@ -1,6 +1,8 @@ #!/usr/bin/make -f # debian/rules for ocaml-tools +include /usr/share/ocaml/ocamlvars.mk + DESTDIR := $(CURDIR)/debian/ocaml-tools # top level dir for documentation @@ -14,17 +16,25 @@ # omlet source dir OMLETSRC = $(shell echo omlet-*) -build: +build-arch: + +build-indep: $(MAKE) -C ocaml-autoconf/ + $(MAKE) -C ocamldot/ ocamldot cp ocaml-autoconf/README ocaml-autoconf/README.ocaml-autoconf cd omlet-* && (cp README README.omlet ; cp ChangeLog changelog.omlet) + cp ocamldot/README README.ocamldot + +build: build-arch build-indep clean: dh_testdir dh_testroot $(MAKE) -C ocaml-autoconf/ clean + $(MAKE) -C ocamldot/ clean rm -f ocaml-autoconf/README.ocaml-autoconf rm -f omlet-*/README.omlet omlet-*/changelog.omlet + rm -f README.ocamldot dh_clean install: @@ -33,10 +43,11 @@ dh_clean -k dh_installdirs BASE=$(DESTDIR)/$(VIMDIR) make -C $(OMLETSRC) install-aux + echo 'F:OCamlABI=$(OCAML_ABI)' >> debian/ocaml-tools.substvars -binary-arch: build install +binary-arch: build-arch -binary-indep: build install +binary-indep: build-indep install dh_testdir dh_testroot dh_install diff -Nru ocaml-tools-20090719/debian/source/format ocaml-tools-20120103/debian/source/format --- ocaml-tools-20090719/debian/source/format 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/debian/source/format 2012-04-30 22:36:27.000000000 +0000 @@ -0,0 +1 @@ +3.0 (quilt) diff -Nru ocaml-tools-20090719/debian/svn-deblayout ocaml-tools-20120103/debian/svn-deblayout --- ocaml-tools-20090719/debian/svn-deblayout 2012-04-30 22:36:26.000000000 +0000 +++ ocaml-tools-20120103/debian/svn-deblayout 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -origDir=../upstream -origUrl=svn+ssh://svn.debian.org/svn/pkg-ocaml-maint/trunk/packages/ocaml-tools/upstream -tagsUrl=svn+ssh://svn.debian.org/svn/pkg-ocaml-maint/tags/packages/ocaml-tools diff -Nru ocaml-tools-20090719/ocamldot/LICENSE ocaml-tools-20120103/ocamldot/LICENSE --- ocaml-tools-20090719/ocamldot/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/ocamldot/LICENSE 2001-03-26 16:16:53.000000000 +0000 @@ -0,0 +1,2 @@ +Ocamldot was written by Trevor Jim. It is in the public domain; use +it however you like, at your own risk. diff -Nru ocaml-tools-20090719/ocamldot/Makefile ocaml-tools-20120103/ocamldot/Makefile --- ocaml-tools-20090719/ocamldot/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/ocamldot/Makefile 2000-08-11 18:02:12.000000000 +0000 @@ -0,0 +1,23 @@ +# Try to automatically guess whether we are running under Windows. +# Set WIN32=true manually if this doesn't work. +# +ifeq (${OSTYPE},cygwin32) # Cygwin Beta 19 + WIN32=true +else +ifeq (${OSTYPE},cygwin) # Cygwin Beta 20 + WIN32=true +endif +endif + +ifdef WIN32 +EXE=.exe +else # UNIX +EXE= +endif + +ocamldot$(EXE): ocamldot.mll + ocamllex ocamldot.mll + ocamlc -o $@ ocamldot.ml + +clean: + $(RM) ocamldot$(EXE) ocamldot.ml *.cmi *.cmo *.o *.obj diff -Nru ocaml-tools-20090719/ocamldot/ocamldot.1 ocaml-tools-20120103/ocamldot/ocamldot.1 --- ocaml-tools-20090719/ocamldot/ocamldot.1 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/ocamldot/ocamldot.1 2001-03-30 19:15:31.000000000 +0000 @@ -0,0 +1,52 @@ +.TH OCAMLDOT 1 +.SH NAME +ocamldot \- generate dependency graphs of ocaml programs +.SH SYNOPSIS +.B ocamldot +.I +.RI "[options] " +.SH "DESCRIPTION" +This manual page documents briefly the +.BR ocamldot +command. +.PP +.B ocamldot +generates program dependency graphs for ocaml programs. The +dependency graph output by ocamldot can be rendered by a separate +program, \fIdot\fR. +.P +Ocamldot is designed to process the output of ocamldep. A typical use would be +.P + ocamldep *.ml | ocamldot > dep.dot +.P +or +.P + ocamldep *.ml > .depend +.br + ocamldot .depend > dep.dot +.SH OPTIONS +.TP +.B \-fullgraph +Draw the full graph (default is to draw only the kernel) +.TP +.B \-landscape +Output in landscape format (default is portrait) +.TP +.B \-lr +Draw graph from left to right (default is top to bottom) +.TP +.B \-r +Use \fI\fR as a root in the graph; nodes reachable from \fI\fR +will be shown. +.P +The transitive kernel of a dag is the smallest subset of the dag whose transitive closure is the same as the transitive closure of the dag. +For example, the kernel of A->B, A->C, B->C is just the two edges A->B, B->C. + +.SH SEE ALSO +.BR ocamldep (1), +.BR dot(1) +.P +\fIhttp://www.research.att.com/~trevor/ocamldot\fR. + +.SH AUTHOR +Trevor Jim diff -Nru ocaml-tools-20090719/ocamldot/ocamldot.mll ocaml-tools-20120103/ocamldot/ocamldot.mll --- ocaml-tools-20090719/ocamldot/ocamldot.mll 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/ocamldot/ocamldot.mll 2000-08-11 18:02:13.000000000 +0000 @@ -0,0 +1,355 @@ +(* ocamldot.mll, July 1999, Trevor Jim *) + +{ +module StringSet = + Set.Make(struct type t = string let compare = compare end) + +let dependencies = ref [] +let currentSource = ref "" +let addDepend t = + let s = !currentSource in + if s<>t + then dependencies := (s,t)::(!dependencies) + +} + +rule processSource = parse + ['.' '-' '/' 'A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' + '\248'-'\255' '\'' '0'-'9' ]+ '.' ['A'-'Z' 'a'-'z']+ + [' ' '\009']* ':' + { let s = Lexing.lexeme lexbuf in + let i = String.rindex s '.' in + let s = String.sub s 0 i in + let s = Filename.basename s in + let s = String.capitalize s in + currentSource := s; + processTargets lexbuf } + | eof + { () } + | _ + { processSource lexbuf } + +and processTargets = parse + [' ' '\009']+ + { processTargets lexbuf } + | '\\' [' ' '\009']* ['\010' '\013']+ [' ' '\009']+ + { processTargets lexbuf } + | ['.' '/' 'A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' + '\248'-'\255' '\'' '0'-'9' ]+ '.' ['A'-'Z' 'a'-'z']+ + { let t = Lexing.lexeme lexbuf in + let i = String.rindex t '.' in + let t = String.sub t 0 i in + let t = Filename.basename t in + let t = String.capitalize t in + addDepend t; + processTargets lexbuf } + | eof + { () } + | _ + { processSource lexbuf } + +{ + + (********************************) + (* Utility functions for graphs *) + (********************************) + + +(**********************************************************************) +(* A graph is represented by a (string * StringSet) list, *) +(* that is, a list of (source,targets) pairs. *) +(**********************************************************************) + +let emptyGraph = [] + +(**********************************************************************) +(* divideGraph graph source = (sourceTargets, graphWithoutSource) *) +(* *) +(* Return the targets of a source in a graph and the graph with the *) +(* source substracted from the sources. GraphWithoutSources may *) +(* still contain source as a target. *) +(**********************************************************************) +let divideGraph graph source = + let rec aux l = + match l with + [] -> (StringSet.empty,[]) + | (s,ts)::tl -> + if s=source then (ts,tl) + else + let (sourceTargets,tlWithoutSource) = aux tl in + (sourceTargets,(s,ts)::tlWithoutSource) in + aux graph + +(*********************************************) +(* Add the edge (source,target) to the graph *) +(*********************************************) +let addEdge graph source target = + let (sourceTargets,graphWithoutSource) = divideGraph graph source in + (source,StringSet.add target sourceTargets)::graphWithoutSource + +(************************************************************) +(* Add the edges { (source,t) | t in targets } to the graph *) +(************************************************************) +let addEdges graph source targets = + let (sourceTargets,graphWithoutSource) = divideGraph graph source in + (source,StringSet.union targets sourceTargets)::graphWithoutSource + +(**************************************************) +(* Remove the edge (source,target) from the graph *) +(**************************************************) +let removeEdge graph source target = + let rec loop l = + match l with + [] -> [] + | (s,ts)::tl -> + if s=source + then (s,StringSet.remove target ts)::tl + else (s,ts)::(loop tl) + in loop graph + +(*****************************************************************) +(* Remove the edges { (source,t) | t in targets } from the graph *) +(*****************************************************************) +let removeEdges graph source targets = + let rec loop l = + match l with + [] -> [] + | (s,ts)::tl -> + if s=source + then (s,StringSet.diff ts targets)::tl + else (s,ts)::(loop tl) + in loop graph + +(**********************************************************************) +(* Convert between an edge-list representation of graphs and our *) +(* representation. *) +(**********************************************************************) +let edgesOfGraph graph = + List.concat + (List.map + (fun (s,ts) -> + List.map (fun t -> (s,t)) (StringSet.elements ts)) + graph) + +let graphOfEdges edges = + List.fold_left + (fun g (s,t) -> addEdge g s t) + emptyGraph + edges + +(****************************) +(* Is an edge in the graph? *) +(****************************) +let isEdge graph source target = + try + let sourceTargets = List.assoc source graph in + StringSet.mem target sourceTargets + with Not_found -> false + +(*****************) +(* Print a graph *) +(*****************) +let printGraph graph = + let printEdges(source,targets) = + StringSet.iter + (fun t -> Printf.printf " \"%s\" -> \"%s\" ;\n" source t) + targets in + List.iter printEdges graph + +(********************************) +(* Targets of a node in a graph *) +(********************************) +let targetsOf graph node = (* A set of nodes *) + try List.assoc node graph + with Not_found -> StringSet.empty + +(*****************************************) +(* Sources that target a node in a graph *) +(*****************************************) +let sourcesOf graph node = (* A list of nodes *) + let rec aux l = + match l with + [] -> [] + | (s,ts)::tl -> + if StringSet.mem node ts then s::(aux tl) + else aux tl in + aux graph + +(******************************************************************) +(* Add an edge to a transitively closed graph, and return the new *) +(* transitive closure. *) +(******************************************************************) +let addEdgeTc graph source target = + let targetTargets = targetsOf graph target in + let (sourceTargets,graphWithoutSource) = divideGraph graph source in + let sourceSources = sourcesOf graphWithoutSource source in + let newSourceTargets = + StringSet.add target + (StringSet.union sourceTargets targetTargets) in + (source,newSourceTargets):: + (List.fold_right + (fun s g -> addEdges g s newSourceTargets) + sourceSources + graphWithoutSource) + +(**********************************************************) +(* Compute the transitive closure of a graph from scratch *) +(**********************************************************) +let tc graph = + let loop graph (source,targets) = + let reachableFromSource = + List.fold_left + (fun r (s,ts) -> + if StringSet.mem s r then StringSet.union r ts + else r) + targets + graph in + (source,reachableFromSource):: + (List.map + (fun (s,ts) -> + if StringSet.mem source ts + then (s,StringSet.union ts reachableFromSource) + else (s,ts)) + graph) in + List.fold_left loop [] graph + +(************************************************************************) +(* The transitive kernel (tk) of a dag is a subset of the dag whose *) +(* transitive closure is the same as the transitive closure of the dag. *) +(* *) +(* IF THE GRAPH IS NOT A DAG, THIS CODE WON'T WORK PROPERLY!!! *) +(************************************************************************) + +(************************************************************************) +(* Add an edge to a kernel dag and return the new kernel and transitive *) +(* closure of the new kernel. Requires the transitive closure of the *) +(* old kernel. *) +(************************************************************************) +let addEdgeTk kernel tcKernel source target = + if isEdge tcKernel source target + then (kernel,tcKernel) + else if source=target + then (addEdge kernel source target,tcKernel) + else + begin + let (sourceTargets,kernelWithoutSource) = divideGraph kernel source in + let targetTargets = StringSet.add target (targetsOf tcKernel target) in + let sourceSources = sourcesOf tcKernel source in + let kernelWithoutSource = + List.fold_left + (fun kws s -> removeEdges kws s targetTargets) + kernelWithoutSource + sourceSources in + ((source, + StringSet.add target + (StringSet.diff sourceTargets targetTargets)) + ::kernelWithoutSource, + addEdgeTc tcKernel source target) + end + +(**********************************) +(* The transitive kernel of a dag *) +(**********************************) +let tk dag = + let edges = edgesOfGraph dag in + let (kernel,tcKernel) = + List.fold_left + (fun (k,tck) (s,t) -> addEdgeTk k tck s t) + (emptyGraph,emptyGraph) + edges in + kernel + +(**************************) +(* Print the dependencies *) +(**************************) +let doKernel = ref true +let printDepend graph = + if (!doKernel) then printGraph (tk graph) + else printGraph graph + +let calledOnFile = ref false +let getDependFromFile file = + calledOnFile := true; + try + let ic = open_in file in + let lexbuf = Lexing.from_channel ic in + processSource lexbuf; + close_in ic + with Sys_error msg -> () + | Exit -> () +let getDependFromStdin () = + try + let lexbuf = Lexing.from_channel stdin in + processSource lexbuf + with Sys_error msg -> () + | Exit -> () + + (***************) + (* Entry point *) + (***************) + +let usage = "Usage: ocamldot [options] " + +let leftToRight = ref false +let landscape = ref false +let roots = ref [] +;; + +Arg.parse + [ + ("-fullgraph", + Arg.Clear doKernel, + " draw the full graph (default is to draw only the kernel)"); + ("-landscape", + Arg.Set landscape, + " output in landscape format (default is portrait)"); + ("-lr", + Arg.Set leftToRight, + " draw graph from left to right (default is top to bottom)"); + ("-r", + Arg.String(fun s -> roots := s::!roots), + " use as a root in the graph; nodes reachable from \n will be shown") + ] + getDependFromFile usage; +if not(!calledOnFile) then getDependFromStdin(); +print_string "digraph G {\n"; +if !landscape +then print_string " size=\"10,7.5\" ;\n rotate=90 ;\n" +else print_string " size=\"7.5,10\" ;\n"; +if (!leftToRight) then print_string " rankdir = LR ;\n" +else print_string " rankdir = TB ;\n"; +let graph = graphOfEdges(!dependencies) in +begin + match !roots with + [] -> printDepend graph + | roots -> + (* Set up the graph so that the roots are printed at the same level *) + print_string " { rank=same ;\n"; + List.iter + (fun r -> + print_string " "; + print_string r; + print_string " ;\n") + roots; + print_string " };\n"; + (* Find the graph reachable from the roots *) + let tcGraph = tc graph in + let reachable node = + (List.exists (fun r -> r=node) roots) + or + (List.exists (fun r -> isEdge tcGraph r node) roots) in + let reachableFromRoots = + List.concat + (List.map + (fun (source,targets) -> + if reachable source + then [(source,targets)] + else []) + graph) in + printDepend reachableFromRoots +end; +print_string "}\n"; +exit 0 +;; + +} diff -Nru ocaml-tools-20090719/ocamldot/README ocaml-tools-20120103/ocamldot/README --- ocaml-tools-20090719/ocamldot/README 1970-01-01 00:00:00.000000000 +0000 +++ ocaml-tools-20120103/ocamldot/README 2000-08-11 18:02:12.000000000 +0000 @@ -0,0 +1,34 @@ +Ocamldot generates program dependency graphs for ocaml programs. + +The dependency graph output by ocamldot can be rendered by a separate +program, dot. Dot is freely available from + + http://www.research.att.com/sw/tools/graphviz/ + +Ocamldot is designed to process the output of ocamldep. A typical use +would be + + ocamldep *.ml | ocamldot > dep.dot + +or + + ocamldep *.ml > .depend + ocamldot .depend > dep.dot + +This will output a dot graph into the file dep.dot. You can then use +the program dotty to view, edit, and print the graph. + +Ocamldot has the following options: + + -fullgraph draw the full graph (default is to draw only the kernel) + -landscape output in landscape format (default is portrait) + -lr draw graph from left to right (default is top to bottom) + -r use as a root in the graph; nodes reachable from + will be shown + +(The transitive kernel of a dag is the smallest subset of the dag +whose transitive closure is the same as the transitive closure of the +dag. For example, the kernel of A->B, A->C, B->C is just the two +edges A->B, B->C.) + +-Trevor Jim