From 127166f7070f67a3b322e72119df8a547fd1f85d Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Fri, 24 Nov 2023 16:17:05 +0000 Subject: Cygwin: Add '--names-only' flag to cygcheck Add '--names-only' flag to cygcheck, to output just the bare package names. --- winsup/doc/utils.xml | 11 +++++++---- winsup/utils/mingw/cygcheck.cc | 18 +++++++++++++----- winsup/utils/mingw/dump_setup.cc | 17 +++++++++++------ 3 files changed, 31 insertions(+), 15 deletions(-) (limited to 'winsup') diff --git a/winsup/doc/utils.xml b/winsup/doc/utils.xml index 0390db20f..ad17c9796 100644 --- a/winsup/doc/utils.xml +++ b/winsup/doc/utils.xml @@ -135,6 +135,7 @@ cygcheck -c -d + -n PACKAGE @@ -201,7 +202,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 @@ -251,7 +253,7 @@ Notes: 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 @@ -260,11 +262,12 @@ Notes: 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 9d6f19203..1dde2ecba 100644 --- a/winsup/utils/mingw/cygcheck.cc +++ b/winsup/utils/mingw/cygcheck.cc @@ -55,6 +55,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; @@ -84,7 +85,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 */ @@ -2913,7 +2914,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\ @@ -2962,6 +2964,7 @@ Notes:\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'}, @@ -2985,7 +2988,7 @@ struct option longopts[] = { {0, no_argument, NULL, 0} }; -static char opts[] = "cdsrvkfliephV"; +static char opts[] = "cdnsrvkfliephV"; static void print_version () @@ -3093,6 +3096,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; @@ -3205,7 +3213,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) @@ -3224,7 +3232,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 06aa06f81..050679a0d 100644 --- a/winsup/utils/mingw/dump_setup.cc +++ b/winsup/utils/mingw/dump_setup.cc @@ -466,11 +466,13 @@ get_installed_packages (char **argv, size_t *count) } 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_installed_packages (argv); - puts ("Cygwin Package Information"); + if (!names_only) + puts ("Cygwin Package Information"); + if (packages == NULL) { puts ("No setup information found"); @@ -484,12 +486,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) -- cgit v1.2.3