From owner-freebsd-ports@FreeBSD.ORG Tue May 20 22:25:58 2014 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 89548EF6 for ; Tue, 20 May 2014 22:25:58 +0000 (UTC) Received: from outgoing.tristatelogic.com (segfault.tristatelogic.com [69.62.255.118]) by mx1.freebsd.org (Postfix) with ESMTP id 6CE332A6A for ; Tue, 20 May 2014 22:25:58 +0000 (UTC) Received: from segfault-nmh-helo.tristatelogic.com (localhost [127.0.0.1]) by segfault.tristatelogic.com (Postfix) with ESMTP id 77E6B3AD38 for ; Tue, 20 May 2014 15:25:55 -0700 (PDT) From: "Ronald F. Guilmette" To: freebsd-ports@freebsd.org Subject: PORT META: Installed files conflict between ports Date: Tue, 20 May 2014 15:25:55 -0700 Message-ID: <86305.1400624755@server1.tristatelogic.com> X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 May 2014 22:25:58 -0000 I just submitted the following PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=190027 I was a bit flabberghasted to believe that such file conflicts between ports was even possible. Seeing that it is possible prompted me to write the attached small Perl script, which can quickly find all such cases among a set of installed ports on a given system. To use this simple script, place it somewhere on your path and name it "pccheck" (Port Conflict Check). Then do the following: cd /var/db/pkg pccheck * That will tell you if any of your installed ports have installed any files which any other of your installed ports also believe that they also have installed. When I ran it on my system, I got this, which is worrying, to say the least: mplayer2-2.0.20130428_4: Conflict -- file=/usr/local/bin/mplayer pkg=mplayer-1.1.r20140418 mplayer2-2.0.20130428_4: Conflict -- file=/usr/local/man/man1/mplayer.1.gz pkg=mplayer-1.1.r20140418 samba36-nmblookup-3.6.23: Conflict -- file=/usr/local/bin/nmblookup pkg=samba36-3.6.23 samba36-nmblookup-3.6.23: Conflict -- file=/usr/local/man/man1/nmblookup.1.gz pkg=samba36-3.6.23 samba36-nmblookup-3.6.23: Conflict -- file=/usr/local/man/man5/smb.conf.5.gz pkg=samba36-3.6.23 How does this sort of problem even creep in (to the ports tree)? Is there nothing in place which prevents it from arising? ============================================================================ #!/usr/bin/perl -w use strict; my $origin; my %installed_files; foreach my $arg (@ARGV) { next unless (-d "$arg"); open (IFILE, "<$arg/+CONTENTS") || die "$arg: Open failed\n"; while (my $line = ) { chop $line; if ($line =~ m/^\@/) { if ($line =~ m/^\@conflicts /) { # print STDERR ("$arg: $line\n"); # do nothing } elsif ($line =~ m/^\@cwd /) { $origin = $'; } else { # do nothing } } else { next if ($line =~ m/^\+[A-Z]/); die "$arg: Origin not defined\n" unless (defined ($origin)); my $fullpath = "$origin/$line"; # print "$fullpath\n"; if (exists ($installed_files{$fullpath})) { print STDERR ("$arg: Conflict -- file=$fullpath pkg=$installed_files{$fullpath}\n"); } else { $installed_files{$fullpath} = $arg; } } } close (IFILE); }