]> granicus.if.org Git - graphviz/log
graphviz
3 years agoreplace 1-byte strstr calls with strchr
Matthew Fernandez [Fri, 16 Jul 2021 03:44:04 +0000 (20:44 -0700)]
replace 1-byte strstr calls with strchr

This change has no effect on functionality, but strchr is cheaper to call and
equivalent to these strstr calls. This likely makes no difference in an
optimized build as modern compilers can see this transformation is possible
themselves. However, this change may assist older compilers or accelerate
unoptimized builds.

3 years agoremove unnecessary INT32_MAX definition
Matthew Fernandez [Fri, 16 Jul 2021 03:42:05 +0000 (20:42 -0700)]
remove unnecessary INT32_MAX definition

All currently supported environments define this in stdint.h.

3 years agoremove unused UINT32_MAX definition
Matthew Fernandez [Fri, 16 Jul 2021 03:41:04 +0000 (20:41 -0700)]
remove unused UINT32_MAX definition

All currently supported environments define this constant in stdint.h. But it
was not being used in this file anyway.

3 years agoremove redundant #include
Matthew Fernandez [Fri, 16 Jul 2021 03:37:33 +0000 (20:37 -0700)]
remove redundant #include

It is unnecessary to include stddef.h if you are including stdlib.h.

3 years agoMerge branch 'smattr/e2b47b18-64c6-46f9-9ebe-57f338c3b2fc' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 20:49:28 +0000 (20:49 +0000)]
Merge branch 'smattr/e2b47b18-64c6-46f9-9ebe-57f338c3b2fc' into 'main'

fix: remove hard limit of 1000 boxes in dot spline code

Closes #2095

See merge request graphviz/graphviz!2050

3 years agofix: remove hard limit of 1000 boxes in dot spline code
Matthew Fernandez [Mon, 12 Jul 2021 00:38:45 +0000 (17:38 -0700)]
fix: remove hard limit of 1000 boxes in dot spline code

The dot spline code used a static array of 1000 box data structures. It is not
clear to me why this limit was thought to be enough. I suspect the limit (added
in the initial Graphviz revision) was just thought to be something sufficiently
large that no user would ever hit it.

This is no longer true. The graph in issue #2095 exceeds this limit. Because
there are no bounds checks when moving through the boxes array, this resulted in
a crash due to a write beyond the end of the array.

In this commit, we remove this limit entirely and instead use a dynamically
allocated expanding array of boxes. This permits handling an arbitrary number of
boxes during computation. Fixes #2095.

3 years agomake_flat_edge: use a local box array instead of the global boxes
Matthew Fernandez [Mon, 12 Jul 2021 00:00:40 +0000 (17:00 -0700)]
make_flat_edge: use a local box array instead of the global boxes

The values written to this array during make_flat_edge do not need to be
retained after the function returns. It was simply using the boxes as scratch
space. Using a local array instead makes it easier for the compiler to optimize
and will ease some upcoming changes. Related to #2095.

This introduces a new -Wshadow compiler warning, but that will be removed in a
future commit.

3 years agomake_flat_bottom_edges: use a local box array instead of the global boxes
Matthew Fernandez [Sun, 11 Jul 2021 23:57:14 +0000 (16:57 -0700)]
make_flat_bottom_edges: use a local box array instead of the global boxes

The values written to this array during make_flat_bottom_edges do not need to be
retained after the function returns. It was simply using the boxes as scratch
space. Using a local array instead makes it easier for the compiler to optimize
and will ease some upcoming changes. Related to #2095.

This introduces a new -Wshadow compiler warning, but that will be removed in a
future commit.

3 years agomake_flat_labeled_edge: use a local box array instead of the global boxes
Matthew Fernandez [Sun, 11 Jul 2021 23:37:16 +0000 (16:37 -0700)]
make_flat_labeled_edge: use a local box array instead of the global boxes

The values written to this array during make_flat_labeled_edge do not need to be
retained after the function returns. It was simply using the boxes as scratch
space. Using a local array instead makes it easier for the compiler to optimize
and will ease some upcoming changes. Related to #2095.

This introduces a new -Wshadow compiler warning, but that will be removed in a
future commit.

3 years agoadd a test case for #2095
Matthew Fernandez [Mon, 12 Jul 2021 00:44:20 +0000 (17:44 -0700)]
add a test case for #2095

3 years agoMerge branch 'smattr/d9d50ca2-985b-4441-8273-68f407feeb8b' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 19:50:45 +0000 (19:50 +0000)]
Merge branch 'smattr/d9d50ca2-985b-4441-8273-68f407feeb8b' into 'main'

add a warning when using layout on a non-graph, #2078

Closes #2078

See merge request graphviz/graphviz!2041

3 years agoremove some unnecessary bracketing
Matthew Fernandez [Thu, 8 Jul 2021 04:28:58 +0000 (21:28 -0700)]
remove some unnecessary bracketing

3 years agoadd a warning message when using layout on a non-graph
Matthew Fernandez [Thu, 8 Jul 2021 04:18:23 +0000 (21:18 -0700)]
add a warning message when using layout on a non-graph

Closes #2078.

3 years agoextend #2078 test case to ensure correct layout usage works
Matthew Fernandez [Sat, 10 Jul 2021 16:18:51 +0000 (09:18 -0700)]
extend #2078 test case to ensure correct layout usage works

3 years agoupdate #2078 test case to expect a warning
Matthew Fernandez [Thu, 8 Jul 2021 04:23:37 +0000 (21:23 -0700)]
update #2078 test case to expect a warning

As I look into how to resolve this issue, I realize it does not make sense to
look for mention of a subgraph because the layout attribute is invalid on *all*
entities except graphs. That is, the error/warning should just say it is only
valid for graphs. Related to #2078.

3 years agoremove unnecessary casts of string table entries
Matthew Fernandez [Thu, 8 Jul 2021 04:11:57 +0000 (21:11 -0700)]
remove unnecessary casts of string table entries

The right hand side of these expressions are already char pointers.

3 years agorewrite streq as a function and remove micro-optimization
Matthew Fernandez [Thu, 8 Jul 2021 04:07:51 +0000 (21:07 -0700)]
rewrite streq as a function and remove micro-optimization

There is no need for this to be a macro or for it to check the first character
explicitly. Modern compilers can do this kind of optimization themselves.

3 years agoremove commented out assertion
Matthew Fernandez [Thu, 8 Jul 2021 03:38:22 +0000 (20:38 -0700)]
remove commented out assertion

I do not know why the comment says it is surprising the assertion fails. It
seems perfectly normal to me that it would fail, as the correct condition is
against *both* AGINEDGE and AGOUTEDGE as in the following line.

3 years agoremove unhelpful comment
Matthew Fernandez [Thu, 8 Jul 2021 03:15:36 +0000 (20:15 -0700)]
remove unhelpful comment

It does not seem to aid understanding this code to know John Ellson and someone
known as GN requested it.

3 years agoMerge branch 'smattr/cbbcfbb8-167d-442f-ad12-962871e79e90' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 01:18:06 +0000 (01:18 +0000)]
Merge branch 'smattr/cbbcfbb8-167d-442f-ad12-962871e79e90' into 'main'

make some char pointer parameters to cgraph functions const

See merge request graphviz/graphviz!2044

3 years agorewrite is_id_char macro as a function
Matthew Fernandez [Sun, 4 Jul 2021 04:31:39 +0000 (21:31 -0700)]
rewrite is_id_char macro as a function

There is no need for this to be a macro. Making it a function allows stronger
type safety, safe to use with impure arguments, and reduces bracketing noise.

3 years agoremove use of an unsigned char in _agstrcanon
Matthew Fernandez [Sun, 4 Jul 2021 04:29:20 +0000 (21:29 -0700)]
remove use of an unsigned char in _agstrcanon

As far as I can see, nothing in this function depends on uc being unsigned.
Making it a standard char reduces some cast noise.

3 years agotake a const pointer as the first argument to agcanonhtmlstr
Matthew Fernandez [Sun, 4 Jul 2021 04:18:44 +0000 (21:18 -0700)]
take a const pointer as the first argument to agcanonhtmlstr

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in getoutputbuffer
Matthew Fernandez [Sun, 4 Jul 2021 04:17:21 +0000 (21:17 -0700)]
take a const pointer in getoutputbuffer

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agoremove now unnecessary cast of a parameter to an agstrfree call
Matthew Fernandez [Sun, 4 Jul 2021 04:16:24 +0000 (21:16 -0700)]
remove now unnecessary cast of a parameter to an agstrfree call

Related to #634.

3 years agotake a const pointer in agstrfree
Matthew Fernandez [Sun, 4 Jul 2021 04:15:22 +0000 (21:15 -0700)]
take a const pointer in agstrfree

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in agstrbind
Matthew Fernandez [Sun, 4 Jul 2021 04:09:18 +0000 (21:09 -0700)]
take a const pointer in agstrbind

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in refstrbind
Matthew Fernandez [Sun, 4 Jul 2021 04:04:05 +0000 (21:04 -0700)]
take a const pointer in refstrbind

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in aghtmlstr
Matthew Fernandez [Sun, 4 Jul 2021 04:02:04 +0000 (21:02 -0700)]
take a const pointer in aghtmlstr

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in agstrdup_html
Matthew Fernandez [Sun, 4 Jul 2021 03:55:21 +0000 (20:55 -0700)]
take a const pointer in agstrdup_html

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agoremove now unnecessary cast of a parameter to an agstrdup call
Matthew Fernandez [Sun, 4 Jul 2021 03:47:00 +0000 (20:47 -0700)]
remove now unnecessary cast of a parameter to an agstrdup call

Related to #634.

3 years agotake a const pointer in agstrdup
Matthew Fernandez [Sun, 4 Jul 2021 03:45:02 +0000 (20:45 -0700)]
take a const pointer in agstrdup

This function does not modify its string argument, so it is more accurate to
qualify it as const. Related to #634.

3 years agotake a const pointer in refsymbind
Matthew Fernandez [Sun, 4 Jul 2021 03:37:10 +0000 (20:37 -0700)]
take a const pointer in refsymbind

This is preparation for accepting const pointers in the agstrdup functions.
Related to #634.

3 years agoMerge branch 'smattr/0b95f0d8-6fc3-4b7f-85e0-f6a2fbdee4f6' into 'main'
Matthew Fernandez [Sun, 18 Jul 2021 00:24:54 +0000 (00:24 +0000)]
Merge branch 'smattr/0b95f0d8-6fc3-4b7f-85e0-f6a2fbdee4f6' into 'main'

agrefstrdump: dump dictionary associated with the current graph, not default

Closes #1985

See merge request graphviz/graphviz!2047

3 years agoagrefstrdump: dump dictionary associated with the current graph, not default
Matthew Fernandez [Sat, 10 Jul 2021 16:51:57 +0000 (09:51 -0700)]
agrefstrdump: dump dictionary associated with the current graph, not default

It looks like a mistake that this function was ignoring its input argument and
always dumping the default string dictionary. This change makes the function
dump the string dictionary associated with the passed graph. This function is
only compiled in when DEBUG is defined and it is not exposed to users, so no
changelog entry for this. Fixes #1985.

3 years agoMerge branch 'smattr/6a348cdc-bade-4d57-ba72-d23352ae5692' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 21:19:28 +0000 (21:19 +0000)]
Merge branch 'smattr/6a348cdc-bade-4d57-ba72-d23352ae5692' into 'main'

CMake: move -Wextra enabling to the top level

See merge request graphviz/graphviz!2046

3 years agoCMake: remove unnecessary C++ -Wextra addition in tests/
Matthew Fernandez [Sat, 10 Jul 2021 16:34:45 +0000 (09:34 -0700)]
CMake: remove unnecessary C++ -Wextra addition in tests/

This is now set at the top level.

3 years agoCMake: enable -Wextra for C++
Matthew Fernandez [Sat, 10 Jul 2021 16:34:12 +0000 (09:34 -0700)]
CMake: enable -Wextra for C++

This does not seem to trigger any additional warnings.

3 years agoMerge branch 'smattr/ed045d7d-d4fa-44d4-8028-c38121b4df0c' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 20:21:02 +0000 (20:21 +0000)]
Merge branch 'smattr/ed045d7d-d4fa-44d4-8028-c38121b4df0c' into 'main'

SparseMatrix_copy: avoid calling memcpy with null pointers

See merge request graphviz/graphviz!2049

3 years agoSparseMatrix_copy: avoid calling memcpy with null pointers
Matthew Fernandez [Sun, 11 Jul 2021 18:49:20 +0000 (11:49 -0700)]
SparseMatrix_copy: avoid calling memcpy with null pointers

The memcpy function technically requires both its pointer inputs to be non-null.
There is no special case for the length being 0. When running the example from
#2088 under UBSan, it detects this memcpy call as being performed with both null
source and destination pointers. It is unlikely any real world memcpy would
misbehave in this circumstance, but it is still good practice to avoid this.

3 years agoMerge branch 'smattr/7f6d376d-f48e-411e-bd4d-24d3e415d764' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 19:23:44 +0000 (19:23 +0000)]
Merge branch 'smattr/7f6d376d-f48e-411e-bd4d-24d3e415d764' into 'main'

SWIG bindings warning squashing

See merge request graphviz/graphviz!2048

3 years agodisable -Wunused-parameter when building SWIG-generated Guile bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:57:05 +0000 (19:57 -0700)]
disable -Wunused-parameter when building SWIG-generated Guile bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 68 compiler warnings.

3 years agoremove commented out code
Matthew Fernandez [Sun, 11 Jul 2021 02:50:20 +0000 (19:50 -0700)]
remove commented out code

3 years agodeal exclusively in size_t in Java bindings support code
Matthew Fernandez [Sun, 11 Jul 2021 02:42:24 +0000 (19:42 -0700)]
deal exclusively in size_t in Java bindings support code

In this code, committed in c7374588519a7ac557c14b38c147623dedf43fdb in 2014, it
is not clear to me why int was used. The correct type for these kind of
operations is size_t. The size_t type has been available since at least 1995, if
not earlier depending on your toolchain. Squashes 3
-Wsign-conversion/-Wconversion warnings.

3 years agodisable -Wunused-variable when building SWIG-generated OCaml bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:35:01 +0000 (19:35 -0700)]
disable -Wunused-variable when building SWIG-generated OCaml bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 112 compiler warnings.

3 years agodisable -Wunused-function when building SWIG-generated OCaml bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:28:50 +0000 (19:28 -0700)]
disable -Wunused-function when building SWIG-generated OCaml bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 24 compiler warnings.

3 years agosquash some -Wunused-parameter warnings in PHP bindings support code
Matthew Fernandez [Sun, 11 Jul 2021 02:20:34 +0000 (19:20 -0700)]
squash some -Wunused-parameter warnings in PHP bindings support code

3 years agodisable -Wunused-label when building SWIG-generated PHP bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:18:22 +0000 (19:18 -0700)]
disable -Wunused-label when building SWIG-generated PHP bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 95 compiler warnings.

3 years agodisable -Wunused-parameter when building SWIG-generated PHP bindings
Matthew Fernandez [Sun, 11 Jul 2021 02:12:54 +0000 (19:12 -0700)]
disable -Wunused-parameter when building SWIG-generated PHP bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 4 compiler warnings.

3 years agosquash -Wunused-parameter warnings in dummy bindings init
Matthew Fernandez [Sun, 11 Jul 2021 02:03:13 +0000 (19:03 -0700)]
squash -Wunused-parameter warnings in dummy bindings init

3 years agogv_string_writer: gracefully handle sizes that exceed INT_MAX
Matthew Fernandez [Sun, 11 Jul 2021 02:01:01 +0000 (19:01 -0700)]
gv_string_writer: gracefully handle sizes that exceed INT_MAX

Similar to the previous commit, this deals with some mismatch between the TCL
API expecting int and the Graphviz API dealing in size_t.

This stems from a mismatch between gv_channel_write (or back tracking this, the
write_fn member of GVC) dealing in size_t and the TCL API dealing in int. Prior
to this change, a write of more than INT_MAX through this function would result
in passing a negative value to TCL. I do not know how it responds to such
things. Following this change, a write of more than INT_MAX results in a
truncated write of at most INT_MAX, something callers should already be
anticipating. Squashes two compiler warnings.

3 years agogv_channel_writer: gracefully handle sizes that exceed INT_MAX
Matthew Fernandez [Sun, 11 Jul 2021 01:40:56 +0000 (18:40 -0700)]
gv_channel_writer: gracefully handle sizes that exceed INT_MAX

The compiler (correctly) says:

  gv_tcl_init.c: In function ‘gv_channel_writer’:
  gv_tcl_init.c:25:58: warning: conversion from ‘size_t’ {aka ‘long
    unsigned int’} to ‘int’ may change value [-Wconversion]
       return Tcl_Write((Tcl_Channel)(job->output_file), s, len);
                                                            ^~~
  gv_tcl_init.c:25:12: warning: conversion to ‘size_t’ {aka ‘long unsigned
    int’} from ‘int’ may change the sign of the result [-Wsign-conversion]
       return Tcl_Write((Tcl_Channel)(job->output_file), s, len);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This stems from a mismatch between gv_channel_write (or back tracking this, the
write_fn member of GVC) dealing in size_t and the TCL API dealing in int. Prior
to this change, a write of more than INT_MAX through this function would result
in passing a negative value to TCL. I do not know how it responds to such
things. Following this change, a write of more than INT_MAX results in a
truncated write of at most INT_MAX, something callers should already be
anticipating. Squashes two compiler warnings.

3 years agodisable -Wunused-parameter when building SWIG-generated Ruby bindings
Matthew Fernandez [Sun, 11 Jul 2021 01:28:31 +0000 (18:28 -0700)]
disable -Wunused-parameter when building SWIG-generated Ruby bindings

There is no value to warning about things like this in generated code, which are
just artifacts of how SWIG code generation works. Removes 91 compiler warnings.

3 years agoMerge branch 'smattr/ED9A017B-1B9E-42F5-9128-5885542A4EE8' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 18:33:37 +0000 (18:33 +0000)]
Merge branch 'smattr/ED9A017B-1B9E-42F5-9128-5885542A4EE8' into 'main'

some misc clean up

See merge request graphviz/graphviz!2045

3 years agosimplify twoDots
Matthew Fernandez [Sat, 10 Jul 2021 15:59:25 +0000 (08:59 -0700)]
simplify twoDots

The compiler can likely see this equivalence already. But this change makes the
code clearer to both it and to human readers.

3 years agoremove unnecessary not-null guards on free in spring_electrical_embedding_fast
Matthew Fernandez [Sat, 26 Jun 2021 23:21:16 +0000 (16:21 -0700)]
remove unnecessary not-null guards on free in spring_electrical_embedding_fast

It is well-defined to free null.

3 years agoremove unnecessary not-null guards to free in Operator_diag_precon_delete
Matthew Fernandez [Sat, 26 Jun 2021 23:19:44 +0000 (16:19 -0700)]
remove unnecessary not-null guards to free in Operator_diag_precon_delete

It is well-defined to free null. Apart from this though, the first condition
containing a dereference of `o` implies that `o` is not null so the second
condition can be assumed true.

3 years agoremove unnecessary not-null guards on free in StressMajorizationSmoother_smooth
Matthew Fernandez [Sat, 26 Jun 2021 23:18:00 +0000 (16:18 -0700)]
remove unnecessary not-null guards on free in StressMajorizationSmoother_smooth

It is well-defined to free null.

3 years agoremove unnecessary not-null guard in Operator_matmul_delete
Matthew Fernandez [Sat, 26 Jun 2021 23:09:17 +0000 (16:09 -0700)]
remove unnecessary not-null guard in Operator_matmul_delete

It is well-defined to free null.

3 years agoremove unnecessary cast in Operator_matmul_new
Matthew Fernandez [Sat, 26 Jun 2021 23:08:33 +0000 (16:08 -0700)]
remove unnecessary cast in Operator_matmul_new

A SparseMatrix implicitly coerces to void*.

3 years agoremove unnecessary branch in gvplugin_library_load
Matthew Fernandez [Sat, 26 Jun 2021 23:00:28 +0000 (16:00 -0700)]
remove unnecessary branch in gvplugin_library_load

The function grealloc can handle the input pointer being NULL and the follow on
code after this does not rely on the contents of the allocated buffer being
zeroed.

3 years agoremove unnecessary error handling in colorxlate
Matthew Fernandez [Sat, 26 Jun 2021 22:58:11 +0000 (15:58 -0700)]
remove unnecessary error handling in colorxlate

The grealloc function can only return NULL when the passed in size is 0. That is
not the case in this call site.

3 years agoremove unnecessary error handling in canontoken
Matthew Fernandez [Sat, 26 Jun 2021 22:56:41 +0000 (15:56 -0700)]
remove unnecessary error handling in canontoken

The grealloc function can only return NULL when the passed in size is 0. That is
not the case in this call site.

3 years agoremove unnecessary cast in canontoken
Matthew Fernandez [Sat, 26 Jun 2021 22:56:03 +0000 (15:56 -0700)]
remove unnecessary cast in canontoken

The variable canon is already an unsigned char pointer.

3 years agoremove unnecessary casts in makeDerivedNode
Matthew Fernandez [Sat, 26 Jun 2021 22:45:07 +0000 (15:45 -0700)]
remove unnecessary casts in makeDerivedNode

All these pointers implicitly coerce.

3 years agoMerge branch 'smattr/5EE3E1FF-FB01-4617-BEED-EEE6C36C5FF2' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 17:42:12 +0000 (17:42 +0000)]
Merge branch 'smattr/5EE3E1FF-FB01-4617-BEED-EEE6C36C5FF2' into 'main'

remove indent settings files

See merge request graphviz/graphviz!2055

3 years agoremove indent settings files
Matthew Fernandez [Fri, 16 Jul 2021 14:42:43 +0000 (07:42 -0700)]
remove indent settings files

Graphviz now uses clang-format for C/C++ style. Though admittedly most files are
not yet conformant.

3 years agoMerge branch 'smattr/0387F9F2-3247-4913-BD25-DB495AE7782F' into 'main'
Matthew Fernandez [Sat, 17 Jul 2021 16:52:32 +0000 (16:52 +0000)]
Merge branch 'smattr/0387F9F2-3247-4913-BD25-DB495AE7782F' into 'main'

Start 2.48 development series

See merge request graphviz/graphviz!2057

3 years agoStart 2.48 development series
Matthew Fernandez [Sat, 17 Jul 2021 15:16:52 +0000 (08:16 -0700)]
Start 2.48 development series

3 years agoMerge branch 'smattr/17BC5007-8B14-405F-A7A1-F5C859D59538' into 'main' 2.48.0
Matthew Fernandez [Sat, 17 Jul 2021 15:56:05 +0000 (15:56 +0000)]
Merge branch 'smattr/17BC5007-8B14-405F-A7A1-F5C859D59538' into 'main'

Stable Release 2.48.0

See merge request graphviz/graphviz!2051

3 years agoStable Release 2.48.0
Matthew Fernandez [Tue, 13 Jul 2021 03:09:53 +0000 (20:09 -0700)]
Stable Release 2.48.0

3 years agoMerge branch 'fix-lib-ortho-odr-violation' into 'main'
Magnus Jacobsson [Wed, 14 Jul 2021 10:05:24 +0000 (10:05 +0000)]
Merge branch 'fix-lib-ortho-odr-violation' into 'main'

Fix ODR violation in lib/ortho

Closes #2096

See merge request graphviz/graphviz!2036

3 years agoadd a changelog entry for the fixed ODR violation
Magnus Jacobsson [Mon, 12 Jul 2021 15:31:14 +0000 (17:31 +0200)]
add a changelog entry for the fixed ODR violation

Issue: https://gitlab.com/graphviz/graphviz/-/issues/2096

3 years agoRevert "temporarily disable ODR violation detection caused by lib/ortho"
Magnus Jacobsson [Wed, 7 Jul 2021 15:55:31 +0000 (17:55 +0200)]
Revert "temporarily disable ODR violation detection caused by lib/ortho"

This reverts commit 7201ac3ca213740010d4cdb52d38bfe4b91b92fc.

This is workaround is no longer needed since
https://gitlab.com/graphviz/graphviz/-/issues/2096 has been fixed.

3 years agoremove now obsolete MSBuild project dependency on ortho for neatogen
Magnus Jacobsson [Mon, 12 Jul 2021 07:17:22 +0000 (09:17 +0200)]
remove now obsolete MSBuild project dependency on ortho for neatogen

This is step 4 of 4 in replacing ortho with gvc as a link dependency
for neatogen.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove now obsolete MSBuild link dependency on ortho for neatogen
Magnus Jacobsson [Mon, 12 Jul 2021 14:09:22 +0000 (16:09 +0200)]
remove now obsolete MSBuild link dependency on ortho for neatogen

This is step 3 of 4 in replacing ortho with gvc as a link dependency
for neatogen.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoadd MSBuild link dependency on gvc for neatogen
Magnus Jacobsson [Mon, 12 Jul 2021 07:20:21 +0000 (09:20 +0200)]
add MSBuild link dependency on gvc for neatogen

This is step 2 of 4 in replacing ortho with gvc as a link dependency
for neatogen.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoadd MSBuild project reference to gvc for neatogen
Magnus Jacobsson [Mon, 12 Jul 2021 14:44:59 +0000 (16:44 +0200)]
add MSBuild project reference to gvc for neatogen

This is step 1 of 4 in replacing ortho with gvc as a link dependency
for neatogen. It ensures the correct build order under all
circumstances, also when neatogen is built stand-alone. Just a link
dependency is not enough which does not cause the dependency to
actually be built.

A project reference is a more modern way of creating a project
dependency than the centralized project dependencies in the solution
file. See https://stackoverflow.com/a/2317017/3122101.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove now obsolete MSBuild project dependency on ortho for dotgen
Magnus Jacobsson [Sun, 11 Jul 2021 19:32:08 +0000 (21:32 +0200)]
remove now obsolete MSBuild project dependency on ortho for dotgen

This is step 4 of 4 in replacing ortho with gvc as a link dependency
for dotgen.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove now obsolete MSBuild link dependency on ortho for dotgen
Magnus Jacobsson [Mon, 12 Jul 2021 14:06:58 +0000 (16:06 +0200)]
remove now obsolete MSBuild link dependency on ortho for dotgen

This is step 3 of 4 in replacing ortho with gvc as a link dependency
for dotgen.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoadd MSBuild link dependency to gvc for dotgen
Magnus Jacobsson [Mon, 12 Jul 2021 13:52:57 +0000 (15:52 +0200)]
add MSBuild link dependency to gvc for dotgen

This is step 2 of 4 in replacing ortho with gvc as a link dependency
for dotgen.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoadd MSBuild project reference to gvc for dotgen
Magnus Jacobsson [Mon, 12 Jul 2021 14:26:45 +0000 (16:26 +0200)]
add MSBuild project reference to gvc for dotgen

This is step 1 of 4 in replacing ortho with gvc as a link dependency
for dotgen. It ensures the correct build order under all
circumstances, also when dotgen is built stand-alone. Just a link
dependency is not enough which does not cause the link dependency to
actually be built.

A project reference is a more modern way of creating a project
dependency than the centralized project dependencies in the solution
file. See https://stackoverflow.com/a/2317017/3122101.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoforce all ortho object files to be linked into gvc for CMake and MSBuild
Magnus Jacobsson [Tue, 1 Jun 2021 16:30:05 +0000 (18:30 +0200)]
force all ortho object files to be linked into gvc for CMake and MSBuild

This is what the autotools builds do.

Whithout this, the ortho object files ended up both in
libgvplugin_dot_layout.so and libgvplugin_neato_layout.so which caused
an ASan odr_violation.

This commit also adds MSVC an import/export declaration for orthoEdges
which otherwise would become unresolved.

It also changes gvc to use PRIVATE instead of PUBLIC linking to
ortho. The reason is detailed below.

The ASan error message was:

==235826==ERROR: AddressSanitizer: odr-violation (0x7ff55b6c72c0):
  [1] size=4 'odb_flags' /home/magjac/graphviz/lib/ortho/ortho.c:44:5
  [2] size=4 'odb_flags' /home/magjac/graphviz/lib/ortho/ortho.c:44:5
These globals were registered at these points:
  [1]:
    #0 0x7ff55b8c5938 in __asan_register_globals ../../../../src/libsanitizer/asan/asan_globals.cpp:341
    #1 0x7ff55b2ce1a2 in _sub_I_00099_3 (/home/magjac/graphviz/build/plugin/dot_layout/libgvplugin_dot_layout.so.6+0x43b1a2)
    #2 0x7ff55c28c96d  (/lib64/ld-linux-x86-64.so.2+0x1196d)

  [2]:
    #0 0x7ff55b8c5938 in __asan_register_globals ../../../../src/libsanitizer/asan/asan_globals.cpp:341
    #1 0x7ff55a8008e4 in _sub_I_00099_3 (/home/magjac/graphviz/build/plugin/neato_layout/libgvplugin_neato_layout.so.6+0x6d38e4)
    #2 0x7ff55c28c96d  (/lib64/ld-linux-x86-64.so.2+0x1196d)

==235826==HINT: if you don't care about these errors you may set ASAN_OPTIONS=detect_odr_violation=0
SUMMARY: AddressSanitizer: odr-violation: global 'odb_flags' at /home/magjac/graphviz/lib/ortho/ortho.c:44:5
==235826==ABORTING

Fixes https://gitlab.com/graphviz/graphviz/-/issues/2096.

Here is a more detailed explanation of the problem and the fix:

1. The ortho library is not a library that we ship.

2. The ortho library is a static library.

3. The ortho object modules should be part of the gvc library. With
   autotools they are, but before this fix they are not with CMake or
   MSBuild.

4. A user program should load the ortho object modules from the gvc
   libray. This works with autotools, but before this fix not with
   CMake or MSBuild.

5. All plugins (and all other Graphviz programs and libraries) should
   load the ortho object modules from the gvc library. This works with
   autotools, but before this fix not with CMake or MSBuild.

6. Nothing should ever link directly to the ortho library except gvc.

7. Even before this fix, the gvc library had ortho as a PUBLIC
   dependency, but since gvc itself doesn't refer to any ortho
   symbols, no object modules from ortho gets included in the gvc
   library itself unless we explicitly include them. Which is what the
   autotools builds do and what the CMake and BSBuild builds do after
   this fix. My interpretation is that without this, gvc acted as an
   INTERFACE library for ortho, i.e., it could tell anything linking
   to it where to find the object modules, but not provide them itself
   (again, my interpretation. For more see
   https://cmake.org/cmake/help/latest/command/add_library.html#interface-libraries).

8. The dot_layout and neato_layout plugins have the gvc library as a
   public dependency, but they don't have any direct dependency on the
   ortho library itself. Because of this, they find the ortho objects
   modules that they need though the gvc library. Before this fix
   however, since gvc did not contain the ortho objects, they had no
   option but to link in the ortho object modules statically. This is
   what caused the ODR violation when both plugins were loaded
   simultaneously.

9. This fix also changes the gvc dependency on ortho from PUBLIC to
   PRIVATE to avoid giving anything access to the ortho static library
   through gvc.

3 years agoadd a macro to be used when declaring external functions in ortho
Magnus Jacobsson [Tue, 1 Jun 2021 16:30:05 +0000 (18:30 +0200)]
add a macro to be used when declaring external functions in ortho

The macro expands to import/export declarations on Windows that are
needed for dynamic-link libraries (DLLs) and nothing for other OSes.

This is a preparation for being able to include the ortho object files
into the gvc shared/dynamic-link library in an upcoming commit in this
series.

Note that this change continues to use the anti-pattern of GVC_EXPORTS
which is not automatically generated by CMake like gvc_EXPORTS is.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agocreate an object library with all ortho object files for CMake
Magnus Jacobsson [Tue, 1 Jun 2021 16:30:05 +0000 (18:30 +0200)]
create an object library with all ortho object files for CMake

This is a prepration for being able to force them to be included in
the gvc shared library in an upcoming commit in this series.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoadd MSBuild project reference to ortho for gvc
Magnus Jacobsson [Mon, 12 Jul 2021 13:42:05 +0000 (15:42 +0200)]
add MSBuild project reference to ortho for gvc

This is a preparation for adding ortho as a link dependency to gvc in
an upcoming commit. It ensures the correct build order under all
circumstances, also when gvc is built stand-alone. A link dependency
is not enough which does not cause the link dependency to actually be
built.

A project reference is a more modern way of creating a project
dependency than the centralized project dependencies in the solution
file. See https://stackoverflow.com/a/2317017/3122101.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild link dependency on ortho for gvmap
Magnus Jacobsson [Mon, 12 Jul 2021 05:43:34 +0000 (07:43 +0200)]
remove useless MSBuild link dependency on ortho for gvmap

gvmap only depends indirectly on ortho through neatogen which it
already has a link dependency on.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the neatogen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild project dependency on ortho for gvmap
Magnus Jacobsson [Mon, 12 Jul 2021 14:56:13 +0000 (16:56 +0200)]
remove useless MSBuild project dependency on ortho for gvmap

gvmap only depends indirectly on ortho through neatogen which it
already has a project dependency on.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the neatogen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild project reference to ortho for dot
Magnus Jacobsson [Mon, 12 Jul 2021 05:37:19 +0000 (07:37 +0200)]
remove useless MSBuild project reference to ortho for dot

dot only depends indirectly on ortho through dotgen which it already
has a project reference to.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the dotgen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild project dependency on ortho for neato_layout plugin
Magnus Jacobsson [Mon, 12 Jul 2021 14:54:05 +0000 (16:54 +0200)]
remove useless MSBuild project dependency on ortho for neato_layout plugin

The neato_layout plugin only depends indirectly on ortho through
neatogen which it already has a project reference to.

A project reference is a more modern way of creating a project
dependency than the centralized project dependencies in the solution
file. See https://stackoverflow.com/a/2317017/3122101.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the neatogen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild link dependency on ortho for neato_layout plugin
Magnus Jacobsson [Mon, 12 Jul 2021 05:50:59 +0000 (07:50 +0200)]
remove useless MSBuild link dependency on ortho for neato_layout plugin

The neato_layout plugin only depends indirectly on ortho through
neatogen which it already has a link dependency on.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the neatogen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild project reference to ortho for dot_layout plugin
Magnus Jacobsson [Mon, 12 Jul 2021 05:49:57 +0000 (07:49 +0200)]
remove useless MSBuild project reference to ortho for dot_layout plugin

The dot_layout plugin only depends indirectly on ortho through dotgen
which it already has a project reference to.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the dotgen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoremove useless MSBuild link dependency on ortho for dot_layout plugin
Magnus Jacobsson [Mon, 12 Jul 2021 03:17:43 +0000 (05:17 +0200)]
remove useless MSBuild link dependency on ortho for dot_layout plugin

The dot_layout plugin only depends indirectly on ortho through dotgen
which it already has a link dependency on.

This change is made to avoid confusion when upcoming commits in this
series change ortho to be part of the gvc shared library and adjusts
the dotgen library accordingly.

Towards https://gitlab.com/graphviz/graphviz/-/issues/2096.

3 years agoMerge branch 'smattr/78191A1F-8E39-4754-9FB7-A679AD4A5F49' into 'main'
Matthew Fernandez [Tue, 13 Jul 2021 03:58:48 +0000 (03:58 +0000)]
Merge branch 'smattr/78191A1F-8E39-4754-9FB7-A679AD4A5F49' into 'main'

remove unnecessary './' prefix on report.txt output in CI

See merge request graphviz/graphviz!2039

3 years agoremove unnecessary './' prefix on report.txt output in CI
Matthew Fernandez [Wed, 7 Jul 2021 00:51:07 +0000 (17:51 -0700)]
remove unnecessary './' prefix on report.txt output in CI

Commit 8f7c1f4c2ef253bc1a763515b344d599e5c199ee removed any directory prefix
from this artifact, outputting it to the root directory of the Graphviz checkout
in CI. In this case, like metrics.txt, it does not need an explicit './' prefix.

3 years agoMerge branch 'smattr/5852d0c9-e724-4fe3-9903-d0b235b98775' into 'main'
Matthew Fernandez [Sun, 11 Jul 2021 23:51:24 +0000 (23:51 +0000)]
Merge branch 'smattr/5852d0c9-e724-4fe3-9903-d0b235b98775' into 'main'

fix round tripping GV→GXL→GV

Closes #517

See merge request graphviz/graphviz!2034

3 years agogxl2gv: fix: recognize and handle HTML-like strings
Matthew Fernandez [Tue, 6 Jul 2021 00:38:44 +0000 (17:38 -0700)]
gxl2gv: fix: recognize and handle HTML-like strings

When translating a Graphviz file through gv2gxl, HTML-like and non-HTML-like
strings would be translated identically, resulting in a loss of information.
This was fixed in the series merged in d44d19c86f0f469d1c76ce0d7630c8e0ac85e993.
However, to take this through to completion and make round-tripping such strings
possible, changes to gxl2gv were also required.

The present commit updates gxl2gv to recognize the new ‘kind’ GXL attribute that
gv2gxl uses to indicate a string originated as an HTML-like string. The output
of gxl2gv now correctly translates this back to an HTML-like string. Fixes #517.

Note that this fix is orthogonal to the behavior when using an HTML-like and
non-HTML-like string with the same content. It is still not possible to do this
without confusing the internal string interning dictionary (#2089).

3 years agogxl2gv: use an enum instead of #defines for attribute type
Matthew Fernandez [Tue, 6 Jul 2021 00:28:39 +0000 (17:28 -0700)]
gxl2gv: use an enum instead of #defines for attribute type

This introduces some stronger typing and makes it clearer that the attribute
type variables like Current_class can only ever be one of these values. Related
to #517.

3 years agogxl2gv: add a no-op default case to a switch
Matthew Fernandez [Tue, 6 Jul 2021 00:57:28 +0000 (17:57 -0700)]
gxl2gv: add a no-op default case to a switch

An upcoming change makes the type of Current_class an enum, which introduces new
-Wswitch compiler warnings. To avoid this in advance, we give this switch a
default case that does nothing.

3 years agogxl2gv: push the ability to indicate an attribute is HTML-like outwards
Matthew Fernandez [Tue, 6 Jul 2021 00:17:59 +0000 (17:17 -0700)]
gxl2gv: push the ability to indicate an attribute is HTML-like outwards

Callers of setAttr can now indicate the attribute they are setting is an
HTML-like string. This is not yet taken advantage of, but this change is a step
towards #517.