[swift-users] Binding Regular C Functions (Gtk, Cairo, etc.)

Harlan Haskins harlan at harlanhaskins.com
Tue Dec 8 23:23:59 CST 2015


Just covering all the bases here: did you commit and add Package.swift before making the tag?

Sent from my iPhone

> On Dec 8, 2015, at 11:08 PM, Jason Dusek via swift-users <swift-users at swift.org> wrote:
> 
> Gage,
> 
> For what it's worth, after running `git init` and `git tag -f 1.0.0`
> in `CCairo` to get something importable, I run into this error:
> 
> :;  swift build
> Cloning Packages/CCairo
> <unknown>:0: error: no such file or directory:
> '/Users/solidsnack/Downloads/Sources/example/Packages/CCairo/Package.swift'
> 
> 
> On Tue, 8 Dec 2015 at 18:22 Gage Morgan via swift-users
> <swift-users at swift.org> wrote:
>> 
>> Okay, I've filed a report. To make it easier, the thing's code is SR-152.
>> 
>> https://bugs.swift.org/browse/SR-152
>> 
>> ________________________________
>> From: gagemorgan at outlook.com
>> To: mawadah at apple.com; gagemorgan at outlook.com
>> 
>> Subject: RE: [swift-users] Binding Regular C Functions (Gtk, Cairo, etc.)
>> Date: Tue, 8 Dec 2015 18:11:03 -0500
>> 
>> What I'd like to know is, what is the "link: " part of the module.modulemap for? I pasted in the cairo.so part, but this only said that after doing so. I'd honestly just like to make sure this works.
>> 
>> ________________________________
>> To: mawadah at apple.com; swift-users at swift.org
>> Date: Tue, 8 Dec 2015 18:07:25 -0500
>> 
>> Subject: Re: [swift-users] Binding Regular C Functions (Gtk, Cairo, etc.)
>> From: swift-users at swift.org
>> 
>> 
>> 
>> 
>> ________________________________
>> From: gagemorgan at outlook.com
>> To: mawadah at apple.com
>> Subject: RE: [swift-users] Binding Regular C Functions (Gtk, Cairo, etc.)
>> Date: Tue, 8 Dec 2015 18:03:42 -0500
>> 
>> So...including cairo in an app returns this:
>> 
>> Linking Executable:  .build/debug/example
>> /usr/bin/ld: cannot find -l/usr/lib/x86_64-linux-gnu/libcairo.so
>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>> <unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
>> <unknown>:0: error: build had 1 command failures
>> swift-build: exit(1): ["/home/mgage/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/bin/swift-build-tool", "-f", "/home/mgage/Sources/example/.build/debug/example.o/llbuild.yaml"]
>> 
>> What went amiss?
>> 
>> ________________________________
>> From: mawadah at apple.com
>> Subject: Re: [swift-users] Binding Regular C Functions (Gtk, Cairo, etc.)
>> Date: Mon, 7 Dec 2015 19:27:56 -0800
>> To: gagemorgan at outlook.com
>> 
>> Once you have followed the instructions to create a system package, your own package declares a dependency on that package. This is also covered in those steps.
>> 
>> To use the C APIs in your code, simply import the name of the module (as defined by the modulemap entry) in your swift file. It should just work.
>> 
>> For instance, in the example from the sysmodules doc link I sent, you just
>> 
>> import CJPEG
>> 
>> 
>> 
>> The C functions will have the same name in Swift as their C counterparts. The types might adjust to UnsafePointer etc.. For a list of those Swift bindings, run the REPL and import your module, then perform “:type lookup Module” to get a printout of available APIs.
>> 
>> - mish
>> 
>> On Dec 7, 2015, at 6:40 PM, Gage Morgan <gagemorgan at outlook.com> wrote:
>> 
>> I read that. What I want to know is how to bind the functions themselves after creating a system package. How to use the c functions that got imported, if you will.
>> 
>> Sent from Outlook
>> 
>> 
>> 
>> 
>> On Mon, Dec 7, 2015 at 6:39 PM -0800, "Mish Awadah" <mawadah at apple.com> wrote:
>> 
>> Please see the reference at https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md
>> 
>> - mish
>> 
>> On Dec 7, 2015, at 6:33 PM, Gage Morgan via swift-users <swift-users at swift.org> wrote:
>> 
>> For any project: How is a C to Swift function binding created? I'd like to know how to import C functions to Swift. Once I can do this successfully, I'll be all set.
>> 
>> Sent from Outlook
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
>> 
>> 
>> 
>> 
>> _______________________________________________ swift-users mailing list swift-users at swift.org https://lists.swift.org/mailman/listinfo/swift-users
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users


More information about the swift-users mailing list