Yeah it should finally work when you import CCairo in main.swift.

Keep in mind, though, that everyone is volunteering their time on this mailing 
list.

I'm really glad you're taking a liking to Swift, and I'd suggest maybe trying a 
few things more simple before exercising the finer points of cross-platform C 
interop.

I'll be checking here periodically tomorrow. Apologies for this being 
frustrating! We've all been here 😅.

Best,
Harlan

> On Dec 12, 2015, at 12:16 AM, Gage Morgan <gagemor...@outlook.com> wrote:
> 
> So reimport CCairo and it'll just work, or more bugs? At this point I don't 
> know what else is gonna pop up as soon as I compile. Is there someone on here 
> at all tomorrow?
> 
> Sent from Outlook Mobile
> 
> 
> 
> 
> On Fri, Dec 11, 2015 at 9:14 PM -0800, "Harlan Haskins" 
> <har...@harlanhaskins.com> wrote:
> 
> Oops, I forgot that identifier comes straight from CCairo (it's not 
> re-exported from Cairo).
> 
> An unresolved identifier is just that, it's a variable or constant that the 
> compiler doesn't know how to find (or 'resolve').
> 
> I don't know how this could be made simpler -- C bindings inherit their 
> complexity from the C they back, and Swift's modules are pretty much as 
> simple as modules go. Anything you use in one module has to be declared 
> somewhere, and modules don't re-export their imports.
> 
> -- Harlan
> 
> On Dec 11, 2015, at 11:40 PM, Gage Morgan <gagemor...@outlook.com> wrote:
> 
>> What exactly is an unresolved identifier?
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 23:33:59 -0500
>> CC: max.how...@apple.com; ja...@apple.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> You need to import Cairo, not CCairo, in main.swift, in swift-cairo-test
>> 
>> Sent from my iPhone
>> 
>> On Dec 11, 2015, at 11:31 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> I've pushed all three into three separate repos at GitHub. The first one is 
>> at:
>> https://github.com/Christoffen-Corporation/swift-cairo-test
>> 
>> It hosts the test folder I've been talking about, the methods.
>> 
>> The next one is here:
>> https://github.com/Christoffen-Corporation/swift-cairo-ccairo
>> 
>> It hosts the actual CCairo and its modulemap.
>> 
>> And the last one:
>> https://github.com/Christoffen-Corporation/swift-cairo-cairo
>> 
>> Contains the actual wrappings, probably paired with test causing issues. I 
>> don't know, but the bits are out there as requested.
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 22:44:20 -0500
>> CC: max.how...@apple.com; ja...@apple.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> Could you push the latest code to GitHub?
>> 
>> Sent from my iPhone
>> 
>> On Dec 11, 2015, at 10:42 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> Okay, so test.swift is now main.swift, which outputs a much shorter but not 
>> better:
>> 
>> Compiling Swift Module 'test' (1 sources)
>> /home/mgage/swift-cairo-bindings/test/main.swift:3:15: error: use of 
>> unresolved identifier 'Surface'
>> let surface = Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
>>               ^~~~~~~
>> <unknown>:0: error: build had 1 command failures
>> swift-build: exit(1): 
>> ["/home/mgage/Downloads/swift/usr/bin/swift-build-tool", "-f", 
>> "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]
>> 
>> Compilers and debuggers these days...
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 22:38:42 -0500
>> CC: max.how...@apple.com; ja...@apple.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> Gotta rename test.swift to main.swift, otherwise it'll try to compile it as 
>> a module.
>> 
>> This seems to be unintuitive -- we should probably file some structural bug 
>> reports to make this process more straightforward.
>> 
>> Sent from my iPhone
>> 
>> On Dec 11, 2015, at 10:36 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> Just when I think I make a breakthrough...Cairo and CCairo build, but this 
>> test file separates methods from wrappers still won't:
>> 
>> Compiling Swift Module 'test' (1 sources)
>> /home/mgage/swift-cairo-bindings/test/test.swift:4:1: error: expressions are 
>> not allowed at the top level
>> surface.scale(10.0, y: 10.0)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:5:1: error: expressions are 
>> not allowed at the top level
>> surface.moveTo(29.0, y: 14.7)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:6:1: error: expressions are 
>> not allowed at the top level
>> surface.lineTo(37.6, y: 13.0)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:7:1: error: expressions are 
>> not allowed at the top level
>> surface.moveTo(37.6, y: 13.0)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:8:1: error: expressions are 
>> not allowed at the top level
>> surface.lineTo(30.4, y: 22.2)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:9:1: error: expressions are 
>> not allowed at the top level
>> surface.moveTo(30.4, y: 22.2)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:10:1: error: expressions 
>> are not allowed at the top level
>> surface.lineTo(29.0, y: 14.7)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:11:1: error: expressions 
>> are not allowed at the top level
>> surface.setLineWidth(0.1)
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:12:1: error: expressions 
>> are not allowed at the top level
>> surface.stroke()
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:13:1: error: expressions 
>> are not allowed at the top level
>> surface.surfaceWriteToPNG("boobs.png")
>> ^
>> /home/mgage/swift-cairo-bindings/test/test.swift:3:15: error: use of 
>> unresolved identifier 'Surface'
>> let surface = Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
>>               ^~~~~~~
>> <unknown>:0: error: build had 1 command failures
>> swift-build: exit(1): 
>> ["/home/mgage/Downloads/swift/usr/bin/swift-build-tool", "-f", 
>> "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]
>> 
>> What is this "top level" thing? Not the first time I've seen it.
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 22:30:25 -0500
>> CC: max.how...@apple.com; ja...@apple.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> Gotta make sure to make a git tag
>> 
>> git tag 1.0.0
>> git push --tags
>> 
>> Sent from my iPhone
>> 
>> On Dec 11, 2015, at 10:29 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> Okay, so I've gone in and noticed that yes, it does create a library. How do 
>> I use that? Dependency graph won't check out for some strange reason.
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: max.how...@apple.com
>> Date: Fri, 11 Dec 2015 19:02:41 -0800
>> CC: ja...@apple.com; swift-users@swift.org; har...@harlanhaskins.com
>> To: gagemor...@outlook.com
>> 
>> Your Cairo module is an executable and not a library. Don't call files 
>> main.swift for libraries.
>> 
>> I'll open a ticket to ensure swift build warns for this in future.
>> 
>> On Dec 11, 2015, at 6:54 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> Here's what is inhibited when using swift build -v:
>> 
>> mgage@mgage:~/swift-cairo-bindings/test$ swift build -v
>> /home/mgage/Downloads/swift/usr/bin/swiftc -o 
>> /home/mgage/swift-cairo-bindings/test/.build/debug/test 
>> /home/mgage/swift-cairo-bindings/test/.build/debug/test.o/main.swift.o -g 
>> -L/usr/local/lib
>> /home/mgage/swift-cairo-bindings/test/.build/debug/test.o/main.swift.o: In 
>> function `main':
>> /home/mgage/swift-cairo-bindings/test/main.swift:4: undefined reference to 
>> `_TMaC5Cairo7Surface'
>> /home/mgage/swift-cairo-bindings/test/main.swift:4: undefined reference to 
>> `_TFC5Cairo7SurfaceCfT6formatVSC13_cairo_format5widthSi6heightSi_S0_'
>> 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/usr/bin/swift-build-tool", "-v", "-f", 
>> "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]
>> 
>> I'm going to attempt to create a repo, but GitHub and I don't always get 
>> along ;)
>> 
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: max.how...@apple.com
>> Date: Fri, 11 Dec 2015 18:51:09 -0800
>> CC: ja...@apple.com; swift-users@swift.org; har...@harlanhaskins.com
>> To: gagemor...@outlook.com
>> 
>> The link failure is for the constructor for your Cairo class.
>> 
>> I'll have to test this out myself. Can't for a few hours at least.
>> 
>> In the mean time try `swift build -v` for some more information.
>> 
>> On Dec 11, 2015, at 6:42 PM, Gage Morgan via swift-users 
>> <swift-users@swift.org> wrote:
>> 
>> I have no idea what happened here, but:
>> 
>> Cloning Packages/CCairo
>> Cloning Packages/Cairo
>> Compiling Swift Module 'Cairo' (1 sources)
>> Linking Executable:  .build/debug/Cairo
>> Compiling Swift Module 'test' (1 sources)
>> Linking Executable:  .build/debug/test
>> /home/mgage/swift-cairo-bindings/test/.build/debug/test.o/main.swift.o: In 
>> function `main':
>> /home/mgage/swift-cairo-bindings/test/main.swift:4: undefined reference to 
>> `_TMaC5Cairo7Surface'
>> /home/mgage/swift-cairo-bindings/test/main.swift:4: undefined reference to 
>> `_TFC5Cairo7SurfaceCfT6formatVSC13_cairo_format5widthSi6heightSi_S0_'
>> 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/usr/bin/swift-build-tool", "-f", 
>> "/home/mgage/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]
>> 
>> I've made everything public, and I think the initializer needs to be public 
>> or something like that. That said, I have no idea what I need to do for this 
>> to work. Deinit doesn't seem to want to be public, so leaving that alone. I 
>> need to know why the reference to Surface won't come up.
>> 
>> Here's the bits for the actual Cairo module (wrappings, etc.) and all:
>> https://gist.github.com/anonymous/72c4d2db7953c0d832c7
>> 
>> And this is the one in the "test" directory where I'm trying to get the 
>> methods in the above file to work without complaint outside of the directory:
>> https://gist.github.com/anonymous/11691be627d619066b8b
>> 
>> I'm hoping someone can tell me what I'm doing wrong, because I'm trying to 
>> do whatever possible. Also, I did upgrade the Swift components earlier when 
>> released.
>> 
>> To: ja...@apple.com
>> Date: Fri, 11 Dec 2015 21:21:06 -0500
>> CC: swift-users@swift.org
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: swift-users@swift.org
>> 
>> I'm going to. Now, does this mean anything labelled func inside the struct 
>> needs tacked on as well?
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: ja...@apple.com
>> Date: Fri, 11 Dec 2015 18:19:55 -0800
>> CC: har...@harlanhaskins.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> Did you make the class and its methods public?
>> 
>> Jack
>> On Dec 11, 2015, at 6:16 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> Here's what I'm getting:
>> 
>> /home/mgage/swift-cairo-bindings/test/main.swift:4:15: error: module 'Cairo' 
>> has no member named 'Surface'
>> let surface = Cairo.Surface(format: CAIRO_FORMAT_ARGB32, width: 421, height: 
>> 410)
>>               ^~~~~ ~~~~~~~
>> <unknown>:0: error: build had 1 command failures
>> 
>> So what I'm trying to do is to put all wrappings in a separate module named 
>> Cairo. Then, I want to use those methods outside of the module named Cairo. 
>> I renamed the class to Surface and fixed all references, but for some reason 
>> it keeps saying something about Surface not present. I need to look into 
>> whether a git repo may be needed.
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 20:31:20 -0500
>> CC: ja...@apple.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> Nope, but you’ll need a way to specify the class inside the module (the 
>> fully-qualified type name)
>> 
>> Cairo.Cairo should work fine.
>> 
>> On Dec 11, 2015, at 8:14 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> The module is Cairo. Do I need to change something (I'm assuming by struct 
>> you mean the name of the class containing wrappings). The class is named 
>> Cairo as well. Could renaming the module to ModCairo fix this?
>> 
>> Sent from Outlook Mobile
>> 
>> 
>> 
>> 
>> On Fri, Dec 11, 2015 at 5:11 PM -0800, "Harlan Haskins" 
>> <har...@harlanhaskins.com> wrote:
>> 
>> Is your struct named Cairo or Surface?
>> 
>> If Cairo is the module name, you're trying to instantiate the module.
>> 
>> - Harlan
>> 
>> On Dec 11, 2015, at 7:55 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> How would you use things like cairo.moveTo() outside of the wrapping file? 
>> I've gone as far as writing a module named "Cairo," taking the methods as 
>> mentioned above out, and moving them to their own directory "tests." I have 
>> added "Cairo" as a dependency for "tests," but there appears to be something 
>> wrong when I try to call:
>> 
>> let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
>> 
>> Why can I not call Cairo()? The error:
>> 
>> Compiling Swift Module 'test' (1 sources)
>> /home/mgage/swift-cairo-bindings/test/main.swift:4:18: error: cannot call 
>> value of non-function type 'module<Cairo>'
>> let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
>>             ~~~~~^
>> <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/swift-cairo-bindings/test/.build/debug/test.o/llbuild.yaml"]
>> 
>> I don't know whether or not I want to translate methods into straight-up 
>> properties yet.
>> 
>> Thanks, support here has been great so far. Cheers!
>> --MGage--
>> 
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 19:35:46 -0500
>> CC: gagemor...@outlook.com; swift-users@swift.org
>> To: ja...@apple.com
>> 
>> I considered that but couldn't find a cairo_get_font_scale function quickly 
>> to complement the setter 
>> 
>> But yes, a full wrapper would transparently handle getting and setting.
>> 
>> - Harlan
>> 
>> On Dec 11, 2015, at 7:28 PM, Jack Lawrence <ja...@apple.com> wrote:
>> 
>> For getter-setter pairs like `setLineWidth`, you might consider turning them 
>> into properties:
>> 
>> cairo.setLineWidth(0.1) // old
>> cairo.lineWidth = 0.1 // new
>> 
>> On Dec 11, 2015, at 4:22 PM, Gage Morgan via swift-users 
>> <swift-users@swift.org> wrote:
>> 
>> Harlan,
>> 
>> The answer is yes. I even managed to get a couple you didn't list on my own:
>> 
>> let cairo = Cairo(format: CAIRO_FORMAT_ARGB32, width: 421, height: 410)
>> cairo.scale(10.0, y: 10.0)
>> cairo.moveTo(29.0, y: 14.7)
>> cairo.lineTo(37.6, y: 13.0)
>> cairo.moveTo(37.6, y: 13.0)
>> cairo.lineTo(30.4, y: 22.2)
>> cairo.moveTo(30.4, y: 22.2)
>> cairo.lineTo(29.0, y: 14.7)
>> cairo.setLineWidth(0.1)
>> cairo.stroke()
>> cairo.surfaceWriteToPNG("boobs.png")
>> 
>> Swift is both really neat and really frustrating when learning it. 
>> 
>> Subject: Re: [swift-users] Need Help with C-to-Swift (finally)
>> From: har...@harlanhaskins.com
>> Date: Fri, 11 Dec 2015 17:21:38 -0500
>> CC: kwame.br...@gmail.com; swift-users@swift.org
>> To: gagemor...@outlook.com
>> 
>> Gage,
>> 
>> Sorry, I just got back from class.
>> 
>> I’ll respond in line!
>> 
>> On Dec 11, 2015, at 5:09 PM, Gage Morgan <gagemor...@outlook.com> wrote:
>> 
>> Harlan,
>> 
>> I read on cairographics.org about bindings awhile back. I think they want 
>> cairo, not surface, so we would have something like:
>> 
>> let cairo = Surface(format: CAIRO_FORMAT_ARGB32, width: 240, height: 80)
>> cairo.setFontFace("serif", weight: CAIRO_FONT_WEIGHT_BOLD)
>> cairo.setFontSize(32.0)
>> cairo.setSourceRGB(0.0, g: 0.0, b: 1.0)
>> cairo.moveTo(x: 10, y: 50)
>> cairo.showText("Hello, World!")
>> cairo.writeToPNG("hello.png")
>> 
>> Would this work the same as before without "surface" but instead "cairo”?
>> 
>> Absolutely! That’s just a variable name — it could be called ‘puppies’, 
>> though that’s not very readable.
>> 
>> 
>> Sent from Outlook Mobile
>> 
>> 
>> 
>> 
>> On Fri, Dec 11, 2015 at 2:00 PM -0800, "Gage Morgan via swift-users" 
>> <swift-users@swift.org> wrote:
>> 
>> I went and looked at it, and even now it looks like I want to take every 
>> function I've used in Cairo and translate it to Swift. Swift is such 
>> a...simple language compared to everything else. That being said, as a 
>> result of the specs, it is also much more verbose in terms of writing the 
>> code. Compared to other languages, it is written out instead of shoved onto 
>> a few lines. 
>> 
>> Is there a way to import modules into other modules? Because it looks like a 
>> weekend project that will eventually get posted by myself at 
>> http://github.com/Christoffen-Corporation. 
>> 
>> Sent from Outlook Mobile
>> 
>> I’d recommend having a look at the Swift package manager example again — 
>> https://github.com/apple/swift-package-manager/blob/master/Documentation/SystemModules.md
>> 
>> There’s an example of using those modules together.
>> 
>> 
>> On Fri, Dec 11, 2015 at 1:52 PM -0800, "Gage Morgan via swift-users" 
>> <swift-users@swift.org> wrote:
>> 
>> I meant the code posted in the Gist link above. I don't know jack squat 
>> about qsort. I'm hoping that if I can reverse-engineer code already 
>> produced, I can apply it to other parts of Cairo. 
>> 
>> Sent from Outlook Mobile
>> 
>> I’ll go ahead and comment it, but I think it’s simplistic enough that it 
>> should be readable with a grasp of some Swift concepts. Perhaps it’s a good 
>> idea to look through The Swift Programming Language to figure out some of 
>> the constructs I used — they’re fairly basic constructs.
>> 
>> 
>> On Fri, Dec 11, 2015 at 1:34 PM -0800, "Kwame Bryan"<kwame.br...@gmail.com> 
>> wrote:
>> 
>> Tutorial on the subject. http://chris.eidhof.nl/posts/swift-c-interop.html 
>> 
>> Regards
>> Kwame
>> 
>> 
>> <Mail Attachment.txt><Mail Attachment.txt>
>> 
>>  _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
>> 
>>  
>> _______________________________________________ swift-users mailing list 
>> swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to