https://github.com/pygraphviz/pygraphviz/pull/573

Index: setup.py
--- setup.py.orig
+++ setup.py
@@ -1,15 +1,55 @@
 import sys
+import os
+import re
 from setuptools import setup, Extension
 
+def get_graphviz_version():
+    """
+    Reads GRAPHVIZ_VERSION_MAJOR from the header file.
+    Assumes the header is available at a known path during setup.
+    """
+    # NOTE: You may need to adjust this path based on your environment
+    # or rely on the build system to have already installed it.
+    header_path = '${LOCALBASE}/include/graphviz/graphviz_version.h'
+
+    if not os.path.exists(header_path):
+        # Fallback/default if header file cannot be read during setup.
+        # This should match your expected target version.
+        raise RuntimeError(f"Graphviz header file not found at {header_path}.")
+
+    with open(header_path, 'r') as f:
+        content = f.read()
+        match = re.search(r'#define\s+GRAPHVIZ_VERSION_MAJOR\s+(\d+)', content)
+        if match:
+            return str(int(match.group(1)))
+        else:
+            match = re.search(r'#define\s+PACKAGE_VERSION\s+"([0-9.]+)"',
+                              content)
+            if match:
+                maj_ver = match.group(1).split('.')[0]
+                return str(int(maj_ver))
+
+    raise RuntimeError(
+            "GRAPHVIZ_VERSION_MAJOR macro not found in the header file!")
+
 if __name__ == "__main__":
     define_macros = [("SWIG_PYTHON_STRICT_BYTE_CHAR", None)]
     if sys.platform == "win32":
         define_macros.append(("GVDLL", None))
 
+    # Get the target version number
+    gv_major_version = get_graphviz_version()
+
+    define_macros = []
+    swig_options = []
+
+    swig_options.append("-DGRAPHVIZ_VERSION_MAJOR={}".format(gv_major_version))
+    print(f"Defining GRAPHVIZ_VERSION_MAJOR as: {gv_major_version}")
+
     extension = [
         Extension(
             name="pygraphviz._graphviz",
-            sources=["pygraphviz/graphviz_wrap.c"],
+            sources=["pygraphviz/graphviz.i"],
             include_dirs=[],
             library_dirs=[],
             # cdt does not link to cgraph, whereas cgraph links to cdt.
@@ -20,6 +60,7 @@ if __name__ == "__main__":
             # undefined symbol errors. seen under PyPy on Linux.)
             libraries=["cdt", "cgraph", "gvc"],
             define_macros=define_macros,
+            swig_opts=swig_options,
         )
     ]
 
