Index: ChangeLog
===================================================================
RCS file: /cvsroot/fink/fink/ChangeLog,v
retrieving revision 1.238
diff -u -r1.238 ChangeLog
--- ChangeLog	6 Jul 2004 20:14:28 -0000	1.238
+++ ChangeLog	7 Jul 2004 19:54:37 -0000
@@ -30,6 +30,12 @@
 	on branch_0_20 which improves validation of the BuildDependsOnly
 	field (including a change in .deb's created by fink), and bugfixes
 
+2005-23-04  Daniel Macks  <dmacks@netspace.org>
+
+	* fink-virtual-pkgs.in: Changed apt mode to respect "status"
+	(parallel to that method in Status.pm) instead of assuming
+	presence of package entry is equivalent to it being installed.
+
 2004-05-21  Dave Morrison  <dmrrsn@users.sourceforge.net>
 
 	* VERSION: Bumped package manager version to 0.20.2, a release
Index: fink-virtual-pkgs.in
===================================================================
RCS file: /cvsroot/fink/fink/fink-virtual-pkgs.in,v
retrieving revision 1.10
diff -u -r1.10 fink-virtual-pkgs.in
--- fink-virtual-pkgs.in	14 Feb 2004 15:22:13 -0000	1.10
+++ fink-virtual-pkgs.in	7 Jul 2004 19:54:37 -0000
@@ -54,7 +54,7 @@
 		}
 		$epoch=0;
 		if ($options{dpkg}) {
-			if (@versions = parse_fullversion($hash->{version})) {
+			if (@versions = parse_fullversion($hash->{version}) and exists $hash->{status} and $hash->{status} =~ /^\S+\s+ok\s+installed$/i) {
 				printf "%s\t%lu\t%s\t%s\n",$hash->{package},$versions[0],$versions[1],$versions[2];
 				# for provides we tell dpkg about them with the version as zero
 				if (exists $hash->{provides})
@@ -67,7 +67,7 @@
 				}
 			}
 		} else {
-			printf "Package: %s\nStatus: install ok installed\nVersion: %s\n", $hash->{package},$hash->{version};
+			printf "Package: %s\nStatus: %s\nVersion: %s\n", $hash->{package},$hash->{status},$hash->{version};
 			foreach $field (keys %$hash)
 			{
 				next if (($field eq "package") or ($field eq "status") or ($field eq "version"));
Index: perlmod/Fink/ChangeLog
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v
retrieving revision 1.657
diff -u -r1.657 ChangeLog
--- perlmod/Fink/ChangeLog	6 Jul 2004 20:12:11 -0000	1.657
+++ perlmod/Fink/ChangeLog	7 Jul 2004 19:54:38 -0000
@@ -1,3 +1,17 @@
+2004-07-07  Benjamin Reed  <rangerrick@users.sourceforge.net>
+
+	* PkgVersion.pm: Check whether VirtPackage's return value is
+	undefined, since "0" is a true version, undefined is a non-
+	existent one.
+
+	* Services.pm: Treat undefined values passed to a version compare
+	as a false value.
+
+	* Status.pm: Simplify status checking.
+
+	* VirtPackage.pm: Change all virtuals to exist even if they're
+	not installed, with status "purge ok not-installed".
+
 2004-07-02  Dave Morrison  <dmrrsn@users.sourceforge.net>
 
 	* Bootstrap.pm:  Allow bootstrapping with perl 5.8.2 and perl 5.8.4.
@@ -156,6 +170,13 @@
 
 	* VirtPackage.pm:  adjust the Provides in the system-perl packages
 
+2004-05-21  Daniel Macks  <dmacks@netspace.org>
+
+	* VirtPackage.pm: Replaced dpkg "status" strings with constants.
+	Changed query_package to respect "status" (parallel to that method
+	in Status.pm) instead of assuming presence of package entry is
+	equivalent to it being installed.
+
 2004-05-13  Daniel Macks  <dmacks@netspace.org>
 
 	* Command.pm: Fixed rm_f to not return failure for non-existent	files.
Index: perlmod/Fink/PkgVersion.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v
retrieving revision 1.278
diff -u -r1.278 PkgVersion.pm
--- perlmod/Fink/PkgVersion.pm	1 Jul 2004 14:39:56 -0000	1.278
+++ perlmod/Fink/PkgVersion.pm	7 Jul 2004 19:54:39 -0000
@@ -958,7 +958,7 @@
 	my $self = shift;
 
 	if ((&version_cmp(Fink::Status->query_package($self->{_name}), '=', $self->get_fullversion())) or
-	   (&version_cmp(Fink::VirtPackage->query_package($self->{_name}), '=', $self->get_fullversion()))) {
+	   ((defined Fink::VirtPackage->query_package($self->{_name}) and &version_cmp(Fink::VirtPackage->query_package($self->{_name}), '=', $self->get_fullversion())))) {
 		return 1;
 	}
 	return 0;
Index: perlmod/Fink/Services.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/Services.pm,v
retrieving revision 1.112
diff -u -r1.112 Services.pm
--- perlmod/Fink/Services.pm	11 May 2004 18:28:09 -0000	1.112
+++ perlmod/Fink/Services.pm	7 Jul 2004 19:54:39 -0000
@@ -633,7 +633,9 @@
 	$a = shift;
 	$op = shift;
 	$b = shift;
-	
+
+	return if (not defined $a or not defined $op or not defined $b);
+
 	if (exists($Version_Cmp_Cache{$a}{$b})) {
 		$res = $Version_Cmp_Cache{$a}{$b};
 	} else {
Index: perlmod/Fink/Status.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/Status.pm,v
retrieving revision 1.15
diff -u -r1.15 Status.pm
--- perlmod/Fink/Status.pm	17 Feb 2004 08:28:13 -0000	1.15
+++ perlmod/Fink/Status.pm	7 Jul 2004 19:54:39 -0000
@@ -150,17 +150,10 @@
 
 	$self->validate();
 
-	if (not exists $self->{$pkgname}) {
-		return 0;
+	if (exists $self->{$pkgname} and $self->{$pkgname}->{status} =~ /\s+installed$/i) {
+		return $self->{$pkgname}->{version};
 	}
-	$hash = $self->{$pkgname};
-	if (not exists $hash->{status} or not exists $hash->{version}) {
-		return 0;
-	}
-	if ($hash->{status} =~ /^\S+\s+ok\s+installed$/i) {
-		return $hash->{version};
-	}
-	return 0;
+	return;
 }
 
 ### retrieve whole list with versions
Index: perlmod/Fink/VirtPackage.pm
===================================================================
RCS file: /cvsroot/fink/fink/perlmod/Fink/VirtPackage.pm,v
retrieving revision 1.42
diff -u -r1.42 VirtPackage.pm
--- perlmod/Fink/VirtPackage.pm	1 Jul 2004 01:52:53 -0000	1.42
+++ perlmod/Fink/VirtPackage.pm	7 Jul 2004 19:54:39 -0000
@@ -31,6 +31,11 @@
 use POSIX qw(uname);
 use Fink::Status;
 
+use constant {
+	STATUS_PRESENT => "install ok installed",
+	STATUS_ABSENT  => "purge ok not-installed",
+};
+
 use vars qw(
 	%options
 );
@@ -81,72 +86,58 @@
 	# determine the kernel version
 	($dummy,$dummy,$darwin_version) = uname();
 
-	# now find the cctools version
-	print STDERR "- checking for cctools version... " if ($options{debug});
-	if (-x "/usr/bin/ld" and -x "/usr/bin/what") {
-		foreach(`/usr/bin/what /usr/bin/ld`) {
-			if (/cctools-(\d+)/) {
-				$cctools_version = $1;
-				last;
-			}
-		}
-		if (defined $cctools_version) {
-			print STDERR $cctools_version, "\n" if ($options{debug});
-		} else {
-			print STDERR "unknown\n" if ($options{debug});
-		}
-	} else {
-		print STDERR "/usr/bin/ld or /usr/bin/what not executable\n" if ($options{debug});
-	}
-
-	if (-x "/usr/bin/cc" and my $cctestfile = POSIX::tmpnam() and -x "/usr/bin/touch") {
-		system("/usr/bin/touch ${cctestfile}.c");
-		my $command = "/usr/bin/cc -o ${cctestfile}.dylib ${cctestfile}.c -dynamiclib -single_module >/dev/null 2>\&1";
-		print STDERR "- running $command... " if ($options{debug});
-		if (system($command) == 0) {
-			print STDERR "-single_module passed\n" if ($options{debug});
-			$cctools_single_module = '1.0';
-		} else {
-			print STDERR "failed\n" if ($options{debug});
-			$cctools_single_module = undef;
-		}
-		unlink($cctestfile);
-		unlink("${cctestfile}.c");
-		unlink("${cctestfile}.dylib");
-	}
 	# create dummy object for kernel version
 	$hash = {};
 	$hash->{package} = "darwin";
-	$hash->{status} = "install ok installed";
+	$hash->{status} = STATUS_PRESENT;
 	$hash->{version} = $darwin_version."-1";
 	$hash->{description} = "[virtual package representing the kernel]";
+	$hash->{descdetail} = <<END;
+This package represents the XNU (Darwin) kernel, which is
+a core part of the system for Mac OS X and all other Darwin
+variants.
+END
+	$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
 	$self->{$hash->{package}} = $hash;
 	
 	# create dummy object for system version, if this is OS X at all
 	print STDERR "- checking OSX version... " if ($options{debug});
+
+	$hash = {};
+	$hash->{package} = "macosx";
+	$hash->{description} = "[virtual package representing the system]";
+	$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
 	if (Fink::Services::get_sw_vers() ne 0) {
-		print STDERR Fink::Services::get_sw_vers(), "\n" if ($options{debug});
-		$hash = {};
-		$hash->{package} = "macosx";
-		$hash->{status} = "install ok installed";
+		$hash->{status} = STATUS_PRESENT;
 		$hash->{version} = Fink::Services::get_sw_vers()."-1";
-		$hash->{description} = "[virtual package representing the system]";
-		$self->{$hash->{package}} = $hash;
+		print STDERR $hash->{version}, "\n" if ($options{debug});
 	} else {
+		$hash->{status} = STATUS_ABSENT;
+		$hash->{version} = '0-0';
 		print STDERR "unknown\n" if ($options{debug});
 	}
+	$hash->{descdetail} = <<END;
+This package represents the Mac OS X software release.
+It will not show as installed on pure Darwin systems.
+END
+	$self->{$hash->{package}} = $hash;
 
 	# create dummy object for system perl
 	print STDERR "- checking system perl version... " if ($options{debug});
+
+	$hash = {};
+	$hash->{package} = "system-perl";
+	$hash->{description} = "[virtual package representing perl]";
+	$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+	$hash->{descdetail} = <<END;
+This package represents the version of perl installed on the
+system in /usr/bin/perl.
+END
+
 	if (defined Fink::Services::get_system_perl_version()) {
-		print STDERR Fink::Services::get_system_perl_version(), "\n" if ($options{debug});
-		$hash = {};
-		$hash->{package} = "system-perl";
-		$hash->{status} = "install ok installed";
 		$hash->{version} = Fink::Services::get_system_perl_version()."-1";
-		$hash->{description} = "[virtual package representing perl]";
-		$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php?phpLang=en#virtpackage";
-
+		$hash->{status} = STATUS_PRESENT;
+		print STDERR Fink::Services::get_system_perl_version(), "\n" if ($options{debug});
 		my $perlver = my $shortver = Fink::Services::get_system_perl_version();
 		$shortver =~ s/\.//g;
 		my $perlprovides = 'perl' . $shortver . '-core, system-perl' . $shortver;
@@ -155,10 +146,12 @@
 		}
 		$hash->{provides} = $perlprovides;
 
-		$self->{$hash->{package}} = $hash;
 	} else {
+		$hash->{version} = '0-0';
+		$hash->{status} = STATUS_ABSENT;
 		print STDERR "unknown\n" if ($options{debug});
 	}
+	$self->{$hash->{package}} = $hash;
 
 	# create dummy object for java
 	print STDERR "- checking Java directories:\n" if ($options{debug});
@@ -176,22 +169,38 @@
 				$ver =~ s/^(..).*$/$1/;
 				$hash = {};
 				$hash->{package}     = "system-java${ver}";
-				$hash->{status}      = "install ok installed";
+				$hash->{status}      = STATUS_PRESENT;
 				$hash->{version}     = $dir . "-1";
 				$hash->{description} = "[virtual package representing Java $dir]";
-				$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php?phpLang=en#virtpackage";
+				$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+				$hash->{descdetail}  = <<END;
+This package represents the currently installed version
+of Java $dir.
+END
 				$self->{$hash->{package}} = $hash;
 
+				$hash = {};
+				$hash->{package}     = "system-java${ver}-dev";
+				$hash->{status}      = STATUS_PRESENT;
+				$hash->{version}     = $dir . "-1";
+				$hash->{description} = "[virtual package representing Java $dir development headers]";
+				$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+				$hash->{descdetail}  = <<END;
+This package represents the development headers for
+Java $dir.  If this package shows as not being installed,
+you must download the Java SDK from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
+
 				if (-d $javadir . '/' . $dir . '/Headers') {
 					print STDERR "$dir/Headers " if ($options{debug});
-					$hash = {};
-					$hash->{package}     = "system-java${ver}-dev";
-					$hash->{status}      = "install ok installed";
-					$hash->{version}     = $dir . "-1";
-					$hash->{description} = "[virtual package representing Java $dir development headers]";
-					$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php?phpLang=en#virtpackage";
-					$self->{$hash->{package}} = $hash;
+				} else {
+					$hash->{status} = STATUS_ABSENT;
 				}
+				$self->{$hash->{package}} = $hash;
 				print STDERR "\n" if ($options{debug});
 			} else {
 				print STDERR "nothing\n" if ($options{debug});
@@ -201,16 +210,24 @@
 	}
 
 	# create dummy object for Java3D
+	$hash = {};
+	$hash->{package}     = "system-java3d";
+	$hash->{status}      = STATUS_PRESENT;
+	$hash->{version}     = "0-1";
+	$hash->{description} = "[virtual package representing Java3D]";
+	$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+	$hash->{descdetail}  = <<END;
+This package represents the Java3D API.  If it does not show
+as installed, you can download it from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
+
 	print STDERR "- searching for java3d... " if ($options{debug});
 	if (-f '/System/Library/Java/Extensions/j3dcore.jar') {
 		print STDERR "found /System/Library/Java/Extensions/j3dcore.jar\n" if ($options{debug});
-		$hash = {};
-		$hash->{package}     = "system-java3d";
-		$hash->{status}      = "install ok installed";
-		$hash->{version}     = "0-1";
-		$hash->{description} = "[virtual package representing Java3D]";
-		$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php?phpLang=en#virtpackage";
-		$self->{$hash->{package}} = $hash;
 		if (open(FILEIN, '/Library/Receipts/Java3D.pkg/Contents/Info.plist')) {
 			local $/ = undef;
 			if (<FILEIN> =~ /<key>CFBundleShortVersionString<\/key>[\r\n\s]*<string>([\d\.]+)<\/string>/) {
@@ -219,20 +236,31 @@
 			close(FILEIN);
 		}
 	} else {
+		$hash->{status} = STATUS_ABSENT;
+		$hash->{version} = '0-0';
 		print STDERR "missing /System/Library/Java/Extensions/j3dcore.jar\n" if ($options{debug});
 	}
+	$self->{$hash->{package}} = $hash;
 
 	# create dummy object for JavaAdvancedImaging
+	$hash = {};
+	$hash->{package}     = "system-javaai";
+	$hash->{status}      = STATUS_PRESENT;
+	$hash->{version}     = "0-1";
+	$hash->{description} = "[virtual package representing Java Advanced Imaging]";
+	$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+	$hash->{descdetail}  = <<END;
+This package represents the Java Advanced Imaging API.  If it
+does not show as installed, you can download it from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
+
 	print STDERR "- searching for javaai... " if ($options{debug});
 	if (-f '/System/Library/Java/Extensions/jai_core.jar') {
 		print STDERR "found /System/Library/Java/Extensions/jai_core.jar\n" if ($options{debug});
-		$hash = {};
-		$hash->{package}     = "system-javaai";
-		$hash->{status}      = "install ok installed";
-		$hash->{version}     = "0-1";
-		$hash->{description} = "[virtual package representing Java Advanced Imaging]";
-		$hash->{homepage}    = "http://fink.sourceforge.net/faq/usage-general.php?phpLang=en#virtpackage";
-		$self->{$hash->{package}} = $hash;
 		if (open(FILEIN, '/Library/Receipts/JavaAdvancedImaging.pkg/Contents/Info.plist')) {
 			local $/ = undef;
 			if (<FILEIN> =~ /<key>CFBundleShortVersionString<\/key>[\r\n\s]*<string>([\d\.]+)<\/string>/) {
@@ -241,31 +269,100 @@
 			close(FILEIN);
 		}
 	} else {
+		$hash->{status} = STATUS_ABSENT;
+		$hash->{version} = '0-0';
 		print STDERR "missing /System/Library/Java/Extensions/jai_core.jar\n" if ($options{debug});
 	}
+	$self->{$hash->{package}} = $hash;
 
 	# create dummy object for cctools version, if version was found in Config.pm
+	print STDERR "- checking for cctools version... " if ($options{debug});
+
+	if (-x "/usr/bin/ld" and -x "/usr/bin/what") {
+		foreach(`/usr/bin/what /usr/bin/ld`) {
+			if (/cctools-(\d+)/) {
+				$cctools_version = $1;
+				last;
+			}
+		}
+	} else {
+		print STDERR "/usr/bin/ld or /usr/bin/what not executable... " if ($options{debug});
+	}
+
+	$hash = {};
+	$hash->{package} = "cctools";
+	$hash->{status} = STATUS_PRESENT;
+	$hash->{description} = "[virtual package representing the developer tools]";
+	$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+	$hash->{builddependsonly} = "true";
+	$hash->{descdetail} = <<END;
+This package represents the C/C++/ObjC developer tools
+provided by Apple.  If it does not show as installed,
+you can download it from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
+
 	if (defined ($cctools_version)) {
-		$hash = {};
-		$hash->{package} = "cctools";
-		$hash->{status} = "install ok installed";
 		$hash->{version} = $cctools_version."-1";
-		$hash->{description} = "[virtual package representing the developer tools]";
-		$hash->{builddependsonly} = "true";
-		$self->{$hash->{package}} = $hash;
+		print STDERR $hash->{version}, "\n" if ($options{debug});
+	} else {
+		print STDERR "unknown\n" if ($options{debug});
+		$hash->{version} = '0-0';
+		$hash->{status} = STATUS_ABSENT;
 	}
+	$self->{$hash->{package}} = $hash;
 
 	# create dummy object for cctools-single-module, if supported
-	if ($cctools_single_module) {
-		$hash = {};
-		$hash->{package} = "cctools-single-module";
-		$hash->{status} = "install ok installed";
-		$hash->{version} = $cctools_single_module."-1";
-		$hash->{description} = "[virtual package, your dev tools support -single_module]";
-		$hash->{builddependsonly} = "true";
-		$self->{$hash->{package}} = $hash;
+	print STDERR "- checking for cctools -single_module support:\n" if ($options{debug});
+
+	if (-x "/usr/bin/cc" and my $cctestfile = POSIX::tmpnam() and -x "/usr/bin/touch") {
+		system("/usr/bin/touch ${cctestfile}.c");
+		my $command = "/usr/bin/cc -o ${cctestfile}.dylib ${cctestfile}.c -dynamiclib -single_module >/dev/null 2>\&1";
+		print STDERR "- running $command... " if ($options{debug});
+		if (system($command) == 0) {
+			print STDERR "-single_module passed\n" if ($options{debug});
+			$cctools_single_module = '1.0';
+		} else {
+			print STDERR "failed\n" if ($options{debug});
+			$cctools_single_module = undef;
+		}
+		unlink($cctestfile);
+		unlink("${cctestfile}.c");
+		unlink("${cctestfile}.dylib");
 	}
 
+	$hash = {};
+	$hash->{package} = "cctools-single-module";
+	$hash->{status} = STATUS_PRESENT;
+	$hash->{version} = $cctools_single_module."-1";
+	$hash->{description} = "[virtual package, your dev tools support -single_module]";
+	$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+	$hash->{builddependsonly} = "true";
+	$hash->{descdetail} = <<END;
+This package represents support for the -single_module
+flag in the development tools provided by Apple.  If it
+does not show as installed, you can download the latest
+developer tools (called XCode for Mac OS X 10.3 and
+above) from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
+
+	if (not $cctools_single_module) {
+		$hash->{status} = STATUS_ABSENT;
+		if ($cctools_version) {
+			$hash->{version} = $cctools_version;
+		} else {
+			$hash->{version} = '0-0';
+		}
+	}
+	$self->{$hash->{package}} = $hash;
+
 	print STDERR "- checking for various GCC versions:" if ($options{debug});
 	if (opendir(DIR, "/usr/bin")) {
 		for my $gcc (grep(/^gcc/, readdir(DIR))) {
@@ -277,20 +374,42 @@
 					if ($version eq "2.95.2") {
 						$hash = {};
 						$hash->{package} = "gcc2";
-						$hash->{status} = "install ok installed";
+						$hash->{status} = STATUS_PRESENT;
 						$hash->{version} = "$version-1";
 						$hash->{description} = "[virtual package representing the gcc $version compiler]";
-						$hash->{homepage} = "http://fink.sourceforge.net/faq/comp-general.php?phpLang=en#gcc2";
+						$hash->{homepage} = "http://fink.sourceforge.net/faq/comp-general.php#gcc2";
 						$hash->{builddependsonly} = "true";
+						$hash->{descdetail} = <<END;
+This package represents the gcc $version compiler, which
+is part of the Apple developer tools (also known as XCode
+on Mac OS X 10.3 and above).  The latest versions of the
+Apple developer tools are always available from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
+
 						$self->{$hash->{package}} = $hash;
 					}
 					my ($shortversion) = $version =~ /^(\d+\.\d+)/;
 					$hash = {};
 					$hash->{package} = "gcc$shortversion";
-					$hash->{status} = "install ok installed";
+					$hash->{status} = STATUS_PRESENT;
 					$hash->{version} = "$version-1";
 					$hash->{description} = "[virtual package representing the gcc $version compiler]";
+					$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
 					$hash->{builddependsonly} = "true";
+					$hash->{descdetail} = <<END;
+This package represents the gcc $version compiler, which
+is part of the Apple developer tools (also known as XCode
+on Mac OS X 10.3 and above).  The latest versions of the
+Apple developer tools are always available from Apple at:
+
+  http://connect.apple.com/
+
+(free registration required)
+END
 					$self->{$hash->{package}} = $hash;
 					print STDERR "  - found $version\n" if ($options{debug});
 				} else {
@@ -303,14 +422,26 @@
 		print STDERR "  - couldn't get the contents of /usr/bin: $!\n" if ($options{debug});
 	}
 
+	print STDERR "- checking for gimp-print... " if ($options{debug});
+	$hash = {};
+	$hash->{package} = "gimp-print-shlibs";
+	$hash->{version} = "4.2.5-1";
+	$hash->{description} = "[virtual package representing Apple's install of Gimp Print]";
+	$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+	$hash->{descdetail} = <<END;
+This package represents the version of Gimp-Print that
+comes with Mac OS X 10.3 and above.  If it shows as not
+installed, you must install the GimpPrintPrinterDrivers
+package that came with your Mac OS X CDs.
+END
+
 	if ( has_lib('libgimpprint.1.1.0.dylib') ) {
-		$hash = {};
-		$hash->{package} = "gimp-print-shlibs";
-		$hash->{status} = "install ok installed";
-		$hash->{version} = "4.2.5-1";
-		$hash->{description} = "[virtual package representing Apple's install of Gimp Print]";
-		$self->{$hash->{package}} = $hash;
+		print STDERR "4.2.5-1\n" if ($options{debug});
+		$hash->{status} = STATUS_PRESENT;
+	} else {
+		$hash->{status} = STATUS_ABSENT;
 	}
+	$self->{$hash->{package}} = $hash;
 	
 	if ( has_lib('libX11.6.dylib') )
 	{
@@ -331,6 +462,52 @@
 
 		# if no xfree86 packages are installed, put in our own placeholder
 		if ($packagecount == 0) {
+
+			my $descdetail = <<END;
+This package represents a pre-existing installation
+of X11 on your system that is not installed through
+Fink.
+
+If it shows as not installed, you likely need to
+install the X11User and/or X11SDK packages from
+Apple, or a similarly-compatible version.  For more
+information, please see the FAQ entry on X11
+installation at:
+
+  http://fink.sourceforge.net/faq/usage-packages.php#apple-x11-wants-xfree86
+
+END
+
+			$hash = {};
+			$hash->{package} = "system-xfree86-shlibs";
+			$hash->{version} = "0-0";
+			$hash->{status} = STATUS_ABSENT;
+			$hash->{description} = "[virtual package representing Apple's install of X11]";
+			$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+			$hash->{descdetail} = $descdetail;
+			$hash->{provides} = 'x11-shlibs, libgl-shlibs, xft1-shlibs, xft2-shlibs, fontconfig1-shlibs, xfree86-base-threaded-shlibs';
+			$self->{$hash->{package}} = $hash;
+
+			$hash = {};
+			$hash->{package} = "system-xfree86";
+			$hash->{version} = "0-0";
+			$hash->{status} = STATUS_ABSENT;
+			$hash->{description} = "[virtual package representing Apple's install of X11]";
+			$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+			$hash->{descdetail} = $descdetail;
+			$hash->{provides} = 'x11, xserver, libgl, xft1, xft2, fontconfig1, xfree86-base-threaded';
+			$self->{$hash->{package}} = $hash;
+
+			$hash = {};
+			$hash->{package} = "system-xfree86-dev";
+			$hash->{version} = "0-0";
+			$hash->{status} = STATUS_ABSENT;
+			$hash->{description} = "[virtual package representing Apple's install of X11]";
+			$hash->{homepage} = "http://fink.sourceforge.net/faq/usage-general.php#virtpackage";
+			$hash->{descdetail} = $descdetail;
+			$hash->{provides} = 'x11-dev, libgl-dev, xft1-dev, xft2-dev, fontconfig1-dev, xfree86-base-threaded-dev';
+			$self->{$hash->{package}} = $hash;
+
 			my ($xver) = check_x11_version();
 			if (defined $xver) {
 				$hash = {};
@@ -433,10 +610,11 @@
 					if (exists $provides->{$pkg}) {
 						$self->{$pkg} = {
 							'package'     => $pkg,
-							'status'      => "install ok installed",
+							'status'      => STATUS_PRESENT,
 							'version'     => "2:${xver}-2",
 							'description' => "[placeholder for user installed x11]",
-							'homepage'    => "http://fink.sourceforge.net/faq/usage-general.php?phpLang=en#virtpackage",
+							'descdetail'  => $descdetail,
+							'homepage'    => "http://fink.sourceforge.net/faq/usage-general.php#virtpackage",
 							'provides'    => join(', ', @{$provides->{$pkg}}),
 						};
 						if ($pkg eq "system-xfree86-shlibs") {
@@ -457,7 +635,6 @@
 ### query by package name
 # returns false when not installed
 # returns full version when installed and configured
-
 sub query_package {
 	my $self = shift;
 	my $pkgname = shift;
@@ -471,21 +648,18 @@
 		}
 	}
 
-	if (not exists $self->{$pkgname}) {
-		return 0;
-	}
-	$hash = $self->{$pkgname};
-	if (not exists $hash->{version}) {
-		return 0;
+	if (exists $self->{$pkgname} and exists $self->{$pkgname}->{status}) {
+		my ($purge, $ok, $installstat) = split(/\s+/, $self->{$pkgname}->{status});
+		return $self->{$pkgname}->{version} if ($installstat eq "installed" and exists $self->{$pkgname}->{version});
 	}
-	return $hash->{version};
+	return;
 }
 
+
 ### retrieve whole list with versions
 # doesn't care about installed status
 # returns a hash ref, key: package name, value: hash with core fields
 # in the hash, 'package' and 'version' are guaranteed to exist
-
 sub list {
 	my $self = shift;
 	%options = (@_);
@@ -507,7 +681,7 @@
 		next unless exists $hash->{version};
 
 		$newhash = { 'package' => $pkgname, 'version' => $hash->{version} };
-		foreach $field (qw(depends provides conflicts maintainer description homepage status builddependsonly)) {
+		foreach $field (qw(depends provides conflicts maintainer description descdetail homepage status builddependsonly)) {
 			if (exists $hash->{$field}) {
 				$newhash->{$field} = $hash->{$field};
 			}
@@ -518,6 +692,18 @@
 	return $list;
 }
 
+### query whether a package is installed
+# returns true/false
+sub is_installed {
+	my $self = shift;
+	my $pkgname = shift;
+
+	if (exists $self->{$pkgname} and exists $self->{$pkgname}->{status} and $self->{$pkgname}->{status} =~ / installed$/) {
+		return 1;
+	}
+	return;
+}
+
 sub has_header {
 	my $headername = shift;
 	my $dir;
Index: t/00compile.t
===================================================================
RCS file: /cvsroot/fink/fink/t/00compile.t,v
retrieving revision 1.3
diff -u -r1.3 00compile.t
--- t/00compile.t	27 Nov 2003 08:32:41 -0000	1.3
+++ t/00compile.t	7 Jul 2004 19:54:39 -0000
@@ -27,7 +27,7 @@
 my @original_symbols = keys %Foo::;
 foreach my $file (sort { $a cmp $b } @modules) {
     my $warnings = '';
-    local $SIG{__WARN__} = sub { $warnings .= join '', @_ };
+    local $SIG{__WARN__} = sub { $warnings .= join('', grep(!/redefined at/, @_)) };
 
     (my $module = $file) =~ s{.*perlmod/}{};
     $module =~ s{/}{::}g;
