[MacPorts] SummerOfCode modified

MacPorts noreply at macports.org
Wed Feb 14 11:09:38 UTC 2018


Page "SummerOfCode" was changed by umeshksingla
Diff URL: <https://trac.macports.org/wiki/SummerOfCode?action=diff&version=297>
Revision 297
Comment: Update startupitem code project and move it up the list
Changes:
-------8<------8<------8<------8<------8<------8<------8<------8<--------
Index: SummerOfCode
=========================================================================
--- SummerOfCode (version: 296)
+++ SummerOfCode (version: 297)
@@ -117,54 +117,6 @@
 * Languages: JSON, HTML, Python or any scripting language
 * Potential mentors: mojca
 
-==== Managing and Fixing Qt Versions ==== #qt
-
-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.
-
-* Difficulty: Medium to Hard
-* Languages: Tcl, C++, QMake
-* Potential mentors: michaelld
-
-==== Implement fakeroot functionality ==== #fakeroot
-
-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.
-
-The existing functionality of trace mode in darwintracelib1.0 could be leveraged for this task.
-
-* Difficulty: Medium
-* Languages: Tcl, C
-* Potential mentors: jeremyhu
-
-==== Phase out dependency on Xcode ==== #xcode
-
-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.
-
-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.
-
-* Difficulty: Medium
-* Languages: Tcl, C
-* Potential mentors: cal
-
-==== Speed up trace mode ==== #tracemode
-
-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.
-
-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.
-
-* Difficulty: Medium to Hard
-* Programming languages: Tcl, C
-* Potential mentors: cal
-
-==== Auto-detection of build dependencies ==== #dependencies-gen
-
-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.
-
-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.
-
-* Difficulty: Medium to Easy
-* Programming languages: Tcl, C
-* Potential mentors: cal
-
 ==== Improve startupitem code ==== #startupitem
 
 MacPorts has the ability to automatically generate startup items for the current platform. For OS X, these are plist files for launchd which will be installed as `/Library/LaunchDaemons/org.macports.*.plist`. The current code would need a little care and could make use of options which have been added in recent releases of launchd.
@@ -177,29 +129,35 @@
  - only modify specific XML tags to avoid clobbering additions by user
  - Support startupitems in standalone binary packages (currently a brutal hack is used to include daemondo in such packages, see #43648)
 
+It would be great to write some shorthand in a portfile that builds an XML launchd plist.
+
 * Difficulty: Easy
 * Languages: Tcl, C
 * Potential mentors: larryv, pixilla
 
-==== Improve fetching from version control ==== #fetchtypes
-
-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. 
-"`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. 
-
-Some checks will be needed in the fetch phase to ensure that an existing working copy:
-
-* 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.
-* 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.
-
-* Difficulty: Easy
-* Languages: Tcl, C, bash
-* Contact: larryv
+==== Managing and Fixing Qt Versions ==== #qt
+
+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.
+
+* Difficulty: Medium to Hard
+* Languages: Tcl, C++, QMake
+* Potential mentors: michaelld
+
+==== Implement fakeroot functionality ==== #fakeroot
+
+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.
+
+The existing functionality of trace mode in darwintracelib1.0 could be leveraged for this task.
+
+* Difficulty: Medium
+* Languages: Tcl, C
+* Potential mentors: jeremyhu
 
 ==== Generating Portfiles ====
 
-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.
-
-===== Perl modules integration from CPAN ===== #cpan2port
+There 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.
+
+===== i. Perl modules integration from CPAN ===== #cpan2port
 
 There 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.
 
@@ -212,13 +170,57 @@
 * Languages: Perl, probably Tcl
 * Potential mentors: pixilla
 
-===== Read packages from various package managers ===== #foo2port
+===== ii. Read packages from various package managers ===== #foo2port
 
 As 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.
 
 * Classification: Medium
 * Languages: Tcl, C, OCaml, Haskell, Lua, Node.js, etc.
 * Potential mentors: pixilla
+
+==== Phase out dependency on Xcode ==== #xcode
+
+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.
+
+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.
+
+* Difficulty: Medium
+* Languages: Tcl, C
+* Potential mentors: cal
+
+==== Speed up trace mode ==== #tracemode
+
+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.
+
+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.
+
+* Difficulty: Medium to Hard
+* Programming languages: Tcl, C
+* Potential mentors: cal
+
+==== Auto-detection of build dependencies ==== #dependencies-gen
+
+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.
+
+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.
+
+* Difficulty: Medium to Easy
+* Programming languages: Tcl, C
+* Potential mentors: cal
+
+==== Improve fetching from version control ==== #fetchtypes
+
+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. 
+"`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. 
+
+Some checks will be needed in the fetch phase to ensure that an existing working copy:
+
+* 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.
+* 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.
+
+* Difficulty: Easy
+* Languages: Tcl, C, bash
+* Contact: larryv
 
 === More Ideas/Hints for your own ideas ===
 
@@ -353,7 +355,7 @@
 Append `@macports.org` for email.
 
 ||= Name =||= Email =||= Area =||
-||= Jackson Isaac =|| [wiki:ijackson] || Backup Admin||
+||= Jackson Isaac =|| [wiki:ijackson] || Backup Admin ||
 ||= Umesh Singla =|| [wiki:umeshksingla] || Administrator ||
 
 == Mentors ==
@@ -361,8 +363,9 @@
 The following committers have agreed to be mentors for GSoC 2018 (append `@macports.org` for email)
 
 ||= Name =||= Email =||= Area =||
-||= Jeremy Huddleston Sequoia =|| [wiki:jeremyhu] || Mentor ||
+||= Jeremy Huddleston =|| [wiki:jeremyhu] || Mentor ||
 ||= Michael Dickens =|| [wiki:michaelld] || Mentor ||
+||= Bradley Giesbrecht =|| [wiki:pixilla] || Mentor ||
 ||= Mojca Miklavec =|| [wiki:mojca] || Mentor ||
 ||= Clemens Lang =|| [wiki:cal] || Mentor ||
 ||= Jackson Isaac =|| [wiki:ijackson] || Mentor ||
-------8<------8<------8<------8<------8<------8<------8<------8<--------

--
Page URL: <https://trac.macports.org/wiki/SummerOfCode>
MacPorts <https://www.macports.org/>
Ports system for macOS

This is an automated message. Someone added your email address to be
notified of changes on 'SummerOfCode' page.
If it was not you, please report to admin at macports.org.


More information about the macports-changes mailing list