Name Mode Size
..
patches_2.28.0 040000
README 100644 4 kb
THANKS 100644 1 kb
build_graphviz_mingw.sh 100755 5 kb
find_includes.sh 100755 1 kb
slim_graphviz_2.28.0.sh 100755 1 kb
README
Building Rgraphviz ================== We now bundle Graphviz together with Rgraphviz. Building Rgraphviz consists of (for Linux and OS X) - running configure and make in Rgraphviz/src/graphviz - install into Rgraphviz/src/usr - copy files from Rgraphviz/src/usr and subdirs into Rgraphviz/src We build Rgraphviz statically, and we build in the source directory (experiments have shown that Graphviz cannot really be build in a separate build directory). For Windows, we provide pre-build static libraries, included in Rgraphviz/src/libwin/ARCH with ARCH being i386 and x64. Preparing Graphviz for inclusion into Rgraphviz =============================================== In order to bundled Graphviz with Rgraphviz, two tasks needs to be accomplished 1) Removal of unnecessary components (slimming) of Graphviz 2) Building static libraries under MinGW. Slimming Graphviz ================= This is accomplished using the script slim_graphviz_2.28.0.sh It requires a source tarball (graphviz-2.28.0.tar.gz) obtained from www.graphviz.org. Graphviz itself consists of the main layout routines, a number of rendering routines and finally the command line tools. We only need the layout routines for Rgraphviz, and by remocing the rendering routines and command line tools, we minimize the number of dependencies (and of things going wrong). The code is organized as a number of subdirectories of lib. Each subdirectory contains either part of, or a complete library or command line tools. In order to remove the subdirectories we need to identify which subdirectories are needed (non-trivial) and then remove any mention of them from the configure.ac script and the Makefile.am scripts. This is done by patching the source code using graphviz-2.28.0-slim.patch. After we have removed the mention of these subdirectories from configure.ac and the various Makefile.am, we also physically remove the subdirectories in order to reduce file size. After this is done, we use the tool autoreconf to regenerate Makefile.in's from Makefile.am's. This tools requires both autoconf (at least 2.65) and automake. I have been using autoconf 2.69 and automake 1.12.1 and both of these tools are straightforward to install (at least under OS X Lion). Finally we patch Graphviz 2.28.0 in order to fix a couple of bugs (that have been fixed in the devel version of Graphviz). Patches are contained in graphviz-2.28.0-bugs.patch. After the script finishes, the resulting graphviz-2.28.0 tree is ready to be copied into Rgraphviz/src (rename it from graphviz-2.28.0 to graphviz), like cp -R graphviz-2.28.0/* Rgraphviz/src/graphviz Building Windows DLLs ===================== We need to build Graphviz as a static library using MinGW. As an added complication we want to use the compilers the R project provides in Rtools, but we also need the rest of the MinGW environment. For the first round of development I used Rtools215.exe mingw-get-inst-20111118.exe although I believe newer sets of tools should be fine. Both MinGW and Rtools need to be installed. The build script is build_graphviz_mingw.sh At the top of, a number of variables are set, giving the location of R, two bin dirs from Rtootls, two bin dirs from MinGW and the location of Rgraphviz. The first part of the build_graphviz_mingw.sh script uses 'R CMD config' to grab relevant variables from R in order to feed them to the configure script from Graphviz. Next, Graphviz is patched and build. This is happening for both i386 and x64. The end result is contained in libwin, which can be copied into Rgraphviz/src. Lessons ======= The following section contains some notes on things we have had to deal with, in the hope that it may be helpful to solve future problems.