pkgIndex.tcl
*.pdf
gv_*.cpp
-SWIGTYPE_p_Agedge_t.cs
-SWIGTYPE_p_Agedge_t.java
-SWIGTYPE_p_Agnode_t.cs
-SWIGTYPE_p_Agnode_t.java
-SWIGTYPE_p_Agraph_t.cs
-SWIGTYPE_p_Agraph_t.java
+gv_*.man
+SWIGTYPE_p_*
gv.cs
gv.java
+gv.ml
+gv.mli
gv.php
gv.pm
gv.py
gvJNI.java
gvPINVOKE.cs
php_gv.h
-test_csharp
-test_guile
-test_io
-test_java
-test_ocaml
-test_perl
-test_php
-test_python
-test_ruby
-test_tcl
+test_*
BASESOURCES = gv.cpp
BASELIBS = $(top_builddir)/lib/gvc/libgvc.la
-
pkgcsharpdir = $(pkglibdir)/csharp
CSHARP_hdr = gv.cs gvPINVOKE.cs SWIGTYPE_p_Agraph_t.cs SWIGTYPE_p_Agnode_t.cs SWIGTYPE_p_Agedge_t.cs
libgv_csharp_la_SOURCES = $(BASESOURCES) gv_csharp.cpp $(CSHARP_hdr)
pkgpythondir = $(pkglibdir)/python
PYTHON_hdr = gv.py
-_gv_la_SOURCES = $(BASESOURCES) gv_python.cpp $(PYTHON_hdr)
-_gv_la_LIBADD = $(BASELIBS) @PYTHON_LIBS@
-_gv_la_LDFLAGS = -module
+libgv_python_la_SOURCES = $(BASESOURCES) gv_python.cpp $(PYTHON_hdr)
+libgv_python_la_LIBADD = $(BASELIBS) @PYTHON_LIBS@
+libgv_python_la_LDFLAGS = -module
gv_python.cpp $(PYTHON_hdr): gv.i
$(SWIG) -c++ -python -o gv_python.cpp gv.i
pkglib_LTLIBRARIES =
TESTS =
if WITH_CSHARP
-pkgcsharp_DATA = $(CSHARP_hdr)
+pkgcsharp_DATA = $(CSHARP_hdr) gv_csharp.man
pkgcsharp_LTLIBRARIES = libgv_csharp.la
TESTS += test_csharp
endif
if WITH_GUILE
-pkgguile_DATA = $(GUILE_hdr)
+pkgguile_DATA = $(GUILE_hdr) gv_guile.man
pkgguile_LTLIBRARIES = libgv_guile.la
TESTS += test_guile
endif
#if WITH_IO
-#pkgio_DATA += $(IO_hdr)
-#pkgio_LTLIBRARIES += libgv_io.la
+#pkgio_DATA = $(IO_hdr) gv_io.man
+#pkgio_LTLIBRARIES = libgv_io.la
#TESTS += test_io
#endif
if WITH_JAVA
-pkgjava_DATA = $(JAVA_hdr)
+pkgjava_DATA = $(JAVA_hdr) gv_java.man
pkgjava_LTLIBRARIES = libgv_java.la
TESTS += test_java
endif
if WITH_LUA
-pkglua_DATA = $(LUA_hdr)
+pkglua_DATA = $(LUA_hdr) gv_lua.man
pkglua_LTLIBRARIES = libgv_lua.la
TESTS += test_lua
endif
if WITH_OCAML
-pkgocaml_DATA = $(OCAML_hdr)
+pkgocaml_DATA = $(OCAML_hdr) gv_ocaml.man
pkgocaml_LTLIBRARIES = libgv_ocaml.la
TESTS += test_ocaml
endif
if WITH_PERL
-pkgperl_DATA = $(PERL_hdr)
+pkgperl_DATA = $(PERL_hdr) gv_perl.man
pkgperl_LTLIBRARIES = libgv_perl.la
TESTS += test_perl
endif
if WITH_PHP
-pkgphp_DATA = $(PHP_hdr)
+pkgphp_DATA = $(PHP_hdr) gv_php.man
pkgphp_LTLIBRARIES = libgv_php.la
TESTS += test_php
endif
if WITH_PYTHON
-pkgpython_DATA = $(PYTHON_hdr)
-pkgpython_LTLIBRARIES = _gv.la
+pkgpython_DATA = $(PYTHON_hdr) gv_python.man
+pkgpython_LTLIBRARIES = libgv_python.la
TESTS += test_python
endif
if WITH_RUBY
-pkgruby_DATA = $(RUBY_hdr)
+pkgruby_DATA = $(RUBY_hdr) gv_ruby.man
pkgruby_LTLIBRARIES = libgv_ruby.la
TESTS += test_ruby
endif
if WITH_TCL
-pkgtcl_DATA = $(TCL_hdr)
+pkgtcl_DATA = $(TCL_hdr) gv_tcl.man
pkgtcl_LTLIBRARIES = libgv_tcl.la
TESTS += test_tcl
sh $(top_srcdir)/tclpkg/mkpkgindex.sh libgv_tcl.la gv $(VERSION)
endif
+gv_csharp.man gv_guile.man gv_io.man gv_java.man gv_ocaml.man gv_perl.man gv_php.man gv_python.man gv_ruby.man gv_tcl.man: gv.i gv_doc_writer.tcl gv_doc_template.tcl gv_doc_langs.tcl
+ tclsh ./gv_doc_writer.tcl
+
+install-exec-hook:
+ (cd $(DESTDIR)$(pkgperldir); rm -f gv.so; $(LN_S) libgv_perl.so gv.so;)
+ (cd $(DESTDIR)$(pkgpythondir); rm -f _gv.so; $(LN_S) libgv_python.so _gv.so;)
+ (cd $(DESTDIR)$(pkgrubydir); rm -f gv.so; $(LN_S) libgv_ruby.so gv.so;)
+ (cd $(DESTDIR)$(pkgtcldir); rm -f gv.so; $(LN_S) libgv_tcl.so gv.so;)
+
+uninstall-hook:
+ (cd $(DESTDIR)$(pkgperldir); rm -f gv.so;)
+ (cd $(DESTDIR)$(pkgpythondir); rm -f _gv.so;)
+ (cd $(DESTDIR)$(pkgrubydir); rm -f gv.so;)
+ (cd $(DESTDIR)$(pkgtcldir); rm -f gv.so;)
+
test: $(TESTS)
.PHONY: test_csharp
.PHONY: test_python
test_python: _gv.la
-(mkdir -p test_python; cd test_python; \
- ln -fs ../.libs/_gv.so ../*.dot ../*.py .; \
+ ln -fs ../.libs/libgv_python.so _gv.so; \
+ ln -fs ../*.dot ../*.py .; \
PYTHONPATH=. $(PYTHON) test.py)
.PHONY: test_ruby
-test_ruby: libgv_ruby.la
+test_ruby: gv.la
-(mkdir -p test_ruby; cd test_ruby; \
ln -fs ../.libs/libgv_ruby.so gv.so; \
- ln -fs ../*.dot ../*.rb .; \
+ ln -fs ../.libs/gv.so ../*.dot ../*.rb .; \
$(RUBY) test.rb)
.PHONY: test_tcl
ln -fs ../*.dot ../*.tcl .; \
$(TCLSH) ./test.tcl)
-EXTRA_DIST = demo/* gv.cpp gv.i
+EXTRA_DIST = demo/* gv.cpp gv.i gv_doc_*.tcl
-CLEANFILES = test_*/* \
+CLEANFILES = test_*/* gv_*.man \
gv_csharp.cpp $(CSHARP_hdr) \
gv_guile.cpp $(GUILE_hdr) \
gv_io.cpp $(IO_hdr) \
-- author: John Ellson <ellson@research.att.com>
-lib = loadlib('/usr/lib64/graphviz/lua/libgv_lua.so','Gv_Init')
+lib = loadlib('/usr/lib/graphviz/lua/libgv_lua.so','Gv_Init')
+-- lib = loadlib('/usr/lib64/graphviz/lua/libgv_lua.so','Gv_Init')
assert(lib)()
modules = io.lines('/proc/modules')
# based on: modgraph.tcl by John Ellson <ellson@research.att.com>
import sys
-# sys.path.append('/usr/lib/graphviz/python')
-sys.path.append('/usr/lib64/graphviz/python')
+sys.path.append('/usr/lib/graphviz/python')
+# sys.path.append('/usr/lib64/graphviz/python')
import gv
modules = open("/proc/modules", 'r').readlines()
--- /dev/null
+#!/usr/bin/ruby
+
+# display the kernel module dependencies
+
+# author: John Ellson <ellson@research.att.com>
+
+require 'gv'
+
+G = Gv.digraph("G")
+Gv.setv(G, 'rankdir', 'LR')
+Gv.setv(G, 'nodesep', '0.05')
+Gv.setv(G, 'node', 'shape', 'box')
+Gv.setv(G, 'node', 'width', '0')
+Gv.setv(G, 'node', 'height', '0')
+Gv.setv(G, 'node', 'margin', '.03')
+Gv.setv(G, 'node', 'fontsize', '8')
+Gv.setv(G, 'node', 'fontname', 'helvetica')
+Gv.setv(G, 'edge', 'arrowsize', '.4')
+
+# for rec in modules do
+# for mod, usedbylist in string.gfind(rec, "([_%w]+) %w+ %w+ ([-,_%w]+)") do
+# n = gv.node(G, mod)
+# for usedby in string.gfind(usedbylist, "([-_%w]+)") do
+# if (usedby ~= '-') and (usedby ~= '') then
+# gv.edge(n, gv.node(G, usedby))
+# end
+# end
+# end
+# end
+
+Gv.layout(G, 'dot')
+Gv.render(G, 'gtk')
# author: John Ellson <ellson@research.att.com>
-package require gv
+#package require gv
+
+load /usr/lib/graphviz/tcl/gv.so
+#load /usr/lib64/graphviz/tcl/gv.so
+#load $env(PREFIX)/lib/graphviz/tcl/gv.so
set f [open /proc/modules r]
set modules [read -nonewline $f]
/* set/get attribute of graph/node/edge */
extern char *setv(Agraph_t *g, char *attr, char *val);
-extern char *setv(Agraph_t *g, char *gne, char *att, char *val);
+extern char *setv(Agraph_t *g, char *gne, char *attr, char *val);
extern char *setv(Agnode_t *n, char *attr, char *val);
extern char *setv(Agedge_t *e, char *attr, char *val);
--- /dev/null
+array set LANGS {
+ csharp {
+ TYPES {
+ Agraph_t* SWIGTYPE_p_Agraph_t
+ Agnode_t* SWIGTYPE_p_Agnode_t
+ Agedge_t* SWIGTYPE_p_Agedge_t
+ Agsym_t* SWIGTYPE_p_Agsym_t
+ char* string
+ FILE* SWIGTYPE_p_FILE
+ bool bool
+ void** SWIGTYPE_p_p_void
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ }
+ USAGE {
+ }
+ }
+ guile {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ {(load-extension "./libgv.so" "SWIG_init")}
+ }
+ USAGE {
+ }
+ }
+ io {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ }
+ USAGE {
+ }
+ }
+ java {
+ TYPES {
+ Agraph_t* SWIGTYPE_p_Agraph_t
+ Agnode_t* SWIGTYPE_p_Agnode_t
+ Agedge_t* SWIGTYPE_p_Agedge_t
+ Agsym_t* SWIGTYPE_p_Agsym_t
+ char* string
+ FILE* SWIGTYPE_p_FILE
+ bool bool
+ void** SWIGTYPE_p_p_void
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ {System.loadLibrary("gv");}
+ }
+ USAGE {
+ }
+ }
+ lua {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ {#!/usr/bin/lua}
+ {lib=loadlib('/usr/lib/graphviz/lua/libgv_lua.so','Gv_Init')}
+ {assert(lib)()}
+ }
+ USAGE {
+ }
+ }
+ ocaml {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ }
+ USAGE {
+ }
+ }
+ perl {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv:: ( , {);}
+ }
+ SYNOPSIS {
+ {#!/usr/bin/perl}
+ {use gv;}
+ }
+ USAGE {
+ }
+ }
+ php {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv:: ( , {);}
+ }
+ SYNOPSIS {
+ {dl("libgv_php.so");}
+ {include("gv.php")}
+ }
+ USAGE {
+ }
+ }
+ python {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ gv. ( , {);}
+ }
+ SYNOPSIS {
+ {#!/usr/bin/python}
+ {import sys}
+ {sys.path.append('/usr/lib/graphviz/python')}
+ {import gv}
+ }
+ USAGE {
+ }
+ }
+ ruby {
+ TYPES {
+ Agraph_t* graph_handle
+ Agnode_t* node_handle
+ Agedge_t* edge_handle
+ Agsym_t* attribute_handle
+ char* string
+ FILE* channel
+ bool bool
+ void** data_handle
+ void {}
+ }
+ SYNTAX {
+ Gv. ( , {);}
+ }
+ SYNOPSIS {
+ {export RUBYLIB=/usr/lib/graphviz/ruby}
+ {}
+ {#!/usr/bin/ruby}
+ {require 'gv'}
+ }
+ USAGE {
+ }
+ }
+ tcl {
+ TYPES {
+ {Agraph_t* g} <graph_handle>
+ {Agraph_t* sg} <subgraph_handle>
+ {Agnode_t* n} <node_handle>
+ {Agnode_t* t} <tail_node_handle>
+ {Agnode_t* h} <head_node_handle>
+ {Agedge_t* e} <edge_handle>
+ {Agsym_t* a} <attr_handle>
+ {char* gne} <type>
+ {char* name} <name>
+ {char* tname} <tail_name>
+ {char* hname} <head_name>
+ {char* attr} <attr_name>
+ {char* val} <attr_value>
+ {char* filename} <filename>
+ {char* engine} <engine>
+ {char* string} <string>
+ {char* format} <format>
+ {FILE* f} <channel>
+ {void** data} <data_handle>
+ Agraph_t* <graph_handle>
+ Agnode_t* <node_handle>
+ Agedge_t* <edge_handle>
+ Agsym_t* <attr_handle>
+ char* <string>
+ FILE* <channel>
+ bool <boolean_string>
+ void** <data_handle>
+ void {}
+ }
+ SYNTAX {
+ gv:: {} { } {}
+ }
+ SYNOPSIS {
+ {#!/usr/bin/tclsh}
+ {load /usr/lib/graphviz/tcl/gv.so}
+ }
+ USAGE {
+ {Requires tcl7.6 or later.}
+ }
+ }
+}
--- /dev/null
+.TH GV_[string toupper $lang] N \"[clock format [clock seconds] -format "%d %B %Y"]\"
+
+.SH NAME
+
+gv_$lang \- graph manipulation in $lang
+
+.SH SYNOPSIS
+
+[gv_doc_synopsis]
+
+.SH USAGE
+
+[gv_doc_usage]
+
+.SH INTRODUCTION
+
+.B gv_$lang
+is a dynamically loaded extension for
+.B $lang
+that provides access to the graph facilities of
+.B graphviz.
+
+.SH COMMANDS
+.PP
+Graph creation commands:
+
+[gv_doc_command digraph]
+[gv_doc_command graph]
+[gv_doc_command strictdigraph]
+[gv_doc_command strictgraph]
+[gv_doc_command read]
+[gv_doc_command readstring]
+.PP
+Node creation commands:
+
+[gv_doc_command node]
+.PP
+Edge creation commands:
+
+[gv_doc_command edge]
+.PP
+Object removal commands:
+
+[gv_doc_command rm]
+.PP
+Attributes:
+
+[gv_doc_command getv]
+
+[gv_doc_command setv]
+.PP
+Iterators:
+
+[gv_doc_command findattr]
+[gv_doc_command firstedge]
+[gv_doc_command nextedge]
+[gv_doc_command firstin]
+[gv_doc_command nextin]
+[gv_doc_command firstout]
+[gv_doc_command nextout]
+[gv_doc_command firsthead]
+[gv_doc_command nexthead]
+[gv_doc_command firsttail]
+[gv_doc_command nexttail]
+[gv_doc_command firstnode]
+[gv_doc_command nextnode]
+[gv_doc_command firstsubg]
+[gv_doc_command nextsubg]
+[gv_doc_command firstsupg]
+[gv_doc_command nextsupg]
+[gv_doc_command firstattr]
+[gv_doc_command nextattr]
+[gv_doc_command ok]
+.PP
+Miscellaneous:
+
+[gv_doc_command headof]
+[gv_doc_command tailof]
+[gv_doc_command nameof]
+[gv_doc_command findedge]
+[gv_doc_command findnode]
+[gv_doc_command findsubg]
+[gv_doc_command graphof]
+[gv_doc_command rootof]
+.PP
+Layout:
+
+[gv_doc_command layout]
+.PP
+Output:
+
+[gv_doc_command render]
+
+.SH BUGS
+
+.SH ACKNOWLEDGEMENTS
+
+.SH KEYWORDS
+
+graph, dot, neato, fdp, circo, twopi, $lang.
--- /dev/null
+#!/usr/bin/tclsh
+
+source gv_doc_langs.tcl
+
+set TEMPLATE gv_doc_template.tcl
+
+set fn gv.i
+set f [open $fn r]
+set t [read $f [file size $fn]]
+close $f
+
+regsub -all {.*%inline %\{} $t {} t
+regsub -all {%\}} $t {} t
+regsub -all {extern} $t {} t
+regsub -all {/\*.*?\*/} $t {} t
+regsub -all {//.*?} $t {} t
+
+foreach rec [split $t \n] {
+ set rec [string trim $rec " \t;)"]
+ if {[string length $rec] == 0} {continue}
+ set i 0
+ set params {}
+ foreach type_name [split $rec "(,"] {
+ set type_name [string trim $type_name]
+ regsub -all {[ \t]+(\**)} $type_name {\1 } type_name
+ foreach {type name} $type_name {break}
+ if {! $i} {
+ set func $name
+ set functype $type
+ } {
+ lappend params $type $name
+ }
+ incr i
+ }
+ lappend FUNC($func) $functype $params
+}
+
+proc gv_doc_synopsis {} {
+ global SYNOPSIS
+ return [join $SYNOPSIS "\n.br\n"]
+}
+
+proc gv_doc_usage {} {
+ global USAGE
+ return [join $USAGE "\n.P\n"]
+}
+
+proc gv_doc_command {cmd} {
+ global FUNC TYPES nameprefix paramstart paramsep paramend
+
+ set res {}
+ foreach {functype params} $FUNC($cmd) {
+ set par {}
+ foreach {paramtype param} $params {
+ if {[string length [array names TYPES -exact "$paramtype $param"]]} {
+ lappend par "$TYPES($paramtype $param)"
+ } {
+ lappend par "$TYPES($paramtype) $param"
+ }
+ }
+ if {[string length $TYPES($functype)]} {
+ lappend res "$TYPES($functype) \\fB$nameprefix$cmd\\fR $paramstart[join $par $paramsep]$paramend" .br
+ } {
+ lappend res "\\fB$nameprefix$cmd\\fR $paramstart[join $par $paramsep]$paramend" .br
+ }
+
+ }
+ return [join $res \n]
+}
+
+foreach lang [array names LANGS] {
+ array set PROPS $LANGS($lang)
+ array set TYPES $PROPS(TYPES)
+ foreach {nameprefix paramstart paramsep paramend} $PROPS(SYNTAX) {break}
+ set SYNOPSIS $PROPS(SYNOPSIS)
+ set USAGE $PROPS(USAGE)
+ set f [open gv_[set lang].man w]
+ set ft [open $TEMPLATE r]
+ puts $f [subst [read $ft [file size $TEMPLATE]]]
+ close $ft
+ close $f
+}