common sizeArray: remove platform-conditional struct code
08f481fa36bbf199e0f8fbf862639d8fc4e575ab made this initialization platform
dependent and its commit message does not explain why. Both statements are
equivalent; the value of `Agstrictdirected` _is_ `{ 1, 1, 0, 1 }`. This change
removes the Windows branch of this which was causing warnings under MinGW
12.2.0:
lib/common/htmltable.c:1472:5: error: missing initializer for field 'flatlock'
of 'Agdesc_t' {aka 'struct Agdesc_s'} [-Werror=missing-field-initializers]
1472 | Agdesc_t dir = { 1, 1, 0, 1 };
| ^~~~~~~~
In file included from lib/common/types.h:41,
from lib/common/render.h:29,
from lib/common/htmltable.c:32:
lib/cgraph/cgraph.h:166:14: note: 'flatlock' declared here
166 | unsigned flatlock:1; /* if sets are flattened into lists…
| ^~~~~~~~
neatogen print_bounding_box: use cgraph wrappers for allocation
The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.
neatogen OverlapSmoother_new: use cgraph wrappers for allocation
The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.
neatogen relative_position_constraints_new: use cgraph wrapper for allocation
The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.
neatogen get_overlap_graph: use cgraph wrappers for allocation
The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.
This macro was mistakenly not used when the
test_edge_node_overlap_all_primitive_edge_arrows,
test_edge_node_overlap_normal_and_inv_edge_arrows and
test_edge_node_overlap_normal_and_inv_edge_arrows_all_modifiers tests
were introduced.
This ensures that the generated artifact file names begin with the
same name as the test case file.
remove SWIG setup steps in Windows build preparation script
As discussed on Gitlab,¹ this Windows build script tries to discover SWIG, but
none of the Windows options for building Graphviz support compiling any of the
components that use SWIG.
sccmap: re-enable non-silent output when '-v' is passed
Unix command line tools generally have a “last option wins” kind of semantics,
wherein it is valid to pass options multiple times or in combination with other
options that do their opposite. Thus when calling `sccmap -S -v`, the user could
reasonably expect that `-v` (“verbose”) reversed the effect of `-S` (“silent”).
This is also what the man page implies. But this was not what the code was
doing.
The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.
gvpack: replace CDT pair dictionaries with 'std::multiset'
This is intended to be a non-functional change with a number of benefits:
1. This is C++ code, so no need for custom CDT data structures. The STL
equivalents are likely more optimized, better understood by the compiler,
and more familiar to human readers.
2. We avoid the lib/common allocation routines (`NEW` macro and friends). Now
allocation failures naturally propagate outwards as `std::bad_alloc`
exceptions without any custom handling.
3. Related to (2), we no longer need to manually free any of these objects.
RAII takes care of all of this.
gvpack: replace CDT attribute dictionaries with std::maps
This is intended to be a non-functional change with a number of benefits:
1. This is C++ code, so no need for custom CDT data structures. The STL
equivalents are likely more optimized, better understood by the compiler,
and more familiar to human readers.
2. We avoid the lib/common allocation routines (`NEW` macro and friends). Now
allocation failures naturally propagate outwards as `std::bad_alloc`
exceptions without any custom handling.
3. Related to (2), we no longer need to manually free any of these objects.
RAII takes care of all of this.
mm2gv makeDotGraph: use cgraph wrappers for allocation
The lib/cgraph/alloc.h wrappers are similar to the older lib/common/memory.h
wrappers except (1) they are header-only and (2) they live in a directory
(cgraph) that is at the root of the dependency tree. The long term plan is to
replace all use of lib/common/memory.h with lib/cgraph/alloc.h.
fix erroneous commas in JSON output of graphs with only clusters
When a graph or subgraph contained exclusively subnodes that were clusters (that
is, it contained a non-zero number of subnodes, but all of them were clusters),
the output of `-Tjson` would contain an extra comma. This malformed JSON could
not be ingested by most downstream parsers.
This appears to have been a mistake in f82c51fc9644047e9ce80d860fea562e98d3311c
that introduced cluster skipping in the loop that emits nodes in JSON. It did
not account for the earlier part of the containing function that was intended to
early-exit if the loop would have a 0 iteration count.
As noted in the discussion of #2282, a couple of the maintainers believe this
manual JSON writing code is inherently fragile and likely contains more latent
bugs. But we do not have maintainer consensus on migrating to an established
JSON-writing library. This fix attempts to surgically address the current known
bug. But I cannot guarantee it does not introduce others.