* dump_setup.cc: New file.
* Makefile.in: Add info for dump_setup.o. * cygcheck.cc (main): Recognize '-c' option for checking setup installed base. * path.cc (cygpath): Read mount table if not loaded.
This commit is contained in:
parent
2fac517df4
commit
d0d517913c
|
@ -1,3 +1,11 @@
|
||||||
|
2001-11-11 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* dump_setup.cc: New file.
|
||||||
|
* Makefile.in: Add info for dump_setup.o.
|
||||||
|
* cygcheck.cc (main): Recognize '-c' option for checking setup
|
||||||
|
installed base.
|
||||||
|
* path.cc (cygpath): Read mount table if not loaded.
|
||||||
|
|
||||||
2001-11-10 Christopher Faylor <cgf@redhat.com>
|
2001-11-10 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* Makefile.in (cygcheck.exe): Compile as -mno-cygwin executable.
|
* Makefile.in (cygcheck.exe): Compile as -mno-cygwin executable.
|
||||||
|
|
|
@ -94,12 +94,12 @@ else
|
||||||
$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,2,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
|
$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,2,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
cygcheck.exe: cygcheck.cc mingw_getopt.o path.o $(MINGW_DEP_LDLIBS)
|
cygcheck.exe: cygcheck.cc mingw_getopt.o path.o dump_setup.o $(MINGW_DEP_LDLIBS)
|
||||||
ifdef VERBOSE
|
ifdef VERBOSE
|
||||||
$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,3,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
|
$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,4,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
|
||||||
else
|
else
|
||||||
@echo $(CXX) -o $@ ${wordlist 1,2,$^} ${filter-out -B%, $(MINGW_CXXFLAGS) $(MINGW_LDFLAGS)};\
|
@echo $(CXX) -o $@ ${wordlist 1,2,$^} ${filter-out -B%, $(MINGW_CXXFLAGS) $(MINGW_LDFLAGS)};\
|
||||||
$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,3,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
|
$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,4,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
dumper.o: dumper.cc dumper.h
|
dumper.o: dumper.cc dumper.h
|
||||||
|
@ -143,6 +143,14 @@ else
|
||||||
${filter-out -I$(newlib_source)/%,$(COMPILE_CC)} $c -o $(@D)/$(basename $@)$o $(MINGW_CFLAGS) $<
|
${filter-out -I$(newlib_source)/%,$(COMPILE_CC)} $c -o $(@D)/$(basename $@)$o $(MINGW_CFLAGS) $<
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
dump_setup.o: dump_setup.cc
|
||||||
|
ifdef VERBOSE
|
||||||
|
${filter-out -I$(newlib_source)/%,$(COMPILE_CC)} $c -o $(@D)/$(basename $@)$o $(MINGW_CFLAGS) $<
|
||||||
|
else
|
||||||
|
@echo $(CC) $c -o $(@D)/$(basename $@)$o $(MINGW_CFLAGS) ... $^;\
|
||||||
|
${filter-out -I$(newlib_source)/%,$(COMPILE_CC)} $c -o $(@D)/$(basename $@)$o $(MINGW_CFLAGS) $<
|
||||||
|
endif
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o $(CLEAN_PROGS)
|
rm -f *.o $(CLEAN_PROGS)
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ int registry = 0;
|
||||||
int sysinfo = 0;
|
int sysinfo = 0;
|
||||||
int givehelp = 0;
|
int givehelp = 0;
|
||||||
int keycheck = 0;
|
int keycheck = 0;
|
||||||
|
int check_setup = 0;
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
typedef long long longlong;
|
typedef long long longlong;
|
||||||
|
@ -32,6 +33,8 @@ typedef long long longlong;
|
||||||
typedef __int64 longlong;
|
typedef __int64 longlong;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void dump_setup (int, char **);
|
||||||
|
|
||||||
const char *known_env_vars[] = {
|
const char *known_env_vars[] = {
|
||||||
"c_include_path",
|
"c_include_path",
|
||||||
"compiler_path",
|
"compiler_path",
|
||||||
|
@ -1191,6 +1194,7 @@ usage ()
|
||||||
}
|
}
|
||||||
|
|
||||||
struct option longopts[] = {
|
struct option longopts[] = {
|
||||||
|
{"check-setup", no_argument, NULL, 'c'},
|
||||||
{"sysinfo", no_argument, NULL, 's'},
|
{"sysinfo", no_argument, NULL, 's'},
|
||||||
{"registry", no_argument, NULL, 'r'},
|
{"registry", no_argument, NULL, 'r'},
|
||||||
{"verbose", no_argument, NULL, 'v'},
|
{"verbose", no_argument, NULL, 'v'},
|
||||||
|
@ -1199,7 +1203,7 @@ struct option longopts[] = {
|
||||||
{0, no_argument, NULL, 0}
|
{0, no_argument, NULL, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
char opts[] = "srvkh";
|
char opts[] = "srvkhc";
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
|
@ -1212,6 +1216,9 @@ main (int argc, char **argv)
|
||||||
case 's':
|
case 's':
|
||||||
sysinfo = 1;
|
sysinfo = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'c':
|
||||||
|
check_setup = 1;
|
||||||
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
registry = 1;
|
registry = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -1230,10 +1237,10 @@ main (int argc, char **argv)
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
if (argc == 0 && !sysinfo && !keycheck)
|
if (argc == 0 && !sysinfo && !keycheck && !check_setup)
|
||||||
usage ();
|
usage ();
|
||||||
|
|
||||||
if (sysinfo && keycheck)
|
if ((check_setup || sysinfo) && keycheck)
|
||||||
usage ();
|
usage ();
|
||||||
|
|
||||||
if (keycheck)
|
if (keycheck)
|
||||||
|
@ -1241,7 +1248,8 @@ main (int argc, char **argv)
|
||||||
|
|
||||||
init_paths ();
|
init_paths ();
|
||||||
|
|
||||||
if (argc >= 1 && givehelp)
|
/* FIXME: Add help for check_setup */
|
||||||
|
if (argc >= 1 && givehelp && !check_setup)
|
||||||
{
|
{
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
|
@ -1260,11 +1268,17 @@ main (int argc, char **argv)
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
if (check_setup)
|
||||||
{
|
{
|
||||||
cygcheck (argv[i]);
|
dump_setup (verbose, argv);
|
||||||
printf ("\n");
|
puts ("");
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
cygcheck (argv[i]);
|
||||||
|
puts ("");
|
||||||
|
}
|
||||||
|
|
||||||
if (sysinfo)
|
if (sysinfo)
|
||||||
dump_sysinfo ();
|
dump_sysinfo ();
|
||||||
|
|
|
@ -0,0 +1,251 @@
|
||||||
|
/* path.cc
|
||||||
|
|
||||||
|
Copyright 2001 Red Hat, Inc.
|
||||||
|
|
||||||
|
This file is part of Cygwin.
|
||||||
|
|
||||||
|
This software is a copyrighted work licensed under the terms of the
|
||||||
|
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
||||||
|
details. */
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <io.h>
|
||||||
|
#include "path.h"
|
||||||
|
|
||||||
|
static int package_len = 20;
|
||||||
|
static int version_len = 20;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char pkgtar[MAX_PATH + 1];
|
||||||
|
char pkg[MAX_PATH + 1];
|
||||||
|
char ver[MAX_PATH + 1];
|
||||||
|
char tail[MAX_PATH + 1];
|
||||||
|
char what[16];
|
||||||
|
} fileparse;
|
||||||
|
|
||||||
|
static int
|
||||||
|
find_tar_ext (const char *path)
|
||||||
|
{
|
||||||
|
char *p = strchr (path, '\0') - 7;
|
||||||
|
if (p <= path)
|
||||||
|
return 0;
|
||||||
|
if (*p == '.')
|
||||||
|
{
|
||||||
|
if (strcmp (p, ".tar.gz") != 0)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (--p <= path || strcmp (p, ".tar.bz2") != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return p - path;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
base (const char *s)
|
||||||
|
{
|
||||||
|
if (!s)
|
||||||
|
return 0;
|
||||||
|
const char *rv = s;
|
||||||
|
while (*s)
|
||||||
|
{
|
||||||
|
if ((*s == '/' || *s == ':' || *s == '\\') && s[1])
|
||||||
|
rv = s + 1;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
return (char *) rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse a filename into package, version, and extension components. */
|
||||||
|
int
|
||||||
|
parse_filename (const char *in_fn, fileparse& f)
|
||||||
|
{
|
||||||
|
char *p, *ver;
|
||||||
|
char fn[strlen (in_fn) + 1];
|
||||||
|
|
||||||
|
strcpy (fn, in_fn);
|
||||||
|
int n = find_tar_ext (fn);
|
||||||
|
|
||||||
|
if (!n)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
strcpy (f.tail, fn + n);
|
||||||
|
fn[n] = '\0';
|
||||||
|
f.pkg[0] = f.what[0] = '\0';
|
||||||
|
p = base (fn);
|
||||||
|
for (ver = p; *ver; ver++)
|
||||||
|
if (*ver == '-' || *ver == '_')
|
||||||
|
if (isdigit (ver[1]))
|
||||||
|
{
|
||||||
|
*ver++ = 0;
|
||||||
|
strcpy (f.pkg, p);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (strcasecmp (ver, "-src") == 0 ||
|
||||||
|
strcasecmp (ver, "-patch") == 0)
|
||||||
|
{
|
||||||
|
*ver++ = 0;
|
||||||
|
strcpy (f.pkg, p);
|
||||||
|
strcpy (f.what, strlwr (ver));
|
||||||
|
strcpy (f.pkgtar, p);
|
||||||
|
strcat (f.pkgtar, f.tail);
|
||||||
|
ver = strchr (ver, '\0');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!f.pkg[0])
|
||||||
|
strcpy (f.pkg, p);
|
||||||
|
|
||||||
|
if (!f.what[0])
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
p = strchr (ver, '\0');
|
||||||
|
strcpy (f.pkgtar, in_fn);
|
||||||
|
if ((p -= 4) >= ver && strcasecmp (p, "-src") == 0)
|
||||||
|
n = 4;
|
||||||
|
else if ((p -= 2) >= ver && strcasecmp (p, "-patch") == 0)
|
||||||
|
n = 6;
|
||||||
|
else
|
||||||
|
n = 0;
|
||||||
|
if (n)
|
||||||
|
{
|
||||||
|
strcpy (f.what, p + 1);
|
||||||
|
*p = '\0';
|
||||||
|
p = f.pkgtar + (p - fn) + n;
|
||||||
|
memmove (p - 4, p, strlen (p));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy (f.ver, *ver ? ver : "0.0");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
dump_file (const char *msg, const char *fn)
|
||||||
|
{
|
||||||
|
char *path = cygpath ("/etc/setup/", fn, NULL);
|
||||||
|
FILE *fp = fopen (path, "rt");
|
||||||
|
bool printed;
|
||||||
|
char buf[4096];
|
||||||
|
if (!fp)
|
||||||
|
printed = false;
|
||||||
|
else if (!fgets (buf, 4096, fp))
|
||||||
|
printed = false;
|
||||||
|
{
|
||||||
|
char *p = strchr (buf, '\0');
|
||||||
|
printf ("%s%s%s", msg, buf, (p == buf) || p[-1] != '\n' ? "\n" : "");
|
||||||
|
printed = true;
|
||||||
|
}
|
||||||
|
if (fp)
|
||||||
|
fclose (fp);
|
||||||
|
return printed;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct pkgver
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
char *ver;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
int
|
||||||
|
compar (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
const pkgver *pa = (const pkgver *) a;
|
||||||
|
const pkgver *pb = (const pkgver *) b;
|
||||||
|
return strcmp (pa->name, pb->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
match_argv (char **argv, const char *name)
|
||||||
|
{
|
||||||
|
if (!*argv)
|
||||||
|
return true;
|
||||||
|
for (char **a = argv; *a; a++)
|
||||||
|
if (strcasecmp (*a, name) == 0)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dump_setup (int verbose, char **argv)
|
||||||
|
{
|
||||||
|
char *setup = cygpath ("/etc/setup/installed.db", NULL);
|
||||||
|
FILE *fp = fopen (setup, "rt");
|
||||||
|
puts ("Cygwin Setup information");
|
||||||
|
if (fp == NULL)
|
||||||
|
goto err;
|
||||||
|
if (verbose)
|
||||||
|
{
|
||||||
|
bool need_nl = dump_file ("Last downloaded files to: ", "last-cache");
|
||||||
|
if (dump_file ("Last downloaded files from: ", "last-mirror") || need_nl)
|
||||||
|
puts ("");
|
||||||
|
}
|
||||||
|
if (!*argv)
|
||||||
|
|
||||||
|
if (!fp)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
int nlines;
|
||||||
|
nlines = 0;
|
||||||
|
char buf[4096];
|
||||||
|
while (fgets (buf, 4096, fp))
|
||||||
|
nlines += 2; /* potentially binary + source */
|
||||||
|
if (!nlines)
|
||||||
|
goto err;
|
||||||
|
rewind (fp);
|
||||||
|
|
||||||
|
pkgver *packages;
|
||||||
|
|
||||||
|
packages = (pkgver *) calloc (nlines, sizeof(packages[0]));
|
||||||
|
printf ("%-*s%-*s\n", package_len, "Package", version_len, "Version");
|
||||||
|
int n;
|
||||||
|
for (n = 0; fgets (buf, 4096, fp) && n < nlines;)
|
||||||
|
{
|
||||||
|
char *package = strtok (buf, " ");
|
||||||
|
if (!package || !*package || !match_argv (argv, package))
|
||||||
|
continue;
|
||||||
|
for (int i = 0; i < 2; i++)
|
||||||
|
{
|
||||||
|
fileparse f;
|
||||||
|
char *tar = strtok (NULL, " ");
|
||||||
|
if (!tar || !*tar || !parse_filename (tar, f))
|
||||||
|
break;
|
||||||
|
|
||||||
|
int len = strlen (package);
|
||||||
|
if (f.what[0])
|
||||||
|
len += strlen (f.what) + 1;
|
||||||
|
packages[n].name = (char *) malloc (len + 1);
|
||||||
|
strcpy (packages[n].name , package);
|
||||||
|
if (f.what[0])
|
||||||
|
strcat (strcat (packages[n].name, "-"), f.what);
|
||||||
|
packages[n].ver = strdup (f.ver);
|
||||||
|
n++;
|
||||||
|
if (strtok (NULL, " ") == NULL)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!argv)
|
||||||
|
qsort (packages, n, sizeof (packages[0]), compar);
|
||||||
|
|
||||||
|
for (int i = 0; i < n; i++)
|
||||||
|
printf ("%-*s%-*s\n", package_len, packages[i].name,
|
||||||
|
version_len, packages[i].ver);
|
||||||
|
fclose (fp);
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
err:
|
||||||
|
puts ("No setup information found");
|
||||||
|
if (fp)
|
||||||
|
fclose (fp);
|
||||||
|
return;
|
||||||
|
}
|
|
@ -1,17 +1,12 @@
|
||||||
/*
|
/* path.cc
|
||||||
* Copyright (c) 2000, Red Hat, Inc.
|
|
||||||
*
|
Copyright 2001 Red Hat, Inc.
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
This file is part of Cygwin.
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
This software is a copyrighted work licensed under the terms of the
|
||||||
*
|
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
||||||
* A copy of the GNU General Public License can be found at
|
details. */
|
||||||
* http://www.gnu.org/
|
|
||||||
*
|
|
||||||
* Written by DJ Delorie <dj@cygnus.com>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* The purpose of this file is to hide all the details about accessing
|
/* The purpose of this file is to hide all the details about accessing
|
||||||
Cygwin's mount table. If the format or location of the mount table
|
Cygwin's mount table. If the format or location of the mount table
|
||||||
|
@ -94,7 +89,7 @@ get_cygdrive (HKEY key, mnt *m, int issystem)
|
||||||
return m + 1;
|
return m + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
read_mounts ()
|
read_mounts ()
|
||||||
{
|
{
|
||||||
DWORD posix_path_size;
|
DWORD posix_path_size;
|
||||||
|
@ -277,6 +272,8 @@ cygpath (const char *s, ...)
|
||||||
int max_len = -1;
|
int max_len = -1;
|
||||||
struct mnt *m, *match = NULL;
|
struct mnt *m, *match = NULL;
|
||||||
|
|
||||||
|
if (!mount_table[0].posix)
|
||||||
|
read_mounts ();
|
||||||
va_start (v, s);
|
va_start (v, s);
|
||||||
char *path = vconcat (s, v);
|
char *path = vconcat (s, v);
|
||||||
if (strncmp (path, "./", 2) == 0)
|
if (strncmp (path, "./", 2) == 0)
|
||||||
|
|
Loading…
Reference in New Issue