]> granicus.if.org Git - graphviz/commit
move dot_builtins.c into C++
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 28 May 2022 17:40:34 +0000 (10:40 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 9 Jul 2022 16:09:29 +0000 (09:09 -0700)
commit515626b540b56586c2329b5373da11a978801459
tree1086610ade4c821a4ab246acc2b7f68df1c92dcf
parentb0e5c78e3f3b7f3fe19ee055bccae528030a88c3
move dot_builtins.c into C++

This looks like a bit of a strange change, when we now wrap the entire file in
`extern "C"`. However this has two key benefits:

  1. `dot_builtins` and `dot_static` that include this source needed an
     Autotools hack¹ to force compilation to use the C++ front end (`c++`)
     instead of the C front end (`cc`) in order to link against the C++ standard
     library. By moving this source into C++ we can remove this hack.

  2. When trying to integrate `dot_builtins` into the CMake build system, MSVC
     complains (correctly) that the initializers to the array in this file are
     not compile-time constants. GCC and Clang apparently allow this by a
     non-standard extension. By moving this into C++, we get more relaxed
     initialization semantics that allow this on all compilers.

Gitlab: #1836

¹ https://www.gnu.org/software/automake/manual/automake.html#Libtool-Convenience-Libraries
ci/clang_format.py
cmd/dot/Makefile.am
cmd/dot/dot_builtins.cpp [moved from cmd/dot/dot_builtins.c with 98% similarity]
tests/CMakeLists.txt