GSOC Ideas

Marcus Calhoun-Lopez mcalhoun at
Thu Feb 7 13:11:54 UTC 2019

As part of the GSOC application, it would be good to update the “Projects” section of the wiki page [1].
Here are a few idea that I was able to come up with.
I would appreciate any feedback.



 1. Update Orphaned Ports
     I originally became interested in MacPorts development because I wanted to install certain software, and the MacPorts version was (slightly) out of date.
     Fixing and/or updating ports is an excellent introduction to the MacPorts systems (phases, variants, PortGroups, etc.).
     It forces you to read the documentation (but only as an absolute last resort) and examine commit histories.
     This would not be the entire GSOC project, but it could be used as part of the application process and/or a supplement to the main project.

 2. Tweak qt5 PG
     Currently, the qt5 PG defines three procedures to declare dependencies on Qt components
     These should almost certainly be `options`.

 3. Make blacklisting MacPorts compilers easier.
     Currently, the compiler_blacklist_versions PG makes blacklisting ranges of compilers very easy, but it only works for Xcode compilers.
     It would be nice, for example, to be able to have something like `compiler.blacklist-append {macports-clang < 6.0}`.
 4. Add support for x86_64h architecture.
     x86_64h is a lot like  x86_64, except it allows compiler to take advantage of the Haswell microarchitecture.
     Unlike other architectures in MacPorts, x86_64h and x86_64 libraries can be linked together.
     As a side note, GCC does not support `-arch x86_64h`, but Xcode and MacPort Clang do.
     See for a discussion on why OpenSSL did NOT want to add support for x86_64h.

 5. Allow for multiple runs of each phase.
     There are times when it is convenient to run configure/build/destroot more than once.
     For example:
     *) cargo depends on the port cargo-stage1, whose only purpose is to help build cargo.
         Instead, one could run configure/build and use the resulting binary without installing another port.
     *) fluidsynth depends on a subproject, which has no use beyond aiding the build process.
         The subproject does not inherit the MacPorts settings.
         It would be nice to configure/build the subproject properly (from a MacPorts point of view).
     *) 75% of the muniversal PG is to get multiple runs of the configure/build/destroot phases.

 6. Allow a variant to more elegantly become “undefaulted.”
     When it was decided that support for the FLTK toolkit should no longer be the default in octave, the (previously default) variant fltk was renamed fltk_toolkit.
     There is another port (I cannot remember which one) that hacks together another solution to avoid renaming a previously default variant.
     Is there a better solution?

 7. Find a way to make mass revision increases easier.
     There are times when upgrading a library means increasing the revision of ALL of its dependencies (e.g. readline, icu, and libgcc).
     Finding all of these ports can be tricky and error prone.
         -) Some ports do not have an explicit dependency.
         -) Some ports do not explicitly set a revision variable.
         -) If there are sub-ports, then there might be multiple revision variables.
     Personally, I have a script that partially automates this process, but it is far from ideal.
     Is there a better way?

 8. Find a solution to the longstanding issue of std::locale being broken in GCC.

 9. Prevent `port reclaim` from removing build dependencies.

10. Improve the finding of dependencies.
      Finding dependencies can sometimes be difficult:
       *) Read the project documentation, which is sometimes incomplete.
       *) Read the code, but dependencies can be quite well hidden within the build system or the code itself.
       *) Run the port command in trace mode, which is excellent, but not 100%.
       *) Wait for the bug reports.
      Can this be improved?

11.Give Portfile better access to CFLAGS, CXXFLAGS, etc.
     Currently, CFLAGS and the like are set late in the process (arch flags added, -pipe added, etc.).
     Of course, there are good reasons for this.
     Unfortunately, this means that there is no Portfile access to these values.
     This causes some ugly workarounds such as duplication of code from the base or `configure.cmd printenv` and `configure.post_args {>>}`.
     Is there a way to give the Portfile access to most of these values?

12. Simplify compilers and mpi PGs with recent base changes.
      Recently, significant changes were made in the base code concerning compiler selection.
      Is there a way to use these changes to simplify the PortGroups that manage compiler selection via variants?

13. Buildbot & Continuous Integration Improvements
      I am afraid these are well outside of my knowledge area, but here are a few issues that have arisen lately.

More information about the macports-dev mailing list