diff -urN ../rpm-2.91/build/build.c ./build/build.c
--- ../rpm-2.91/build/build.c	Tue Jan 12 11:54:06 1999
+++ ./build/build.c	Wed Feb 24 11:36:58 1999
@@ -201,6 +201,9 @@
 	    if ((rc = packageSources(spec))) {
 		return rc;
 	    }
+	    if ((rc = packagePatches(spec))) {
+		return rc;
+	    }
 	}
 	if (what & RPMBUILD_PACKAGEBINARY && !test) {
 	    if ((rc = packageBinaries(spec))) {
diff -urN ../rpm-2.91/build/files.c ./build/files.c
--- ../rpm-2.91/build/files.c	Wed Jan 13 23:52:40 1999
+++ ./build/files.c	Wed Feb 24 11:05:20 1999
@@ -980,11 +980,13 @@
 	fileGname = getGname(fileGid);
     }
 	
+#ifndef __CYGWIN__
     if (! (fileUname && fileGname)) {
 	rpmError(RPMERR_BADSPEC, _("Bad owner/group: %s\n"), diskName);
 	fl->processingFailed = 1;
 	return RPMERR_BADSPEC;
     }
+#endif
     
     rpmMessage(RPMMESS_DEBUG, _("File %d: %s\n"), fl->fileCount, fileName);
 
@@ -1365,10 +1367,12 @@
 	
 	fl.totalFileSize += flp->fl_size;
 	
+#ifndef __CYGWIN__
 	if (! (flp->uname && flp->gname)) {
 	    rpmError(RPMERR_BADSPEC, _("Bad owner/group: %s"), s);
 	    fl.processingFailed = 1;
 	}
+#endif
 
 	isSpec = 0;
 	x++;
diff -urN ../rpm-2.91/build/pack.c ./build/pack.c
--- ../rpm-2.91/build/pack.c	Tue Jan 12 11:54:08 1999
+++ ./build/pack.c	Thu Feb 25 11:55:06 1999
@@ -40,6 +40,28 @@
     return 0;
 }
 
+static int genPatchRpmName(Spec spec)
+{
+    char *name, *version, *release;
+    char fileName[BUFSIZ];
+
+    if (spec->patchRpmName) {
+	return 0;
+    }
+    
+    headerGetEntry(spec->packages->header, RPMTAG_NAME,
+		   NULL, (void **)&name, NULL);
+    headerGetEntry(spec->packages->header, RPMTAG_VERSION,
+		   NULL, (void **)&version, NULL);
+    headerGetEntry(spec->packages->header, RPMTAG_RELEASE,
+		   NULL, (void **)&release, NULL);
+    sprintf(fileName, "%s-%s-%s.%spatch.rpm", name, version, release,
+	    spec->noSource ? "no" : "");
+    spec->patchRpmName = strdup(fileName);
+
+    return 0;
+}
+
 int packageSources(Spec spec)
 {
     CSA_t csabuf, *csa = &csabuf;
@@ -90,6 +112,80 @@
 
 	rc = writeRPM(spec->sourceHeader, fn, RPMLEAD_SOURCE,
 		csa, spec->passPhrase, &(spec->cookie));
+	xfree(fn);
+    }
+    return rc;
+}
+
+int packagePatches(Spec spec)
+{
+    CSA_t csabuf, *csa = &csabuf;
+    HeaderIterator iter;
+    int_32 tag, count;
+    char **ptr;
+    int rc;
+
+    /* Add some cruft */
+    headerAddEntry(spec->sourceHeader, RPMTAG_RPMVERSION,
+		   RPM_STRING_TYPE, VERSION, 1);
+    headerAddEntry(spec->sourceHeader, RPMTAG_BUILDHOST,
+		   RPM_STRING_TYPE, buildHost(), 1);
+    headerAddEntry(spec->sourceHeader, RPMTAG_BUILDTIME,
+		   RPM_INT32_TYPE, getBuildTime(), 1);
+
+    {	int capability = 0;
+	headerAddEntry(spec->sourceHeader, RPMTAG_CAPABILITY, RPM_INT32_TYPE,
+			&capability, 1);
+    }
+
+    genPatchRpmName(spec);
+
+    /* Add the build restrictions */
+    iter = headerInitIterator(spec->buildRestrictions);
+    while (headerNextIterator(iter, &tag, NULL, (void **)&ptr, &count)) {
+	headerAddEntry(spec->sourceHeader, tag,
+		       RPM_STRING_ARRAY_TYPE, ptr, count);
+	FREE(ptr);
+    }
+    headerFreeIterator(iter);
+    if (spec->buildArchitectureCount) {
+	headerAddEntry(spec->sourceHeader, RPMTAG_BUILDARCHS,
+		       RPM_STRING_ARRAY_TYPE,
+		       spec->buildArchitectures, spec->buildArchitectureCount);
+    }
+
+    FREE(spec->cookie);
+    
+    {	const char *fn = rpmGetPath("%{_prpmdir}/", spec->patchRpmName,NULL);
+	int i;
+
+	memset(csa, 0, sizeof(*csa));
+	csa->cpioArchiveSize = 0;
+	csa->cpioFdIn = fdNew();
+	csa->cpioCount = spec->sourceCpioCount;
+	csa->cpioList = spec->sourceCpioList;
+	
+	/* remove tarballs from source list */
+	for (i = 0; i < spec->sourceCpioCount; i++)
+	  {
+	    if (strstr (i[csa->cpioList].fsPath, ".tar.gz"))
+	      {
+		csa->cpioCount--;
+		memset (&i[csa->cpioList], 0, sizeof (struct cpioFileMapping));
+		if (spec->sourceCpioCount - i - 1> 0)
+		  {
+		    memmove (&i[csa->cpioList],
+		      &i[csa->cpioList + 1],
+		      (spec->sourceCpioCount - i - 1) 
+			* sizeof (struct cpioFileMapping));
+		  }
+	      }
+	  }
+	spec->sourceCpioCount = csa->cpioCount;
+
+	rc = writeRPM(spec->sourceHeader, fn, RPMLEAD_SOURCE,
+		csa, spec->passPhrase, &(spec->cookie));
+
 	xfree(fn);
     }
     return rc;
diff -urN ../rpm-2.91/build/parsePrep.c ./build/parsePrep.c
--- ../rpm-2.91/build/parsePrep.c	Wed Jan 06 00:14:04 1999
+++ ./build/parsePrep.c	Wed Feb 24 11:05:20 1999
@@ -36,10 +36,12 @@
 	rpmError(RPMERR_BADSPEC, _("Bad source: %s: %s"), file, strerror(errno));
 	return RPMERR_BADSPEC;
     }
+#ifndef __CYGWIN__
     if (!getUname(sb.st_uid) || !getGname(sb.st_gid)) {
 	rpmError(RPMERR_BADSPEC, _("Bad owner/group: %s"), file);
 	return RPMERR_BADSPEC;
     }
+#endif
 
     return 0;
 }
diff -urN ../rpm-2.91/build/rpmbuild.h ./build/rpmbuild.h
--- ../rpm-2.91/build/rpmbuild.h	Wed Jan 06 18:34:04 1999
+++ ./build/rpmbuild.h	Wed Feb 24 11:34:52 1999
@@ -145,6 +145,7 @@
 
 int packageBinaries(Spec spec);
 int packageSources(Spec spec);
+int packagePatches(Spec spec);
 
 #ifdef __cplusplus
 }
diff -urN ../rpm-2.91/build/rpmspec.h ./build/rpmspec.h
--- ../rpm-2.91/build/rpmspec.h	Wed Nov 25 01:42:46 1998
+++ ./build/rpmspec.h	Wed Feb 24 11:29:38 1999
@@ -54,6 +54,7 @@
 struct SpecStruct {
     /*@only@*/ char *specFile;
     /*@only@*/ char *sourceRpmName;
+    /*@only@*/ char *patchRpmName;
 
     /*@owned@*/ struct OpenFileInfo *fileStack;
     char line[BUFSIZ];
diff -urN ../rpm-2.91/configure ./configure
--- ../rpm-2.91/configure	Thu Jan 21 21:27:08 1999
+++ ./configure	Wed Feb 24 11:05:20 1999
@@ -3261,7 +3261,8 @@
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
-char dbopen();
+#include <db.h>
+//char dbopen(); urg, what are prototypes for? --jcn
 
 int main() {
 
diff -urN ../rpm-2.91/ftp.c ./ftp.c
--- ../rpm-2.91/ftp.c	Thu Jan 21 20:09:50 1999
+++ ./ftp.c	Wed Feb 24 11:05:20 1999
@@ -248,8 +248,10 @@
 	return rc;
     }
 
+#if 0
 if (ftpDebug)
 fprintf(stderr,"++ connect %s:%d on fd %d\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), sock);
+#endif
 
     return sock;
 }
diff -urN ../rpm-2.91/lib/cpio.c ./lib/cpio.c
--- ../rpm-2.91/lib/cpio.c	Wed Jan 20 19:41:24 1999
+++ ./lib/cpio.c	Wed Feb 24 11:05:20 1999
@@ -283,6 +283,7 @@
     stamp.actime = hdr->mtime; 
     stamp.modtime = hdr->mtime;
 
+#ifndef __CYGWIN32__
     if (!S_ISLNK(hdr->mode)) {
 	if (!getuid() && chown(hdr->path, hdr->uid, hdr->gid))
 	    rc = CPIOERR_CHOWN_FAILED;
@@ -296,6 +297,7 @@
 		rc = CPIOERR_CHOWN_FAILED;
 #       endif
     }
+#endif
 
     return rc;
 }
@@ -434,7 +436,7 @@
 	    return CPIOERR_UNLINK_FAILED;
     }
 
-    if (mkfifo(hdr->path, 0))
+    if (0 && mkfifo(hdr->path, 0))
 	return CPIOERR_MKFIFO_FAILED;
 
     return 0; 
diff -urN ../rpm-2.91/lib/header.c ./lib/header.c
--- ../rpm-2.91/lib/header.c	Tue Jan 12 11:54:26 1999
+++ ./lib/header.c	Wed Feb 24 11:05:20 1999
@@ -920,7 +920,7 @@
 	    }
 	} else {
 	    src = (char **) p;
-	    while (i--) {
+	    while (*src && i--) {
 		/* add one for null termination */
 		length += strlen(*src++) + 1;
 	    }
diff -urN ../rpm-2.91/lib/rpmlib.h ./lib/rpmlib.h
--- ../rpm-2.91/lib/rpmlib.h	Tue Jan 19 17:51:46 1999
+++ ./lib/rpmlib.h	Wed Feb 24 12:18:48 1999
@@ -207,6 +207,7 @@
 #define	RPMVAR_ROOT			6
 #define	RPMVAR_RPMDIR			7
 #define	RPMVAR_SRPMDIR			8
+#define	RPMVAR_PRPMDIR			9
 /* #define RPMVAR_ARCHSENSITIVE 	9  -- No longer used */
 #define	RPMVAR_REQUIREDISTRIBUTION	10
 /* #define RPMVAR_REQUIREGROUP		11 -- No longer used */
diff -urN ../rpm-2.91/lib/rpmrc.c ./lib/rpmrc.c
--- ../rpm-2.91/lib/rpmrc.c	Tue Jan 12 12:20:30 1999
+++ ./lib/rpmrc.c	Wed Feb 24 12:17:52 1999
@@ -119,6 +119,7 @@
     { "pgp_name",               RPMVAR_PGP_NAME,                0, 0,	1, 0 },
     { "pgp_path",               RPMVAR_PGP_PATH,                0, 0,	1, 0 },
     { "provides",               RPMVAR_PROVIDES,                0, 0,	1, 0 },
+    { "prpmdir",		RPMVAR_PRPMDIR,			0, 0,	1, 1 },
     { "require_distribution",	RPMVAR_REQUIREDISTRIBUTION,	0, 0,	1, 0 },
     { "require_icon",		RPMVAR_REQUIREICON,		0, 0,	1, 0 },
     { "require_vendor",		RPMVAR_REQUIREVENDOR,		0, 0,	1, 0 },
@@ -559,6 +560,7 @@
     setPathDefault(RPMVAR_BUILDDIR, "_builddir", "BUILD");
     setPathDefault(RPMVAR_RPMDIR, "_rpmdir", "RPMS");
     setPathDefault(RPMVAR_SRPMDIR, "_srcrpmdir", "SRPMS");
+    setPathDefault(RPMVAR_PRPMDIR, "_prpmdir", "PRPMS");
     setPathDefault(RPMVAR_SOURCEDIR, "_sourcedir", "SOURCES");
     setPathDefault(RPMVAR_SPECDIR, "_specdir", "SPECS");
 
diff -urN ../rpm-2.91/lib-rpmrc.in ./lib-rpmrc.in
--- ../rpm-2.91/lib-rpmrc.in	Mon Jan 18 20:03:40 1999
+++ ./lib-rpmrc.in	Wed Feb 24 11:05:22 1999
@@ -6,7 +6,7 @@
 # whenever a new version of RPM is installed.
 
 dbpath:		@varprefix@/lib/rpm
-topdir:		@prefix@/src/redhat
+topdir:		@prefix@/src/redhat # tried 'cygnus', but 'redhat' is hardcoded over the place
 tmppath:	@tmpdir@
 gzipbin:	@GZIPBIN@
 bzip2bin:	@BZIP2BIN@
@@ -14,6 +14,7 @@
 fixperms:	@FIXPERMS@
 rpmfilename:    %{ARCH}/%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm
 instchangelog:	5
+Provides:	/bin/sh /sbin/install-info
 
 #############################################################
 
@@ -89,8 +90,8 @@
 os_canon:     NEXTSTEP: NextStep 11
 os_canon:       BSD/OS: BSD_OS 12
 os_canon:      machten: machten 13
-os_canon:  CYGWIN32_NT: cygwin32 14
-os_canon:  CYGWIN32_95: cygwin32 15
+os_canon:  CYGWIN_NT: gnuwi386 14
+os_canon:  CYGWIN_95: gnuwi386 15
 os_canon:      UNIX_SV: MP_RAS: 16
 
 #############################################################
@@ -104,13 +105,13 @@
 buildarchtranslate: osfmach3_i486: i386
 buildarchtranslate: osfmach3_i386: i386
 
-buildarchtranslate: i986: i386
-buildarchtranslate: i886: i386
-buildarchtranslate: i786: i386
-buildarchtranslate: i686: i386
-buildarchtranslate: i586: i386
-buildarchtranslate: i486: i386
-buildarchtranslate: i386: i386
+buildarchtranslate: i986: gnuwi386
+buildarchtranslate: i886: gnuwi386
+buildarchtranslate: i786: gnuwi386
+buildarchtranslate: i686: gnuwi386
+buildarchtranslate: i586: gnuwi386
+buildarchtranslate: i486: gnuwi386
+buildarchtranslate: i386: gnuwi386
 
 buildarchtranslate: osfmach3_ppc: ppc
 buildarchtranslate: powerpc: ppc
@@ -128,6 +129,8 @@
 arch_compat: i586: i486
 arch_compat: i486: i386
 arch_compat: i386: noarch
+arch_compat: i386: gnuwi386
+arch_compat: gnuwi386: noarch
 
 arch_compat: osfmach3_i986: i986 osfmach3_i886
 arch_compat: osfmach3_i886: i886 osfmach3_i786
diff -urN ../rpm-2.91/macros.in ./macros.in
--- ../rpm-2.91/macros.in	Thu Jan 21 17:56:36 1999
+++ ./macros.in	Wed Feb 24 12:00:40 1999
@@ -50,6 +50,7 @@
 %_sourcedir		%{_topdir}/SOURCES
 %_specdir		%{_topdir}/SPECS
 %_srcrpmdir		%{_topdir}/SRPMS
+%_prpmdir		%{_topdir}/PRPMS
 %_tmppath		%{_var}/tmp
 %_topdir		%{_usrsrc}/redhat
 #
diff -urN ../rpm-2.91/misc/glob.c ./misc/glob.c
--- ../rpm-2.91/misc/glob.c	Tue Jan 12 11:55:04 1999
+++ ./misc/glob.c	Wed Feb 24 11:05:20 1999
@@ -143,6 +143,7 @@
 #define	size_t	unsigned int
 #endif
 
+#if 0
 /* Some system header files erroneously define these.
    We want our own definitions from <fnmatch.h> to take precedence.  */
 #undef FNM_PATHNAME
@@ -159,6 +160,7 @@
 #undef GLOB_APPEND
 #undef GLOB_NOESCAPE
 #undef GLOB_PERIOD
+#endif
 
 __ptr_t (*__glob_opendir_hook) __P ((const char *directory));
 const char *(*__glob_readdir_hook) __P ((__ptr_t stream));
diff -urN ../rpm-2.91/misc/inet_aton.c ./misc/inet_aton.c
--- ../rpm-2.91/misc/inet_aton.c	Tue Jan 12 11:55:04 1999
+++ ./misc/inet_aton.c	Wed Feb 24 11:05:20 1999
@@ -13,8 +13,12 @@
 {
     long addr;
 
+#if 0
     addr = inet_addr(cp);
     if (addr == ((long) -1)) return 0;
+#else
+    return 0;
+#endif
 
     memcpy(inp, &addr, sizeof(addr));
     return 1;
diff -urN ../rpm-2.91/po/Makefile.in ./po/Makefile.in
--- ../rpm-2.91/po/Makefile.in	Thu Jan 21 21:11:06 1999
+++ ./po/Makefile.in	Wed Feb 24 11:07:30 1999
@@ -4,7 +4,7 @@
 
 LOCALEDIR=/usr/share/locale
 
-INSTALL= /usr/bin/install -c
+INSTALL= /usr/local/bin/install -c
 
 installprefix = $(DESTDIR)
 
@@ -17,7 +17,7 @@
 
 POTFILES = \
 
-all: $(NLSPACKAGE).pot $(CATALOGS)
+all: # $(NLSPACKAGE).pot $(CATALOGS)
 
 $(NLSPACKAGE).pot: $(POTFILES)
 	xgettext --default-domain=$(NLSPACKAGE) \
diff -urN ../rpm-2.91/po/Makefile.in.in ./po/Makefile.in.in
--- ../rpm-2.91/po/Makefile.in.in	Thu Jan 21 21:10:42 1999
+++ ./po/Makefile.in.in	Wed Feb 24 11:05:20 1999
@@ -17,7 +17,7 @@
 
 POTFILES = \
 
-all: $(NLSPACKAGE).pot $(CATALOGS)
+all: # $(NLSPACKAGE).pot $(CATALOGS)
 
 $(NLSPACKAGE).pot: $(POTFILES)
 	xgettext --default-domain=$(NLSPACKAGE) \
diff -urN ../rpm-2.91/popt/Makefile.am ./popt/Makefile.am
--- ../rpm-2.91/popt/Makefile.am	Thu Jan 21 22:03:00 1999
+++ ./popt/Makefile.am	Wed Feb 24 11:05:20 1999
@@ -5,7 +5,7 @@
 EXTRA_DIST = CHANGES autogen.sh findme.h $(man_MANS) popt.spec poptint.h \
 	testit.sh po/*.in po/*.po po/popt.pot popt.ps
 
-SUBDIRS = po
+SUBDIRS =
 
 tbd = `pwd`/$(top_builddir)
 LDFLAGS = -L$(tbd)
diff -urN ../rpm-2.91/popt/po/Makefile.in.in ./popt/po/Makefile.in.in
--- ../rpm-2.91/popt/po/Makefile.in.in	Thu Jan 21 21:10:48 1999
+++ ./popt/po/Makefile.in.in	Wed Feb 24 11:05:20 1999
@@ -17,7 +17,7 @@
 
 POTFILES = \
 
-all: $(NLSPACKAGE).pot $(CATALOGS)
+all: # $(NLSPACKAGE).pot $(CATALOGS)
 
 $(NLSPACKAGE).pot: $(POTFILES)
 	xgettext --default-domain=$(NLSPACKAGE) \
diff -urN ../rpm-2.91/popt/popt.c ./popt/popt.c
--- ../rpm-2.91/popt/popt.c	Tue Jan 12 11:55:16 1999
+++ ./popt/popt.c	Wed Feb 24 11:05:20 1999
@@ -220,10 +220,12 @@
 
     argv[pos++] = NULL;
 
+#ifndef __CYGWIN32__
 #ifdef __hpux
     setresuid(getuid(), getuid(),-1);
 #else
     setreuid(getuid(), getuid()); /*hlauer: not portable to hpux9.01 */
+#endif
 #endif
 
     execvp(argv[0], argv);
diff -urN ../rpm-2.91/rpm.c ./rpm.c
--- ../rpm-2.91/rpm.c	Tue Jan 19 17:51:46 1999
+++ ./rpm.c	Wed Feb 24 11:05:20 1999
@@ -540,7 +540,7 @@
     quiet = 0;
     replaceFiles = 0;
     replacePackages = 0;
-    rootdir = "/";
+    rootdir = "/.";
     showrc = 0;
     signIt = 0;
     test = 0;
@@ -1008,7 +1008,7 @@
 		 "erasure, and building"));
 
     if (bigMode != MODE_INSTALL && bigMode != MODE_UNINSTALL && 
-	bigMode != MODE_QUERY   && bigMode != MODE_VERIFY    && 			bigMode != MODE_REBUILDDB && bigMode != MODE_INITDB && rootdir[1])
+	bigMode != MODE_QUERY   && bigMode != MODE_VERIFY    && 			bigMode != MODE_REBUILDDB && bigMode != MODE_INITDB && rootdir[2])
 	argerror(_("--root (-r) may only be specified during "
 		 "installation, erasure, querying, and "
 		 "database rebuilds"));

