On some ports the default_* options are handled incorrectly, building an invalid command line for dot.
I researched the problem and it is caused by subprocess.Popen() implementation on Unix platforms.
The code that builds the command line (graphviz.py:382...393) concatenates all filtered ini file options into a single string. Later it is passed as a single subprocess argument. On Posix this will be interpreted as a single argument and causes errors such as "Could not find/open font".
Another problem related to this occurs, when you don't specify any default_ options in your ini file. In this case an empty argument is passed to the dot executable, which returns an error.
Proposed FIX
To fix the problem self.processor_options datatype should be changed to list and all occurrences revised (graphviz.py:182,185,209,225,237,382...393).
Line 182
sha_text = self.processor.encode(encoding) + u''.join(self.processor_options).encode(encoding) + content
Line 185
sha_text = self.processor + ''.join(self.processor_options) + content
Line 209
cmd = [proc_cmd]
cmd += self.processor_options
cmd += ['-Tsvg', '-o%s.svg' % img_path]
Line 225
cmd = [proc_cmd]
cmd += self.processor_options
cmd += ['-T%s' % self.out_format, '-o%s' % img_path]
Line 237
cmd = [proc_cmd]
cmd += self.processor_options
cmd += ['-Tcmap', '-o%s' % map_path]
Lines 382...393
self.processor_options = []
default_attributes = [ o for o in self.config.options('graphviz') if o[0].startswith('default_') ]
if default_attributes:
graph_attributes = [ o for o in default_attributes if o[0].startswith('default_graph_') ]
node_attributes = [ o for o in default_attributes if o[0].startswith('default_node_') ]
edge_attributes = [ o for o in default_attributes if o[0].startswith('default_edge_') ]
if graph_attributes:
self.processor_options += [ "-G" + o[0].replace('default_graph_', '') + "=" + o[1] for o in graph_attributes]
if node_attributes:
self.processor_options += [ "-N" + o[0].replace('default_node_', '') + "=" + o[1] for o in node_attributes]
if edge_attributes:
self.processor_options += [ "-E" + o[0].replace('default_edge_', '') + "=" + o[1] for o in edge_attributes]