From d88096b80d9cbe5a02707b38e6c548ef1c43e156 Mon Sep 17 00:00:00 2001 From: ellson Date: Wed, 28 Nov 2007 01:55:22 +0000 Subject: [PATCH] first cut at a SWIG-based binding to R, currently disabled because the generated code doesn't compile --- configure.ac | 49 ++++++++++++++++++++++++++++---------- graphviz.spec.in | 27 ++++++++++++++++++++- tclpkg/gv/Makefile.am | 31 ++++++++++++++++++++++-- tclpkg/gv/gv_doc_langs.tcl | 20 ++++++++++++++++ 4 files changed, 111 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac index f136c85e4..ce604fa62 100644 --- a/configure.ac +++ b/configure.ac @@ -463,7 +463,7 @@ AC_ARG_ENABLE(sharp, if test "x$enable_sharp" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-csharp *- Generate'` = 0; then SHARP= - AC_MSG_WARN([swig does not support csharp. The SHARP packages will not be built]) + AC_MSG_WARN([swig does not support -csharp. The SHARP packages will not be built]) else AC_CHECK_PROG(SHARP,mcs,mcs) SHARP_INCLUDES= @@ -485,7 +485,7 @@ AC_ARG_ENABLE(guile, if test "x$enable_guile" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-guile *- Generate'` = 0; then GUILE= - AC_MSG_WARN([swig does not support guile. The GUILE packages will not be built]) + AC_MSG_WARN([swig does not support -guile. The GUILE packages will not be built]) else AC_CHECK_PROG(GUILE,guile,guile) if test "x$GUILE" != "x"; then @@ -529,7 +529,7 @@ AC_ARG_ENABLE(io, if test "x$enable_io" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-io *- Generate'` = 0; then IO= - AC_MSG_WARN([swig does not support io. The IO packages will not be built]) + AC_MSG_WARN([swig does not support -io. The IO packages will not be built]) else AC_CHECK_PROG(IO,io,io) IO_INCLUDES= @@ -551,7 +551,7 @@ AC_ARG_ENABLE(java, if test "x$enable_java" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-java *- Generate'` = 0; then JAVA= - AC_MSG_WARN([swig does not support java. The JAVA packages will not be built]) + AC_MSG_WARN([swig does not support -java. The JAVA packages will not be built]) else AC_CHECK_PROG(JAVA,java,java) JAVA_INCLUDES= @@ -577,7 +577,7 @@ AC_ARG_ENABLE(lua, if test "x$enable_lua" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-lua *- Generate'` = 0; then LUA= - AC_MSG_WARN([swig does not support lua. The LUA packages will not be built]) + AC_MSG_WARN([swig does not support -lua. The LUA packages will not be built]) enable_lua=no fi fi @@ -718,7 +718,7 @@ AC_ARG_ENABLE(ocaml, if test "x$enable_ocaml" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-ocaml *- Generate'` = 0; then OCAML= - AC_MSG_WARN([swig does not support ocaml. The OCAML packages will not be built]) + AC_MSG_WARN([swig does not support -ocaml. The OCAML packages will not be built]) else AC_CHECK_PROG(OCAML,ocaml,ocaml) AC_CHECK_PROG(OCAML_OPT,ocamlopt,ocamlopt) @@ -754,7 +754,7 @@ if test -n "$PERL" && $PERL -e 'exit !($] <= 5.004)' > /dev/null 2>&1 ; then fi if test `$SWIG -help 2>&1 | $GREP -c '\-perl *- Generate'` = 0; then PERL= - AC_MSG_WARN([swig does not support perl. The PERL packages will not be built]) + AC_MSG_WARN([swig does not support -perl. The PERL packages will not be built]) fi if test "x$PERL" != "x"; then PERL_ARCHLIB=`$PERL -e 'use Config; print $Config{archlib};'` @@ -784,7 +784,7 @@ AC_ARG_ENABLE(php, if test "x$enable_php" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-php5[[ ]]*- Generate'` = 0; then PHP= - AC_MSG_WARN([swig does not support php5. The PHP packages will not be built]) + AC_MSG_WARN([swig does not support -php5. The PHP packages will not be built]) else AC_CHECK_PROG(PHP,php,php) if test -d /usr/include/php5; then @@ -817,7 +817,7 @@ AC_ARG_ENABLE(python, if test "x$enable_python" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-python *- Generate'` = 0; then PYTHON= - AC_MSG_WARN([swig does not support python. The PYTHON packages will not be built]) + AC_MSG_WARN([swig does not support -python. The PYTHON packages will not be built]) else AC_CHECK_PROG(PYTHON,python,python) if test "x$PYTHON" != "x"; then @@ -870,7 +870,7 @@ AC_ARG_ENABLE(python23, if test "x$enable_python23" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-python *- Generate'` = 0; then PYTHON23= - AC_MSG_WARN([swig does not support python23. The PYTHON23 packages will not be built]) + AC_MSG_WARN([swig does not support -python. The PYTHON23 packages will not be built]) else AC_CHECK_PROG(PYTHON23,python2.3,python2.3) if test "x$PYTHON23" != "x"; then @@ -923,7 +923,7 @@ AC_ARG_ENABLE(python24, if test "x$enable_python24" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-python *- Generate'` = 0; then PYTHON24= - AC_MSG_WARN([swig does not support python24. The PYTHON24 packages will not be built]) + AC_MSG_WARN([swig does not support -python. The PYTHON24 packages will not be built]) else AC_CHECK_PROG(PYTHON24,python2.4,python2.4) if test "x$PYTHON24" != "x"; then @@ -976,7 +976,7 @@ AC_ARG_ENABLE(python25, if test "x$enable_python25" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-python *- Generate'` = 0; then PYTHON25= - AC_MSG_WARN([swig does not support python25. The PYTHON25 packages will not be built]) + AC_MSG_WARN([swig does not support -python. The PYTHON25 packages will not be built]) else AC_CHECK_PROG(PYTHON25,python2.5,python2.5) if test "x$PYTHON25" != "x"; then @@ -1019,6 +1019,29 @@ fi fi AM_CONDITIONAL(WITH_PYTHON25, [test "x$PYTHON25" != "x"]) +dnl ----------------------------------- +dnl INCLUDES and LIBS for R (disabled for now - swig generated gv_r.cpp doesn't compile) + +if test "x$SWIG" != "x"; then +AC_ARG_ENABLE(r, + [AC_HELP_STRING([--enable-r=no], [R language bindings])], + [], [enable_r=no]) +if test "x$enable_r" = "xyes"; then +if test `$SWIG -help 2>&1 | $GREP -c '\-r *- Generate'` = 0; then + AC_MSG_WARN([swig does not support -r. The R packages will not be built]) +else +PKG_CHECK_MODULES(R, [libR], + [R=1], + [AC_MSG_WARN(R library not available.)]) + + +fi +fi +fi +AC_SUBST(R_CFLAGS) +AC_SUBST(R_LIBS) +AM_CONDITIONAL(WITH_R, [test "x$R" != "x"]) + dnl ----------------------------------- dnl INCLUDES and LIBS for RUBY @@ -1029,7 +1052,7 @@ AC_ARG_ENABLE(ruby, if test "x$enable_ruby" = "xyes"; then if test `$SWIG -help 2>&1 | $GREP -c '\-ruby *- Generate'` = 0; then RUBY= - AC_MSG_WARN([swig does not support ruby. The RUBY packages will not be built]) + AC_MSG_WARN([swig does not support -ruby. The RUBY packages will not be built]) else AC_CHECK_PROG(RUBY,ruby,ruby) if test "x$RUBY" != "x"; then diff --git a/graphviz.spec.in b/graphviz.spec.in index 23a5bfab7..fb97f3f9c 100644 --- a/graphviz.spec.in +++ b/graphviz.spec.in @@ -38,6 +38,7 @@ Prefix: /usr %define PHP 0 %define PYTHON 0 %define RUBY 0 +%define R_LANG 0 %define TCL 1 %define IPSEPCOLA --without-ipsepcola %define MYLIBGD --with-mylibgd @@ -145,6 +146,10 @@ BuildRequires: cairo-devel >= 1.1.10 pango-devel gmp-devel lua-devel gtk2-devel %define GDK_PIXBUF --with-gdk-pixbuf BuildRequires: gd gd-devel perl-devel DevIL-devel %endif +%if "%fedora" >= "8" +#define R_LANG 1 +#BuildRequires: R +%endif %if "%fedora" >= "9" %define MING 1 BuildRequires: ming ming-devel @@ -415,6 +420,23 @@ Python extension for graphviz. %{_mandir}/mann/gv_python.n* %endif +#-- graphviz-r rpm --------------------------------------------- +%if %{R_LANG} +%package r +Group: Applications/Multimedia +Summary: R extension for graphviz +Requires: graphviz = %{version}-%{release} r + +%description r +R extension for graphviz. + +%files r +%defattr(-,root,root,-) +%dir %{_libdir}/graphviz/r +%{_libdir}/graphviz/r/* +%{_mandir}/mann/gv_r.n* +%endif + #-- graphviz-ruby rpm --------------------------------------------- %if %{RUBY} %package ruby @@ -533,6 +555,9 @@ Provides some additional PDF and HTML documentation for graphviz. %if ! %{PYTHON} %define NO_PYTHON --disable-python %endif +%if ! %{R_LANG} +%define NO_R_LANG --disable-r +%endif %if ! %{RUBY} %define NO_RUBY --disable-ruby %endif @@ -562,7 +587,7 @@ CFLAGS="$RPM_OPT_FLAGS" \ --disable-static \ --disable-dependency-tracking \ %{MYLIBGD} %{IPSEPCOLA} %{PANGOCAIRO} %{GDK_PIXBUF} \ - %{?NO_SHARP} %{?NO_GUILE} %{?NO_IO} %{?NO_JAVA} %{?NO_LUA} %{?NO_OCAML} %{?NO_PERL} %{?NO_PHP} %{?NO_PYTHON} %{?NO_RUBY} %{?NO_TCL} %{?NO_DEVIL} %{?NO_MING} + %{?NO_SHARP} %{?NO_GUILE} %{?NO_IO} %{?NO_JAVA} %{?NO_LUA} %{?NO_OCAML} %{?NO_PERL} %{?NO_PHP} %{?NO_PYTHON} %{?NO_R_LANG} %{?NO_RUBY} %{?NO_TCL} %{?NO_DEVIL} %{?NO_MING} make %{?_smp_mflags} %install diff --git a/tclpkg/gv/Makefile.am b/tclpkg/gv/Makefile.am index 5c9185e8c..5902ec2b8 100644 --- a/tclpkg/gv/Makefile.am +++ b/tclpkg/gv/Makefile.am @@ -9,7 +9,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/lib/common \ -I$(top_srcdir)/lib/graph \ -I$(top_srcdir)/lib/cdt \ - -I$(top_srcdir)/lib/pathplan $(PERL_INCLUDES) $(OCAML_INCLUDES) $(PHP_INCLUDES) $(PYTHON_INCLUDES) $(RUBY_INCLUDES) $(TCL_INCLUDES) $(LUA_INCLUDES) $(GUILE_INCLUDES) + -I$(top_srcdir)/lib/pathplan $(GUILE_INCLUDES) $(LUA_INCLUDES) $(OCAML_INCLUDES) $(PERL_INCLUDES) $(PHP_INCLUDES) $(PYTHON_INCLUDES) $(R_CFLAGS) $(RUBY_INCLUDES) $(TCL_INCLUDES) LIBS = @LIBS@ -lc @@ -145,6 +145,16 @@ libgv_python25_la_SOURCES = $(BASESOURCES) gv_dummy_init.cpp libgv_python25_la_LIBADD = $(BASELIBS) @PYTHON25_LIBS@ libgv_python25_la_LDFLAGS = -module -avoid-version +pkgrdir = $(pkglibdir)/r +R_data = +nodist_libgv_r_la_SOURCES = gv_r.cpp $(R_data) +libgv_r_la_SOURCES = $(BASESOURCES) gv_dummy_init.cpp +libgv_r_la_LIBADD = $(BASELIBS) @R_LIBS@ +libgv_r_la_LDFLAGS = -module -avoid-version +$(R_data): gv_r.cpp +gv_r.cpp: gv.i + $(SWIG) -c++ -r -o gv_r.cpp $(srcdir)/gv.i + pkgrubydir = $(pkglibdir)/ruby RUBY_data = nodist_libgv_ruby_la_SOURCES = gv_ruby.cpp $(RUBY_data) @@ -255,6 +265,13 @@ man_MANS += gv_python.n pkgpython25_LTLIBRARIES = libgv_python25.la #DEVTSTS += test_python25 endif +if WITH_R +pkgr_DATA = $(R_data) +man_MANS += gv_r.n +#pdf_DATA += gv_r.pdf +pkgr_LTLIBRARIES = libgv_r.la +DEVTSTS += test_r +endif if WITH_RUBY pkgruby_DATA = $(RUBY_data) man_MANS += gv_ruby.n @@ -277,7 +294,7 @@ endif endif man = gv_sharp.n gv_guile.n gv_io.n gv_java.n gv_lua.n gv_ocaml.n \ - gv_perl.n gv_php.n gv_python.n gv_ruby.n gv_tcl.n + gv_perl.n gv_php.n gv_python.n gv_r.n gv_ruby.n gv_tcl.n #pdf = gv_sharp.pdf gv_guile.pdf gv_io.pdf gv_java.pdf gv_lua.pdf gv_ocaml.pdf \ # gv_perl.pdf gv_php.pdf gv_python.pdf gv_ruby.pdf gv_tcl.pdf @@ -295,6 +312,7 @@ install-data-hook: (cd $(DESTDIR)$(pkgpython23dir); rm -f _gv.so; $(LN_S) libgv_python23.so _gv.so;) (cd $(DESTDIR)$(pkgpython24dir); rm -f _gv.so; $(LN_S) libgv_python24.so _gv.so;) (cd $(DESTDIR)$(pkgpython25dir); rm -f _gv.so; $(LN_S) libgv_python25.so _gv.so;) + (cd $(DESTDIR)$(pkgrdir); rm -f gv.so; $(LN_S) libgv_r.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;) @@ -305,6 +323,7 @@ uninstall-hook: (cd $(DESTDIR)$(pkgpython23dir); rm -f _gv.so;) (cd $(DESTDIR)$(pkgpython24dir); rm -f _gv.so;) (cd $(DESTDIR)$(pkgpython25dir); rm -f _gv.so;) + (cd $(DESTDIR)$(pkgrdir); rm -f gv.so;) (cd $(DESTDIR)$(pkgrubydir); rm -f gv.so;) (cd $(DESTDIR)$(pkgtcldir); rm -f gv.so;) @@ -377,6 +396,13 @@ test_python: libgv_python.la ln -fs ../$(srcdir)/*.dot ../$(srcdir)/*.py .; \ PYTHONPATH=. $(PYTHON) test.py) +.PHONY: test_r +test_r: libgv_r.la + -(mkdir -p test_r; cd test_r; \ + ln -fs ../.libs/libgv_ruby.so gv.so; \ + ln -fs ../$(srcdir)/*.dot ../$(srcdir)/*.rb .; \ + $(R) test.rb) + .PHONY: test_ruby test_ruby: libgv_ruby.la -(mkdir -p test_ruby; cd test_ruby; \ @@ -406,6 +432,7 @@ CLEANFILES = test_*/* pkgIndex.tcl \ gv_python23.cpp $(PYTHON23_data) gv.pyc \ gv_python24.cpp $(PYTHON24_data) gv.pyc \ gv_python25.cpp $(PYTHON25_data) gv.pyc \ + gv_r.cpp $(R_data) \ gv_ruby.cpp $(RUBY_data) \ gv_tcl.cpp $(TCL_data) pkgIndex.tcl diff --git a/tclpkg/gv/gv_doc_langs.tcl b/tclpkg/gv/gv_doc_langs.tcl index 640fb2a5a..f2649fa71 100644 --- a/tclpkg/gv/gv_doc_langs.tcl +++ b/tclpkg/gv/gv_doc_langs.tcl @@ -324,6 +324,26 @@ array set LANGS { USAGE { } } + r { + 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 {} + } + SYNTAX { + gv. ( {, } {);} + } + SYNOPSIS { + {System.loadLibrary("gv");} + } + USAGE { + } + } ruby { TYPES { {Agraph_t* g} graph_handle -- 2.50.1