<!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>. &nbsp;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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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. &nbsp;(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++…)&nbsp;<br></div>
<div>&nbsp;</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>&nbsp;</div>
<div>Zachary<br></div>
</div>
<div>&nbsp;</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>&nbsp;</div>
<div><blockquote type="cite">Most projects will not conform to these conventions.<br></blockquote><div>&nbsp;</div>
<div>Giggle. &nbsp;Kind of an understatement, no?<br></div>
</div>
<div>&nbsp;</div>
<div>Like, okay. &nbsp;Here is a project I'd like to package. &nbsp;(Read: I do package it, with features not in mainline swiftPM.) &nbsp;<a href="https://github.com/jedisct1/libsodium">https://github.com/jedisct1/libsodium</a><br></div>
<div>&nbsp;</div>
<div>Let's take a look at how this package realistically builds:<br></div>
<div>&nbsp;</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&nbsp;<a href="https://github.com/jedisct1/libsodium/blob/master/src/libsodium/Makefile.am#L162">AMD64</a>&nbsp;or&nbsp;<a href="https://github.com/jedisct1/libsodium/blob/master/src/libsodium/Makefile.am#L145">AVX instructions</a>&nbsp;or&nbsp;<a href="https://github.com/jedisct1/libsodium/blob/master/src/libsodium/Makefile.am#L229">SSE2</a>&nbsp;etc.<br></div>
<div>* The optimization level is tuned on a&nbsp;<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. &nbsp;They're not changing how they're packaged for "SwiftPM, the Mac/Linux build system".<br></div>
<div>* Oh and this is cryptography code. &nbsp;Do you *really* want to touch it?<br></div>
<div>&nbsp;</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>. &nbsp;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>&nbsp;</div>
<div>Getting signoff from libdispatch/CoreFoundation is necessary but not sufficient to clear that hurdle. &nbsp;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. &nbsp;The real test are projects that are third-party and less friendly.<br></div>
<div>&nbsp;</div>
<div>And I do not see realistically how we are ever going to support a project like libsodium, except calling out to automake. &nbsp;An automake solution coincidentally supports both libdispatch and CoreFoundation right now. &nbsp;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>&nbsp;</div>
<div><div><blockquote type="cite"><div>On Jan 2, 2016, at 11:00 AM, Daniel Dunbar via swift-build-dev &lt;<a href="mailto:swift-build-dev@swift.org">swift-build-dev@swift.org</a>&gt; wrote:<br></div>
<div>&nbsp;</div>
<div><div><div>Happy 2016!<br></div>
<div>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</div>
<div>Cheers,<br></div>
<div> - Daniel<br></div>
<div>&nbsp;</div>
<div>&nbsp;</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>&nbsp;</div>
</body>
</html>