Graphviz Build Instructions for Windows

For building on Windows:

(Graphviz versions ≥ 2.41)

First, make sure that you've checked out the most recent branch via git. Don't download the repository via .zip or .tar.gz, as otherwise you'll need to add the git submodule(s) yourself. ('git init' in a folder, and then 'git clone https://gitlab.com/graphviz/graphviz.git')

Then, run 'git submodule update --init' in the root directory. This will download all submodules, which are mostly the dependencies for the Windows build.

You may need to add the ..\windows\dependencies\graphviz-build-utilities directory to your PATH environmental variable (and restart Visual Studio or the prompt with which you execute msbuild after that). This folder contains the tools Bison, Flex and SED (and future additions) with versions that are tested.

If all went right, the dependencies are now set up and you can build Graphviz.

Then browse to ..\graphviz\windows\getopt\ and open up getopt.vcxproj in Visual Studio. Building, for exaple, dot.exe is done by right-clicking dot in the solution explorer, and clicking build.

Then, in ..\graphviz\Debug\Graphviz\bin\ run 'dot.exe -c' to make a config file and everything should work.

(Graphviz versions ≥ 2.30)

The current build process for Windows using Visual Studio is fairly simple assuming all of the necessary files are available and have been put in the correct place. The build assumes you have installed binary versions of GTK 2.0 or later, Qt, and ltdl, and source versions of GTS and ann. Further instructions can be found in the Graphviz gitlab repository.

This whole process could and should be simplified. In particular, the 3rd-party software should not be stored in two places, and the Graphviz files that are made part of the release should come from the source package, and not be stored separately. In addition, the GTS and ANN build should be separate from the Graphviz build. As 3rd-party libraries, these should only be built when the source is updated.

(Graphviz versions ≥ 2.22)

We now build both Visual Studio and MinGW versions of Graphviz. In addition, the source package comes with project files for Visual Studio, so building from source should be fairly simple in either case.

Let $ROOT be the root directory (folder) in which you stored the Graphviz source.

Building with Visual Studio

  1. Copy the file $ROOT/windows/config.h into $ROOT.
  2. Copy the folder $ROOT/windows/FEATURE into $ROOT.
  3. Start Visual Studio and read in $ROOT/graphviz.sln. There are project files for all of the parts of Graphviz.
  4. Modify the various settings for include file and library directories to find the third-party software.
  5. Modify the settings as to where you want the software installed.
  6. Build Graphviz.

Building with MinGW

  1. Install MinGW and Msys. This gives a mini GNU-like compile environment
  2. Set environment variables based on your machine, giving values to the first six below:
    export INSTALLROOT           # Root install directory
    export GTKDIR                # Root of GTK tree
    export FONTCONFIGINCLUDEDIR  # Path of fontconfig include dir
    export FONTCONFIGLIBDIR      # Path of fontconfig lib dir
    export FREETYPEINCLUDEDIR    # Path of freetype2 include dir
    export FREETYPELIBDIR        # Path of freetype2 lib dir
    
    export CFLAGS="-DGVDLL=1"
    export CPPFLAGS="-I$GTKDIR/include -I$GTKDIR/include/freetype2 "
    export LDFLAGS="-L$GTKDIR/lib -no-undefined"
    export FONTCONFIG_CFLAGS=-I$GTKDIR/include/
    export FONTCONFIG_LIBS="-L$FONTCONFIGLIBDIR -lfontconfig"
    export FREETYPE2_CFLAGS=-I$FREETYPEINCLUDEDIR
    export FREETYPE2_LIBS=-L$FREETYPELIBDIR
    export PKG_CONFIG=$GTKDIR/bin/pkg-config
    export PKG_CONFIG_PATH=$GTKDIR/lib/pkgconfig
    
    export PANGOFLAGS="--with-fontconfig --with-fontconfiglibdir=$FONTCONFIGLIBDIR --with-fontconfigincludedir=$FONTCONFIGINCLUDEDIR --with-pangocairo"
    
    
  3. Change directory to $ROOT and run configure:
    ./configure -C --prefix=$INSTALLROOT --without-gdk-pixbuf --with-mylibgd --disable-swig --without-x  --disable-tcl --without-ipsepcola --enable-shared --disable-static --with-freetype=$GTKDIR/lib --enable-ltdl $PANGOFLAGS --without-gtk --without-gtkgl
    
    
    When configure finishes, it lists all of the Graphviz features that have been enabled. If there are problems, you can check for errors in config.log. You may have to add or modify other flags and environment variables for configure to give you the settings you want. Run configure --help to see the allowed options and environment variables.
  4. Run make
  5. Run make install
These builds create a feature-full version of Graphviz. You can tailor them to your wants. This is fairly simple for MinGW: just remove or reset the flag of the option you don't want. For Visual Studio, you will probably need to reset some of the values in config.h and some of the compile-time options.

(2.21 >= Graphviz versions > 2.14)

To simplify our build process, especially as most Windows users only want a binary version of the software, the Graphviz build for Windows now uses uwin, an open-source Unix layer on top of Windows. In this environment, we can use essentially the same tools and process used on Unix. In particular, we do not have to maintain multiple build files.

To build Graphviz:

  1. Install the third-party libraries. This is most easily done by installing a Windows binary verion of GTK 2.0 or later.
  2. Download the Graphviz source package:
    Go to http://www.graphviz.org/Download_source.php and copy over either the stable release graphviz-VERSION.tar.gz or the development source package graphviz-working.tar.gz.
  3. Unwrap the package:
    You can use, for example,

    gunzip < graphviz-working.tar.gz | tar xf -

    Let $ROOT be the directory in which you stored the Graphviz source.
  4. Configure the package for your system:

    cd $ROOT
    configure --disable-shared --enable-static --with-mylibgd --disable-swig --without-x --without-tclsh --with-codegens --disable-ltdl

    You will probably want to provide additional arguments to configure to indicate where you have installed GTK, where you want the results installed (--prefix) and which additional optional packages you want built. Run configure --help to see the available set of arguments.
  5. Build Graphviz:

    make install

Presumably, a similar approach would work with Cygwin or MinGW. The following are some notes by Steve Roush describing how he made a static build of the libraries on MinGW.

  • Install MinGW and Msys. This gives a mini GNU-like compile environment that produces Windows-compatible results.
  • You may need to configure and build in Windows "Safe mode". Try ./configure in normal mode; if it dies with "fork" problems, use Safe mode.
  • Edit the "configure" file.
    after this line:
    DEFS=-DHAVE_CONFIG_H
    add these lines:
        case "$host_os" in
         mingw*)
           DEFS="$DEFS -DMSWIN32"
           ;;
         esac
    
  • run configure:
       ./configure  --enable-static=yes --enable-shared=no 
    --prefix=/usr/local/ --with-libgd=no --enable-ltdl=no --disable-swig  
    --disable-sharp --disable-guile --disable-io --disable-java 
    --disable-lua --disable-ocaml --disable-perl --disable-php 
    --disable-python --disable-ruby --disable-tcl
    
  • edit lib/Makefile
    replace these lines:
     SUBDIRS = cdt graph agraph gd pathplan agutil sfio vmalloc ast vpsc \
         circogen dotgen fdpgen neatogen twopigen common pack gvc \
         ingraphs expr
    
    with these lines:
     SUBDIRS = cdt graph agraph gd pathplan  vpsc \
        circogen dotgen fdpgen neatogen twopigen common pack gvc \
        ingraphs
    
    make  # builds most of "lib" (see Makefile changes), cmd/dot and 
    cmd/tools - stops on cmd/gvpr
    make install
    
  • here is the command line I used to build "simple.c" (dot.demo/simple.c), after adding a few lines based on https://mailman.research.att.com/pipermail/graphviz-interest/2006q2/003586.html
    X=simple;gcc -v -I'/usr/local/include/graphviz' -I'/usr/local/include' 
    -o $X -O $X.c  -L/usr/local/lib -L/usr/local/lib/graphviz -lgvc  -lgraph 
    -lpathplan -lcdt -lgvplugin_core -lgvplugin_dot_layout 
    -lgvplugin_neao_layout -lgvplugin_gd -lgvplugin_pango -lgvc -lpathplan
    

    If you desire to build directly using Visual Studio or other non-Unix-based environment, you will need to derive the necessary information from the supplied Makefiles.


    (2.14 >= Graphviz versions >= 2.3)

    We build Graphviz on Windows using the MS Visual C++ 6.0 compiler only. The simplest way to build the software from source on Windows is as follows:

    1. Download the Windows source package from: http://www.graphviz.org/Download_windows.php.
    2. Unwrap the package:
      If you have Unix tools available, you can use gunzip < graphviz-win.tgz | tar xf -
      If not, double click on the file and WinZip should start up and let you store all of the files into a directory.
      Let $ROOT be the directory in which you stored the Graphviz source.
    3. Add the third-party libraries: The versions should be at least the ones indicated. You can download the files from http://www.graphviz.org/Misc/third-party.zip. Unzip the package in the $ROOT directory; this will create a subdirectory called third-party. Or you can obtain the libraries yourself, and install them in $ROOT\third-party Also note that these libraries come with the binary release.
    4. Build the software in one of the following ways:
      • Run the script $ROOT\build.bat while in the $ROOT directory. You'll first want to check that the vc variable points to your local installation of visual C. Obviously, this should be run in a DOS command window.
      • The file $ROOT\ws\graphviz.dsw is the main workspace for the Graphviz libraries and graph drawing programs. The file $ROOT\ws\tools.dsw provides the workspace for the additional Graphviz tools. Double-clicking on these files will open the workspaces using the MS Visual Studio, from which you can use the Build menu item to create the various libraries and programs. Note that we have avoided all dependencies (i.e., there are no .dep files) because we found they tended to include absolute pathnames. If necessary, follow the order used in build.bat to be safe.
      • If you have a Unix environment, with a real ksh, run the script $ROOT\wmake.sh after setting the PATH, LIB and INCLUDE shell variables to the paths where the Visual C programs are installed on your machine, and the associated library and include file directories.

    Once built, all of the libraries and programs will be found in either the Release or Debug subdirectory of the corresponding source directory. If you wish to install the software somewhere, edit the file $ROOT\install.bat to set the variable root to be the absolute pathname of the directory where you want the software installed, and then run the script $ROOT\install.bat from the $ROOT directory.

    If you want to change source files, you can just do it and rebuild. If, however, you want to add new files or projects, you will have to redo the makefiles or scripts.

    If you have problems or questions, please contact us at erg@research.att.com.