Version 4 (modified by JacksonIsaac (Jackson Isaac), 9 years ago) (diff) |
---|
Summer of Code 2015
This page is dedicated to the projects accepted into Google SoC 2015, here's a list of accepted projects:
Project | Student | Mentor |
Revitalizing Pallet | Kyle Sammons | Michael Dickens |
Portfile generation framework | Chunyang Xu | Bradley Giesbrecht |
Improve Dependency Calculation using SAT solving | Jackson Isaac | Clemens Lang |
Revitalizing Pallet
Kyle is joining us again with an idea of his own. He noticed that Pallet is unmaintained and took on the task of bringing it back to life and improving it.
Generate Portfiles with auto-detection of build toolchain
To ease creation of new ports, the helper script portfile-gen is able to generated a Portfile stub by taking the name, version and possible a port group as input. This should be extended to handle more things automatically. Lots of options in a Portfile need to be figured out by the maintainer, although they could be extracted automatically from the source.
With just a URL to the tarball of a software, portfile-gen can usually automatically extract the name and the version from the filename. Furthermore, the master_sites and distfiles can be derived from the URL, with special handling for sites like sourceforge/gnu/github/etc. However, it should also be possible to specify this later and start portfile-gen with a pre-downloaded tarball. The checksums for the distfiles can be generated after fetching the tarball (portfile authors should be warned to verify these with upstream!) and even more information can be collected when extracting the tarball.
Different build systems usually have a unique way to be detected. For example, if a configure.ac
or configure.in
exists, but no configure
, we need to run autoconf. If there is also a Makefile.am
, but no Makefile.in
this is using automake and we should better use autoreconf
instead. If there is a CMakeLists.txt
, we should include the cmake port group. If there is just a Makefile, but no configure
, chances are high we can skip the configure phase with use_configure no
.
There are a lot more of such heuristics similar the examples above. This tasks includes implementing a framework where more of these indicators and the resulting actions can be added.
The goal of this task is to create an easy-to-use Portfile generator that derives the basic information of a Portfile automatically. This should lower the amount of lines to be written by Portfile authors and lower the barrier for writing the first Portfile. If this is implemented with Tcl modules in mind, this could probably even go into base as a port new
or port create
command.
- Classification: Medium
- Languages: Tcl
- Potential mentors: raimue, pixilla
Chunyang Xu will write an extensible framework for Portfile generation during GSoC.
Dependency calculation using SAT solving
This task consists of implementing a new dependency engine for MacPorts. The current dependency engine works for everyday use, but it could be extended to support a number of features we would like to have, such as dependencies on variants (ticket:126), versioned dependencies, pre-computing a plan of action (and asking the user for confirmation), conflict resolution proposals and metapackages. Note that we don't expect you to accomplish all of these ideas in one GSoC – setting the base would already be a huge help.
This task requires understanding the dependency relations (required for fetching, building, configuring; static and dynamic linking; dependence at runtime).
Instead of re-inventing the wheel it might be helpful to use software available to solve the problem of dependency calculation, e.g. by implementing an interface to a Common Upgradeability Description Format-based SAT solver. Such a solver could generate an execution plan we could propose to the user and finally execute when confirmed. For this task, the MacPorts concept of variants needs to be transformed into a representation the SAT solvers will be able to optimize. If time permits, rolling back on failed updates can also be implemented. There is also a libCUDF port that might be helpful to look at.
- Difficulty: Challenging
- Languages: Tcl, C
- Potential mentors: cal