ports/104075: database/postgresql-* ports: missing CONFLICTS

Sergiy Vyshnevetskiy serg at vostok.net
Fri Oct 6 20:40:43 UTC 2006


>Number:         104075
>Category:       ports
>Synopsis:       database/postgresql-* ports:  missing CONFLICTS
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Oct 06 20:40:28 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Sergiy Vyshnevetskiy
>Release:        6-stable
>Organization:
>Environment:
>Description:
Different versions of each database/postgresql-* port are always installed into the same place regardless of PostgreSQL version. So they must be marked as conflicting with any versions of themselves.

In general, each port with dinamically generated version, that is installed in the same place regardless of version, conflicts with all other versions of itself.
>How-To-Repeat:
Install databases/postgresql80-client port.
Install databases/postgresql-docs port. This installs postgresql-docs-8.0.* package.
Deinstall databases/postgresql80-client port.
Install  databases/postgresql81-client port.
Install databases/postgresql-docs. This installs postgresql-docs-8.1.* package ON TOP of  postgresql-docs-8.0.* package!
This can be done with any of databases/postgresql-* ports.
>Fix:
Porters handbook says:

Please make sure that CONFLICTS does not match this port's package itself, or else forcing its installation with FORCE_PKG_REGISTER will no longer work.

.. but it worked just fine when I tested it. Re-check, please, and submit a PR to docs if this statement in handbook is outdated - this can really simplify setting of CONFLICTS variable.

If I'm correct, then just add to all databases/postgresql-*/Makefile a line like that:

CONFLICTS=${PORTNAME}${PKGNAMESUFFIX}-*

.. unless the idea of port conflicting with itself offends your delicate sence of logic. :)
Current ports .mk scripts correctly detect that packet is already installed, I checked.

If I'm wrong (or the sence was offended :) ), there are two ways to fix the bug.

1. Construct a string from version, enclosing each character into '[!' and ']':
        version -> [!v][!e][!r][!s][!i][!o][!n]
That's proper shell-globbing expression to say "any name except 'version'". Make is incapable of doing such fine character manipulations, AFAIK, so you will have to use an external program.

2. Add version to the installation path.

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list