Summary: | ports-mgmt/portmaster: (r428604) mishandles USE_GCC=any context when lang/gcc6-devel is already installed, for example | ||
---|---|---|---|
Product: | Ports & Packages | Reporter: | Mark Millard <marklmi26-fbsd> |
Component: | Individual Port(s) | Assignee: | Stefan Eßer <se> |
Status: | Closed FIXED | ||
Severity: | Affects Only Me | CC: | gerald, tz |
Priority: | --- | Flags: | vlad-fbsd:
maintainer-feedback?
(tz) |
Version: | Latest | ||
Hardware: | Any | ||
OS: | Any |
Description
Mark Millard
2016-12-25 01:21:34 UTC
Hand over PR to new Maintainer of portmaster :) I plan to completely rewrite the upgrade strategy routine to use explicit state instead of the state implicitly encoded in a large number of global variables. Dependency tracking will also need to be re-implemented, and I'll keep this special case in mind. FYI, both lang/gcc6-devel and lang/gcc6 have expired and are being removed. (In reply to Rene Ladan from comment #3) > FYI, both lang/gcc6-devel and lang/gcc6 have expired and are being removed. I believe these days using lang/gcc9-devel and lang/gcc9 will be equivalent to what Mark originally described. Note that since recent changes to Mk/bsd.gcc.mk (revision r526751) USE_GCC=any no longer considers versions between GCC 4.2 and GCC_DEFAULT, so reproducing this will require lang/gcc9-devel installed (or whatever GCC_DEFAULT is at that point). (In reply to Rene Ladan from comment #3) and: (In reply to Gerald Pfeifer from comment #4) Summary of the below: Retesting with a more modern environment did not have the problem. May be portmaster was adjusted to not implicitly use the potentially wrong origin. Note: My /usr/ports/ was at -r526539 during this test. amd64 FreeBSD head -r358510 as well. I've done the following to test the current status for this (in a context with gcc9 as the default version and using a full bootstrap on amd64): pkg delete gcc9 portmaster -DK lang/gcc9-devel portmaster -DK devel/kBuild (Note: I normally use poudriere. This is just for testing.) Looking at devel/kBuild looks like it still indicates to use a default but that now looks like: OPTIONS_DEFINE= DOCS GCC OPTIONS_DEFAULT=GCC GCC_DESC= Build with GCC (should almost always be enabled) GCC_USE= GCC=yes (No "any".) The build of devel/kBuild completed and did not try to build lang/gcc9 when lang/gcc9-devel was already installed: it used the gcc9-devel materials. Looking at history, I believe this may have been addressed by my restructuring of the lang/gcc* ports with r441883 | gerald | 2017-05-27 23:27:21 +0000 (Sa., 27 Mai 2017) | 17 lines Essentially replace (or rather reinvent) the lang/gcc port, which more or less ended up identical to lang/gcc5 now that we differentiate between lang/gccX-devel and lang/gccX ports, by (or as) a meta-port that pulls in the respective lang/gccX port (based on the setting of $GCC_DEFAULT) and defines gcc, g++, and gfortran as symlinks to the respective versioned binaries. This is the end of a long journey establishing this infrastructure which is now similar to the one of the python ports, for example, and makes upgrading the default as well as adjusting the default locally a lot easier. (In reply to Gerald Pfeifer from comment #6) I just looked back at portmaster and gcc6 v s. gcc9. portmaster now and then had logic for following a conflcting port having been available instead but gcc6 of the time had nothing analogous to gcc9's: CONFLICTS= gcc9-devel-9.* in gcc6's Makefile . And, in fact, for the gcc9 context, the devel/kBuild build even has a log message that I did not know to look for before seeing what generates it in portmaster's code: ===>>> The dependency for lang/gcc9 seems to be handled by gcc9-devel-9.2.1.s20200215 ( So it avoided trying to install lang/gcc9 .) It appears to me that the old gcc6 problem was probably just the lack of a CONFLICTS assignment vs. gcc6-devel . portmaster allows (and at least tried to allow back then) use of the conflicting port when it finds such declared in the Makefile involved. Too bad I did not notice such back then. Then lack of the message would have pointed to the missing CONFLICTS assignment. Despite the switch to later gcc*'s, I'll leave the submittal listed as fixed, meaning some lang/gcc* having CONFLICTS now listed explicitly with respect to the matching *-devel variant. |