diff --git a/winsup/doc/utils.xml b/winsup/doc/utils.xml
index 895988037..1479437a7 100644
--- a/winsup/doc/utils.xml
+++ b/winsup/doc/utils.xml
@@ -118,6 +118,7 @@
cygcheck
-c
-d
+ -n
PACKAGE
@@ -166,7 +167,8 @@ At least one command option or a PROGRAM is required, as shown above.
PROGRAM list library (DLL) dependencies of PROGRAM
-c, --check-setup show installed version of PACKAGE and verify integrity
(or for all installed packages if none specified)
- -d, --dump-only just list packages, do not verify (with -c)
+ -d, --dump-only do not verify packages (with -c)
+ -n, --names-only just list package names (implies -c -d)
-s, --sysinfo produce diagnostic system information (implies -c -d)
-r, --registry also scan registry for Cygwin settings (with -s)
-k, --keycheck perform a keyboard check session (must be run from a
@@ -196,7 +198,7 @@ Note: -c, -f, and -l only report on packages that are currently installed. To
dealing with Cygwin programs. If you are familiar with
dpkg or rpm,
cygcheck is similar in many ways. (The major
- difference is that setup.exe handles installing and
+ difference is that setup handles installing and
uninstalling packages; see for more
information.)
The -c option checks the version and status of
@@ -205,11 +207,12 @@ Note: -c, -f, and -l only report on packages that are currently installed. To
with no arguments it lists all packages. A package will be marked
Incomplete if files originally installed are no longer
present. The best thing to do in that situation is reinstall the package
- with setup.exe. To see which files are missing, use
+ with setup. To see which files are missing, use
the -v option. If you do not need to know the status
of each package and want cygcheck to run faster, add
the -d option and cygcheck will
- only output the name and version for each package.
+ only output the name and version for each package. Add the
+ -n option to output only the names of packages.
If you list one or more programs on the command line,
cygcheck will diagnose the runtime environment of that
program or programs, providing the names of DLL files on which the
diff --git a/winsup/utils/mingw/cygcheck.cc b/winsup/utils/mingw/cygcheck.cc
index 69f75927f..87067dcbd 100644
--- a/winsup/utils/mingw/cygcheck.cc
+++ b/winsup/utils/mingw/cygcheck.cc
@@ -42,6 +42,7 @@ int givehelp = 0;
int keycheck = 0;
int check_setup = 0;
int dump_only = 0;
+int names_only = 0;
int find_package = 0;
int list_package = 0;
int grep_packages = 0;
@@ -56,7 +57,7 @@ typedef __int64 longlong;
#endif
/* In dump_setup.cc */
-void dump_setup (int, char **, bool);
+void dump_setup (int, char **, bool, bool);
void package_find (int, char **);
void package_list (int, char **);
/* In bloda.cc */
@@ -2113,7 +2114,8 @@ At least one command option or a PROGRAM is required, as shown above.\n\
PROGRAM list library (DLL) dependencies of PROGRAM\n\
-c, --check-setup show installed version of PACKAGE and verify integrity\n\
(or for all installed packages if none specified)\n\
- -d, --dump-only just list packages, do not verify (with -c)\n\
+ -d, --dump-only do not verify packages (with -c)\n\
+ -n, --names-only just list package names (implies -c -d)\n\
-s, --sysinfo produce diagnostic system information (implies -c)\n\
-r, --registry also scan registry for Cygwin settings (with -s)\n\
-k, --keycheck perform a keyboard check session (must be run from a\n\
@@ -2141,6 +2143,7 @@ Note: -c, -f, and -l only report on packages that are currently installed. To\n\
struct option longopts[] = {
{"check-setup", no_argument, NULL, 'c'},
{"dump-only", no_argument, NULL, 'd'},
+ {"names-only", no_argument, NULL, 'n'},
{"sysinfo", no_argument, NULL, 's'},
{"registry", no_argument, NULL, 'r'},
{"verbose", no_argument, NULL, 'v'},
@@ -2154,7 +2157,7 @@ struct option longopts[] = {
{0, no_argument, NULL, 0}
};
-static char opts[] = "cdsrvkflphV";
+static char opts[] = "cdnsrvkflphV";
static void
print_version ()
@@ -2266,6 +2269,11 @@ main (int argc, char **argv)
case 'd':
dump_only = 1;
break;
+ case 'n':
+ check_setup = 1;
+ dump_only = 1;
+ names_only = 1;
+ break;
case 'r':
registry = 1;
break;
@@ -2348,7 +2356,7 @@ main (int argc, char **argv)
}
if (check_setup)
- dump_setup (verbose, argv, !dump_only);
+ dump_setup (verbose, argv, !dump_only, names_only);
else if (find_package)
package_find (verbose, argv);
else if (list_package)
@@ -2367,7 +2375,7 @@ main (int argc, char **argv)
if (!check_setup)
{
puts ("");
- dump_setup (verbose, NULL, !dump_only);
+ dump_setup (verbose, NULL, !dump_only, FALSE);
}
if (!givehelp)
diff --git a/winsup/utils/mingw/dump_setup.cc b/winsup/utils/mingw/dump_setup.cc
index ec70da0db..61aa9563e 100644
--- a/winsup/utils/mingw/dump_setup.cc
+++ b/winsup/utils/mingw/dump_setup.cc
@@ -468,11 +468,13 @@ get_packages (char **argv)
}
void
-dump_setup (int verbose, char **argv, bool check_files)
+dump_setup (int verbose, char **argv, bool check_files, bool names_only)
{
pkgver *packages = get_packages(argv);
- puts ("Cygwin Package Information");
+ if (!names_only)
+ puts ("Cygwin Package Information");
+
if (packages == NULL)
{
puts ("No setup information found");
@@ -486,12 +488,15 @@ dump_setup (int verbose, char **argv, bool check_files)
puts ("");
}
- printf ("%-*s %-*s%s\n", package_len, "Package",
- check_files ? version_len : 7, "Version",
- check_files ? " Status" : "");
+ if (!names_only)
+ printf ("%-*s %-*s%s\n", package_len, "Package",
+ check_files ? version_len : 7, "Version",
+ check_files ? " Status" : "");
for (int i = 0; packages[i].name; i++)
{
- if (check_files)
+ if (names_only)
+ printf ("%s\n", packages[i].name);
+ else if (check_files)
printf ("%-*s %-*s%s\n", package_len, packages[i].name,
version_len, packages[i].ver,
check_package_files (verbose, packages[i].name)