<font size=2 face="sans-serif">To add one more question on the installation
of system dependencies - does that then drive a need to install as root/sudo?
If so, I can see that being a challenge for any cloud based application
deployments, where your both unlikely to be able to run as root/sudo, or
indeed be able to install into /usr/lib</font>
<br>
<br>
<br><font size=3>Chris</font>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">From: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Honza Dvorsky via swift-build-dev
&lt;swift-build-dev@swift.org&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Max Howell &lt;max.howell@apple.com&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Cc: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">&quot;swift-build-dev@swift.org&quot;
&lt;swift-build-dev@swift.org&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Date: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">21/03/2016 18:38</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">Re: [swift-build-dev]
[Discussion Starter] Package post-clone script</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Sent by: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">swift-build-dev-bounces@swift.org</font>
<br>
<hr noshade>
<br>
<br>
<br><font size=3>I personally don't like the idea of an arbitrary script
either, it was just the first obvious solution to a problem I believe needs
solving. The advantage of building from source even of these base dependencies
is that the exact version of system dependencies</font>
<br><font size=3>- can be ensured to be the same version across platforms</font>
<br><font size=3>- their version is part of the explicit dependency graph</font>
<br>
<br><font size=3>Currently, AFAIR, installing Redis with homebrew and apt-get
each produce a different version, which IMO defeats the point of having
a dependency manager in the first place. But I guess if your proposal could
ensure that the same version is installed on all platforms, this particular
problem would be solved.</font>
<br>
<br><font size=3>&gt;&nbsp;So the question becomes, is this sufficient?
To have `brew install openssl` run, or do you really need to install from
source?</font>
<br>
<br><font size=3>I'm still not sure. Now I think your proposal will probably
help with most cases (which is a very good way to approach things), but
definitely not all. Imagine you yourself having a cross-platform C project
which needs platform configuring before compilation. Even when you're completely
in control, the fact that you still can't get this working is troubling.
But maybe I'm just inflating extremely uncommon usecases.</font>
<br>
<br><font size=3>One more thing - consider two Swift packages each needing
a different version of OpenSSL. Does your proposal handle that case?</font>
<br>
<br><font size=3>Anyway, I'd love to read your proposal and then re-evaluate
whether I still feel like there's a large enough benefit in introducing
such customization to SwiftPM :)</font>
<br>
<br><font size=3>Honza</font>
<br>
<br><font size=3>On Mon, Mar 21, 2016 at 6:19 PM Max Howell &lt;</font><a href=mailto:max.howell@apple.com><font size=3 color=blue><u>max.howell@apple.com</u></font></a><font size=3>&gt;
wrote:</font>
<br>
<br><font size=3>On Mar 19, 2016, at 10:55 AM, Honza Dvorsky via swift-build-dev
&lt;</font><a href="mailto:swift-build-dev@swift.org" target=_blank><font size=3 color=blue><u>swift-build-dev@swift.org</u></font></a><font size=3>&gt;
wrote:</font>
<br>
<br><font size=3>Hi All,</font>
<br>
<br><font size=3>today I was trying to investigate how to build a proper
cross-platform server-side Swift project and only use SwiftPM to do it.
In particular, I was interested in getting OpenSSL/libcurl working as a
dependency (built from source). The main reason is that currently the big
Swift server frameworks all require manual steps during deployment (running
apt-get/brew to install libcurl/openssl/others) and I am trying to get
rid of these manual steps, eventually only requiring a `swift build` and
run.</font>
<br>
<br><font size=3>With the </font><a href="https://github.com/apple/swift-package-manager/pull/183" target=_blank><font size=3 color=blue><u>great
initial work</u></font></a><font size=3> to support building C-family packages
in SwiftPM done by Ankit, I was able to have a simple C package as a dependency,
as advertised. However, the reality of big cross-platform open source projects
like OpenSSL and libcurl is that in order to actually build it from source,
a configure (or similar) script has to be run to get the source code ready
for compilation. And this is where I got stuck.</font>
<br>
<br><font size=3>Thus I wanted to kick off a discussion of what approach
of solving this problem with SwiftPM should be. The simple solution, which
I'm tentatively proposing, is to have an optional &quot;post-clone&quot;
script in the package's repository. Then, the Package.swift would optionally
contain a field for the path to this script - and if present, it'd get
run after SwiftPM clones this package. Note that this would be a &quot;post-clone&quot;
script, not a &quot;prebuild&quot; script - I imagine it'd only run once
when cloning and then only after each clean.&nbsp;</font>
<br>
<br><font size=3>In order to get users to stop having to run manual script
to install all dependencies, I believe that we need to allow packages to
declare what work needs to be done on its source before compilation can
begin.</font>
<br>
<br><font size=3>I have a proposal I’d like to push today that adds knowledge
to SwiftPM about how to install system dependencies for System Module Packages.</font>
<br>
<br><font size=3>We are not keen to add arbitrary script execution to SwiftPM,
because: 1) Arbitrary scripts cannot be controlled and this leads to dependency
hell and 2) arbitrary scripts mean your package graph may do anything,
which nobody wants.</font>
<br>
<br><font size=3>Now I’m fine with the “root package” ie. the package
the user has control over doing more, but this would be a different discussion.</font>
<br>
<br><font size=3>So the question becomes, is this sufficient? To have `brew
install openssl` run, or do you really need to install from source?</font>
<br>
<br><font size=3>Max</font>
<br><tt><font size=2>_______________________________________________<br>
swift-build-dev mailing list<br>
swift-build-dev@swift.org<br>
</font></tt><a href="https://lists.swift.org/mailman/listinfo/swift-build-dev"><tt><font size=2>https://lists.swift.org/mailman/listinfo/swift-build-dev</font></tt></a><tt><font size=2><br>
</font></tt>
<br>
<br>