<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div><blockquote type="cite"><b>I think an important feature of any C target proposal is that there will actually exist C targets which can be built under the proposal</b>. Until there are C people coming out of the woodwork saying "sure, I will repackage my software this way" I think the entire value is debatable.<br></blockquote></div>
<div> </div>
<div>I almost couldn't disagree more. No Swift project could be built with swiftpm when it was introduced without repackaging. I don't see why C support should be held to a different standard.<br></div>
<div> </div>
<div><blockquote type="cite">And I do not see realistically how we are ever going to support a project like libsodium, except calling out to automake.<br></blockquote><div> </div>
<div>A potential solution (one of many possible) would look a lot like how people generate Xcode projects for C build systems today; hand-tuning config.h headers and such. I know many people who will go to ungodly lengths to avoid the inevitable nightmare automake causes in a source-distributed dependency.<br></div>
<div> </div>
<div><blockquote type="cite">IMO something like that is a much, much better direction in the short-term, and once we have done the first step of "packaging" those software via automake we will have "real" C projects in our package manager and we can design our C support around the concerns of real projects instead of imaginary ones.<br></blockquote><div> </div>
<div>There are C projects that would benefit from modularization, header auditing, and cleanups that Swift and swiftpm would bring to it. C projects are massively disorganized because build systems are a ridiculous hodgepodge; we didn't be subject to that long tail of good and bad decisions.<br></div>
<div> </div>
<div>I don't think automake support would be a silver bullet at all, and contradict with many goals of swiftpm and llbuild to boot. Even targeting a really small subset of automake projects what liberties would unnecessarily complicate the project, and then there'd be the projects it doesn't support. (Oh? Wait? What version of the tools? Oh, from trunk? Oh, does the project take any liberties with its own organization? God help us when we start talking about C++…) <br></div>
<div> </div>
<div>"imaginary" is a reductive way of phrasing the problem space. You keep referring to "'real' projects" as a proxy for the individual project you want support for; while there's a lot to be said for real-world use cases, I don't think this proposal's direction should be dictated by just libsodium.<br></div>
<div> </div>
<div>Zachary<br></div>
</div>
<div> </div>
</div>
<div>On Sat, Jan 2, 2016, at 04:57 PM, Drew Crawford via swift-build-dev wrote:<br></div>
<blockquote type="cite"><div>Thanks for directing me to this, I missed it.<br></div>
<div> </div>
<div><blockquote type="cite">Most projects will not conform to these conventions.<br></blockquote><div> </div>
<div>Giggle. Kind of an understatement, no?<br></div>
</div>
<div> </div>
<div>Like, okay. Here is a project I'd like to package. (Read: I do package it, with features not in mainline swiftPM.) <a href="https://github.com/jedisct1/libsodium">https://github.com/jedisct1/libsodium</a><br></div>
<div> </div>
<div>Let's take a look at how this package realistically builds:<br></div>
<div> </div>
<div>* It has tests ("make check")<br></div>
<div>* It has various --enable-foo flags<br></div>
<div>* It swaps in special implementations depending on if you have <a href="https://github.com/jedisct1/libsodium/blob/master/src/libsodium/Makefile.am#L162">AMD64</a> or <a href="https://github.com/jedisct1/libsodium/blob/master/src/libsodium/Makefile.am#L145">AVX instructions</a> or <a href="https://github.com/jedisct1/libsodium/blob/master/src/libsodium/Makefile.am#L229">SSE2</a> etc.<br></div>
<div>* The optimization level is tuned on a <a href="https://github.com/jedisct1/libsodium/blob/master/dist-build/android-armv7-a.sh#L3">per-architecture basis</a><br></div>
<div>* They build (also) on Windows. They're not changing how they're packaged for "SwiftPM, the Mac/Linux build system".<br></div>
<div>* Oh and this is cryptography code. Do you *really* want to touch it?<br></div>
<div> </div>
<div><b>I think an important feature of any C target proposal is that there will actually exist C targets which can be built under the proposal</b>. Until there are C people coming out of the woodwork saying "sure, I will repackage my software this way" I think the entire value is debatable.<br></div>
<div> </div>
<div>Getting signoff from libdispatch/CoreFoundation is necessary but not sufficient to clear that hurdle. I would think getting the other C deps in our own project family to repackage would be "table stakes" for any new C build system. The real test are projects that are third-party and less friendly.<br></div>
<div> </div>
<div>And I do not see realistically how we are ever going to support a project like libsodium, except calling out to automake. An automake solution coincidentally supports both libdispatch and CoreFoundation right now. IMO something like that is a much, much better direction in the short-term, and once we have done the first step of "packaging" those software via automake we will have "real" C projects in our package manager and we can design our C support around the concerns of real projects instead of imaginary ones.<br></div>
<div> </div>
<div><div><blockquote type="cite"><div>On Jan 2, 2016, at 11:00 AM, Daniel Dunbar via swift-build-dev <<a href="mailto:swift-build-dev@swift.org">swift-build-dev@swift.org</a>> wrote:<br></div>
<div> </div>
<div><div><div>Happy 2016!<br></div>
<div> </div>
<div>I am working on an initial proposal for adding support for C language targets to the Swift package manager, and am interested in feedback:<br></div>
<div> <a href="https://github.com/ddunbar/swift-evolution/blob/master/proposals/NNNN-swiftpm-c-language-targets.md">https://github.com/ddunbar/swift-evolution/blob/master/proposals/NNNN-swiftpm-c-language-targets.md</a><br></div>
<div> </div>
<div>Some TL;DR:<br></div>
<div> - The proposal defines a basic convention for pure C language targets (no Swift/C mix and match, but other Swift targets can use the C targets).<br></div>
<div> - This is just intended to be the minimal initial feature, there will be a lot of add on work which I expect should be tackled in follow on PRs/proposals.<br></div>
<div> - The proposal doesn't try and outline every single nitty detail (e.g., exactly what C++ standard we will compile with). My intention is to pick a sensible default at implementation time and refine incrementally.<br></div>
<div> </div>
<div>Unless there are serious objections, I am hoping to hope to land this proposal soon and start work on the feature shortly after.<br></div>
<div> </div>
<div>Cheers,<br></div>
<div> - Daniel<br></div>
<div> </div>
<div> </div>
<div>_______________________________________________<br></div>
<div>swift-build-dev mailing list<br></div>
<div><a href="mailto:swift-build-dev@swift.org">swift-build-dev@swift.org</a><br></div>
<div>https://lists.swift.org/mailman/listinfo/swift-build-dev<br></div>
</div>
</div>
</blockquote></div>
</div>
<div><img style="height:1px !important;width:1px !important;border-top-width:0px !important;border-right-width:0px !important;border-bottom-width:0px !important;border-left-width:0px !important;margin-top:0px !important;margin-bottom:0px !important;margin-right:0px !important;margin-left:0px !important;padding-top:0px !important;padding-bottom:0px !important;padding-right:0px !important;padding-left:0px !important;" border="0" height="1" width="1" alt="" src="https://www.fastmailusercontent.com/proxy/10b469d346a6a3e62407ddcb992e64c157b547e1a0a28109a8064ada41237bbb/8647470737a3f2f25723030323431303e23647e23756e64676279646e2e65647f27766f2f60756e6f35707e6d3337323741745a7267364d22324175734d4151755349316146794f444b6a7435525a5555495145744257563376483f64636648475a777476647b667157436a6349413545564932344373335b464b69705161454963577537553831513f61757c4231464a4c687852383d22364542536864514a656241377e425d64637d41683c4268316f67307173426579726834675463357b6476663339384772524630346d2232464a69505e4a5a7d677d22364569497330553f694571725071316f4673665e63315d223247473a78747033764f6942785b4f657f603e646e4434363e635135355961377b413340784b675653773364375935655d23344/open"><br></div>
<div><u>_______________________________________________</u><br></div>
<div>swift-build-dev mailing list<br></div>
<div><a href="mailto:swift-build-dev@swift.org">swift-build-dev@swift.org</a><br></div>
<div><a href="https://lists.swift.org/mailman/listinfo/swift-build-dev">https://lists.swift.org/mailman/listinfo/swift-build-dev</a><br></div>
</blockquote><div> </div>
</body>
</html>