Changes between Version 296 and Version 297 of SummerOfCode


Ignore:
Timestamp:
Feb 14, 2018, 11:09:37 AM (6 years ago)
Author:
umeshksingla (Umesh Singla)
Comment:

Update startupitem code project and move it up the list

Legend:

Unmodified
Added
Removed
Modified
  • SummerOfCode

    v296 v297  
    118118* Potential mentors: mojca
    119119
    120 ==== Managing and Fixing Qt Versions ==== #qt
    121 
    122 Fix issues in [query:status=assigned|new|reopened&port~=qt3|qt4|qt5 open tickets for Qt 3, Qt 4, and Qt 5], in particular allowing for concurrent installation of the various Qt versions. There are around 50 outstanding tickets for the various Qt versions, many of which would be resolved by installing all or enough of Qt* into the main install prefix subdirectories. Some involve patching and testing on multiple OSs. Some are probably invalid but need to be tested to determine validity. The end goal for this project is to allowing for concurrent installation of the various Qt versions, and then verifying and resolving as many issues as possible that weren't resolved by the concurrent changes. Requires knowledge of Portfile programming (Tcl), Qt programming (primarily C++), and Qt makefile programming (QMake); other programming knowledge that would be useful include shell (e.g., bash) and C.
    123 
    124 * Difficulty: Medium to Hard
    125 * Languages: Tcl, C++, QMake
    126 * Potential mentors: michaelld
    127 
    128 ==== Implement fakeroot functionality ==== #fakeroot
    129 
    130 Currently, MacPorts uses root privileges in the destroot phase. That should be replaced by a system that runs as the macports user but intercepts all operations that would require root privileges (chown/chmod/etc.) and record the resulting permissions in a database.
    131 
    132 The existing functionality of trace mode in darwintracelib1.0 could be leveraged for this task.
    133 
    134 * Difficulty: Medium
    135 * Languages: Tcl, C
    136 * Potential mentors: jeremyhu
    137 
    138 ==== Phase out dependency on Xcode ==== #xcode
    139 
    140 MacPorts currently requires a full Xcode installation, even though a lot of ports will install just fine with the Command Line Tools package only. Since we also have a number of ports that need Xcode to build, we cannot completely remove the Xcode dependency. Your task would be to provide a way for maintainers to easily identify ports that depend on Xcode and mark them as such, so MacPorts can warn users without Xcode installed that a port they want to install needs the full Xcode package.
    141 
    142 To achieve this, you can modify "trace mode", a `DYLD_INSERT_LIBRARIES`-based sandbox to track whether a port has accessed files belonging to the Xcode package. If it does, your modifications should cause a warning to be printed suggesting the port maintainers to add `use_xcode yes` to the Portfile (unless of course, it is already there). You should also implement an error message if a user without Xcode installed tries to install a port that has `use_xcode yes` set.
    143 
    144 * Difficulty: Medium
    145 * Languages: Tcl, C
    146 * Potential mentors: cal
    147 
    148 ==== Speed up trace mode ==== #tracemode
    149 
    150 Trace mode is a library preloading-based sandbox used to hide files that a port does not depend on or that are not part of a standard system's installation (such as `/usr/local`). This can avoid problems due to incompatible user-installed software and avoid "automagic" dependencies and increase the reproducibility of builds.
    151 
    152 Unfortunately, enabling trace mode adds a significant performance penalty to the build process. However, the trace mode code can certainly be optimized using appropriate cache data structures, such as a modified [http://en.wikipedia.org/wiki/Trie Trie]. Your task would be to identify the performance bottlenecks, draft appropriate caching data structures and implement them.
    153 
    154 * Difficulty: Medium to Hard
    155 * Programming languages: Tcl, C
    156 * Potential mentors: cal
    157 
    158 ==== Auto-detection of build dependencies ==== #dependencies-gen
    159 
    160 When creating a new portfile one of the problems is always the specification of the complete (and preferably minimal) list of build dependencies, especially when one starts with a complete install where most dependencies are already available.
    161 
    162 It is possible to invert the trace mode logic so that it detects all files a configure and/or build process accesses, in ${prefix} but outside of the port's build directory. This information can then be used to generate a dependency tree and information from the registry can then be used to simplify that tree so that it only lists direct dependencies. Can be combined with the above project. Consult mentor.
    163 
    164 * Difficulty: Medium to Easy
    165 * Programming languages: Tcl, C
    166 * Potential mentors: cal
    167 
    168120==== Improve startupitem code ==== #startupitem
    169121
     
    178130 - Support startupitems in standalone binary packages (currently a brutal hack is used to include daemondo in such packages, see #43648)
    179131
     132It would be great to write some shorthand in a portfile that builds an XML launchd plist.
     133
    180134* Difficulty: Easy
    181135* Languages: Tcl, C
    182136* Potential mentors: larryv, pixilla
    183137
    184 ==== Improve fetching from version control ==== #fetchtypes
    185 
    186 Make cvs/svn/git/hg/bzr fetch types checkout into the distfiles dir and then export into the work dir, to [[ticket:16373|avoid having to re-fetch]] after cleaning the work directory.
    187 "`fetch.type svn`" is inefficient in that it checks out a new working copy every time, directly to the work area. That would be like a normal port downloading the distfile every time. Instead, we should check out a working copy to that port's distpath, and then in the extract phase we should `svn export` it to the work area.
    188 
    189 Some checks will be needed in the fetch phase to ensure that an existing working copy:
    190 
    191 * has no modifications: check `svn status`. Ideally, we would try to clean up the working copy, for example by `svn revert`-ing modified or added or deleted files, and then in a second `svn status` run, delete any unversioned files. But it's already an improvement if we just discard the working copy if `svn status --ignore-externals` produces any output.
    192 * is from the right URL: check `svn info`: check if the "URL" is the one we want. If not, check that the "Repository Root" is a substring of the repository we want. If yes, try to `svn switch` to the URL and revision we want; if not, discard the working copy.
    193 
    194 * Difficulty: Easy
    195 * Languages: Tcl, C, bash
    196 * Contact: larryv
     138==== Managing and Fixing Qt Versions ==== #qt
     139
     140Fix issues in [query:status=assigned|new|reopened&port~=qt3|qt4|qt5 open tickets for Qt 3, Qt 4, and Qt 5], in particular allowing for concurrent installation of the various Qt versions. There are around 50 outstanding tickets for the various Qt versions, many of which would be resolved by installing all or enough of Qt* into the main install prefix subdirectories. Some involve patching and testing on multiple OSs. Some are probably invalid but need to be tested to determine validity. The end goal for this project is to allowing for concurrent installation of the various Qt versions, and then verifying and resolving as many issues as possible that weren't resolved by the concurrent changes. Requires knowledge of Portfile programming (Tcl), Qt programming (primarily C++), and Qt makefile programming (QMake); other programming knowledge that would be useful include shell (e.g., bash) and C.
     141
     142* Difficulty: Medium to Hard
     143* Languages: Tcl, C++, QMake
     144* Potential mentors: michaelld
     145
     146==== Implement fakeroot functionality ==== #fakeroot
     147
     148Currently, MacPorts uses root privileges in the destroot phase. That should be replaced by a system that runs as the macports user but intercepts all operations that would require root privileges (chown/chmod/etc.) and record the resulting permissions in a database.
     149
     150The existing functionality of trace mode in darwintracelib1.0 could be leveraged for this task.
     151
     152* Difficulty: Medium
     153* Languages: Tcl, C
     154* Potential mentors: jeremyhu
    197155
    198156==== Generating Portfiles ====
    199157
    200 There are multiple tasks related to the generation of Portfiles. Some of these may not be enough work for a full summer project, so they could be combined while writing proposals freely when the applying student wants to.
    201 
    202 ===== Perl modules integration from CPAN ===== #cpan2port
     158There are multiple tasks related to the generation of Portfiles (see below). Some of these may not be enough work for a full summer project, so they could be combined while writing proposals freely when the applying student wants to.
     159
     160===== i. Perl modules integration from CPAN ===== #cpan2port
    203161
    204162There has been [[browser:contrib/cpan2port|an attempt]] to write a script for automatic generation of Portfiles from CPAN. This would simplify the maintenance of Perl modules in MacPorts. Revive this project and finish the script or rewrite it.
     
    213171* Potential mentors: pixilla
    214172
    215 ===== Read packages from various package managers ===== #foo2port
     173===== ii. Read packages from various package managers ===== #foo2port
    216174
    217175As with the cpan2port proposal above, and with the previous [wiki:pypi2port pypi2port] GSoC entry, except with other various package managers, such as [http://opam.ocamlpro.com/ opam] for ocaml packages, [http://www.haskell.org/cabal/ cabal] for Haskell, [http://luarocks.org/ luarocks] for Lua, [https://npmjs.org/ npm] for node.js, and so on.
     
    220178* Languages: Tcl, C, OCaml, Haskell, Lua, Node.js, etc.
    221179* Potential mentors: pixilla
     180
     181==== Phase out dependency on Xcode ==== #xcode
     182
     183MacPorts currently requires a full Xcode installation, even though a lot of ports will install just fine with the Command Line Tools package only. Since we also have a number of ports that need Xcode to build, we cannot completely remove the Xcode dependency. Your task would be to provide a way for maintainers to easily identify ports that depend on Xcode and mark them as such, so MacPorts can warn users without Xcode installed that a port they want to install needs the full Xcode package.
     184
     185To achieve this, you can modify "trace mode", a `DYLD_INSERT_LIBRARIES`-based sandbox to track whether a port has accessed files belonging to the Xcode package. If it does, your modifications should cause a warning to be printed suggesting the port maintainers to add `use_xcode yes` to the Portfile (unless of course, it is already there). You should also implement an error message if a user without Xcode installed tries to install a port that has `use_xcode yes` set.
     186
     187* Difficulty: Medium
     188* Languages: Tcl, C
     189* Potential mentors: cal
     190
     191==== Speed up trace mode ==== #tracemode
     192
     193Trace mode is a library preloading-based sandbox used to hide files that a port does not depend on or that are not part of a standard system's installation (such as `/usr/local`). This can avoid problems due to incompatible user-installed software and avoid "automagic" dependencies and increase the reproducibility of builds.
     194
     195Unfortunately, enabling trace mode adds a significant performance penalty to the build process. However, the trace mode code can certainly be optimized using appropriate cache data structures, such as a modified [http://en.wikipedia.org/wiki/Trie Trie]. Your task would be to identify the performance bottlenecks, draft appropriate caching data structures and implement them.
     196
     197* Difficulty: Medium to Hard
     198* Programming languages: Tcl, C
     199* Potential mentors: cal
     200
     201==== Auto-detection of build dependencies ==== #dependencies-gen
     202
     203When creating a new portfile one of the problems is always the specification of the complete (and preferably minimal) list of build dependencies, especially when one starts with a complete install where most dependencies are already available.
     204
     205It is possible to invert the trace mode logic so that it detects all files a configure and/or build process accesses, in ${prefix} but outside of the port's build directory. This information can then be used to generate a dependency tree and information from the registry can then be used to simplify that tree so that it only lists direct dependencies. Can be combined with the above project. Consult mentor.
     206
     207* Difficulty: Medium to Easy
     208* Programming languages: Tcl, C
     209* Potential mentors: cal
     210
     211==== Improve fetching from version control ==== #fetchtypes
     212
     213Make cvs/svn/git/hg/bzr fetch types checkout into the distfiles dir and then export into the work dir, to [[ticket:16373|avoid having to re-fetch]] after cleaning the work directory.
     214"`fetch.type svn`" is inefficient in that it checks out a new working copy every time, directly to the work area. That would be like a normal port downloading the distfile every time. Instead, we should check out a working copy to that port's distpath, and then in the extract phase we should `svn export` it to the work area.
     215
     216Some checks will be needed in the fetch phase to ensure that an existing working copy:
     217
     218* has no modifications: check `svn status`. Ideally, we would try to clean up the working copy, for example by `svn revert`-ing modified or added or deleted files, and then in a second `svn status` run, delete any unversioned files. But it's already an improvement if we just discard the working copy if `svn status --ignore-externals` produces any output.
     219* is from the right URL: check `svn info`: check if the "URL" is the one we want. If not, check that the "Repository Root" is a substring of the repository we want. If yes, try to `svn switch` to the URL and revision we want; if not, discard the working copy.
     220
     221* Difficulty: Easy
     222* Languages: Tcl, C, bash
     223* Contact: larryv
    222224
    223225=== More Ideas/Hints for your own ideas ===
     
    354356
    355357||= Name =||= Email =||= Area =||
    356 ||= Jackson Isaac =|| [wiki:ijackson] || Backup Admin||
     358||= Jackson Isaac =|| [wiki:ijackson] || Backup Admin ||
    357359||= Umesh Singla =|| [wiki:umeshksingla] || Administrator ||
    358360
     
    362364
    363365||= Name =||= Email =||= Area =||
    364 ||= Jeremy Huddleston Sequoia =|| [wiki:jeremyhu] || Mentor ||
     366||= Jeremy Huddleston =|| [wiki:jeremyhu] || Mentor ||
    365367||= Michael Dickens =|| [wiki:michaelld] || Mentor ||
     368||= Bradley Giesbrecht =|| [wiki:pixilla] || Mentor ||
    366369||= Mojca Miklavec =|| [wiki:mojca] || Mentor ||
    367370||= Clemens Lang =|| [wiki:cal] || Mentor ||