<div dir="ltr">Hi All,<div><br></div><div>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.</div><div><br></div><div>With the <a href="https://github.com/apple/swift-package-manager/pull/183">great initial work</a> 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.</div><div><br></div><div>Thus I wanted to kick off a discussion of what approach of solving this problem with SwiftPM should be. The simple solution, which I&#39;m tentatively proposing, is to have an optional &quot;post-clone&quot; script in the package&#39;s repository. Then, the Package.swift would optionally contain a field for the path to this script - and if present, it&#39;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&#39;d only run once when cloning and then only after each clean. </div><div><br></div><div>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.</div><div><br></div><div>What do you think?</div><div><br></div><div>Honza Dvorsky</div><div><br></div><div><br></div></div>