# x-plane-sdk
Have you ever felt like the X-Plane SDK is packaged in a *really* weird format?
Well, it's probably because it originally hails from the early days of XSquawkBox,
where it was distributed *by* XSquawkBox.
For some reason, though, Laminar Research never bothered to reorganize the package.
I took it upon myself to do that. This repository can be imported as a subproject/wrap
in Meson, and as an ExternalProject or FetchDependency or whatever in CMake.
I'm unlikely to add any other build systems.
## Linux: A word of caution
***TL;DR: X-Plane < 12.1.0 on Linux must be patched.***
You may notice that this builds library stubs for Linux. Cool, right? This allows
building of plugins with *all* symbols defined, so whenever *any* external symbols
are used, we ensure we link directly to the libraries that define them, avoiding
issues of expecting X-Plane to provide dependencies. Instead, `ld.so` will happily
load any missing libraries when your plugin is loaded.
There's a problem, though. For a while now, X-Plane has shipped without an `SONAME`
in the `XPLM_64.so` and `XPWidgets_64.so` libraries. This would prevent `ld.so` from
properly locating these libraries when requested by plugins.
There is a simple fix, however:
``` shell
cd X-Plane/Resources/plugins
patchelf --set-soname XPLM_64.so XPLM_64.so
patchelf --set-soname XPWidgets_64.so XPWidgets_64.so
```
This will ensure compatibility with stub-linked plugins, while not changing behavior
for plugins built with dangling symbols.
X-Plane 12.1.0 should ship with `SONAME`s set in these libraries.