[swift-users] Improving a simple C binding

Jason Dusek jason.dusek at gmail.com
Wed Dec 9 02:54:35 CST 2015


Behold, a binding for libpq:

  https://github.com/solidsnack/CLibPQ

And a little app that uses it:

  https://github.com/solidsnack/PGVersion

CLibPQ is put together in the simplest way: there's a module.modulemap
at the root and that's it. I would like to make some changes to the
module hierarchy and I'm not sure how to go about it. Here's what I'd
like to do:

* Create `CLibPQ.OSXHomebrew` and `CLibPQ.Ubuntu` that contain the
right mappings for those platforms (the header files are in different
places).

* Create `CLibPQ` that conditionally imports the right one:

    CLibPQ.swift:
      #if os(Linux)
      import CLibPQ.Ubuntu
      #else
      import CLibPQ.OSXHomebrew
      #endif

* In `PGVersion` we'd be able to `import CLibPQ` as before.

What's the right project layout to make this work?

Namespaced C modules are an interesting topic and worth pursuing in
their own right; but maybe there is a better way to do what I'm trying
to accomplish?

Best Regards,
  Jason Dusek


More information about the swift-users mailing list