Attribute multiply-declared public symbols to their umbrella header#52
Conversation
A MEOS public symbol may be declared both in its public umbrella meos_<family>.h header (the surface MobilityDB installs and a binding includes) and in a family-internal implementation header; cbuffer, pose, rgeo and h3 all do this. The parser deduplicated by keeping the first declaration seen in the amalgamation, which follows header sort order, so 18 public symbols (15 in meos_h3.h, 3 in meos_internal_geo.h) were attributed to an internal header instead of their umbrella. A binding that keys on the installed public headers then silently dropped them. Deduplicate by preferring the declaration in a top-level meos*.h umbrella header over an internal one, independent of amalgamation order, so every umbrella-exposed function is attributed to the header it is published through. Function count is unchanged (4545); only the file attribution of the 18 symbols is corrected.
|
Every binding consumes the catalog derived from the INSTALLED public headers via the provision-meos action: it builds and installs MobilityDB, then runs run.py against The 18-symbol mis-attribution this PR fixes occurs only when run.py runs against the source tree — which contains the internal subdir headers and which the pipeline never uses. Closing as unnecessary: the canonical installed-headers generation already attributes every public symbol to its umbrella. |
A MEOS public symbol may be declared both in its public umbrella
meos_<family>.hheader — the surface MobilityDB installs (meos/CMakeLists.txt) and a binding#includes — and in a family-internal implementation header. This is systemic: cbuffer, pose, rgeo and h3 all redeclare umbrella symbols in internal headers.Deduplication keys on the header amalgamation order, so a symbol also present in an internal header is attributed to that internal header. 18 public symbols (15 declared in
meos_h3.h, 3 inmeos_internal_geo.h) land on an internal header rather than their umbrella, and a binding that keys on the installed public headers — as GoMEOS, MEOS.js and PyMEOS-CFFI do — drops them (e.g. all 10h3index_*I/O and comparison functions).This change deduplicates by preferring the declaration in a top-level
meos*.humbrella header over an internal one, independent of amalgamation order, so every umbrella-exposed function is attributed to the header it is published through.Verified against MobilityDB master
2f23076851:fileattribution of the 18 symbols changes,h3index_inis attributed tomeos_h3.h,meos_internal_geo.hsymbols are classified internal (matching where they are declared).