Final part of SF patch #102409 by jlt63: Cygwin Python DLL and Shared
Extension Patch.

These are the changes to the Modules Makefile and makesetup script for
Cygwin.
diff --git a/Modules/Makefile.pre.in b/Modules/Makefile.pre.in
index 82a4e16..9487980 100644
--- a/Modules/Makefile.pre.in
+++ b/Modules/Makefile.pre.in
@@ -105,6 +105,7 @@
 
 LIBRARY=	../libpython$(VERSION).a
 LDLIBRARY=	../@LDLIBRARY@
+@SET_DLLLIBRARY@
 
 # === Rules ===
 
@@ -127,6 +128,14 @@
 		  $(LDLIBRARY) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python$(EXE) $(LDLAST)
 		mv python$(EXE) ../python$(EXE)
 
+# This rule builds the Cygwin Python DLL
+$(DLLLIBRARY): $(LIBRARY)
+		test -d cygwin || mkdir cygwin
+		(cd cygwin; ar x ../$^)
+		dlltool --export-all --output-def $(basename $@).def cygwin/*.o
+		$(LDSHARED) -Wl,--out-implib=$(LDLIBRARY) -o $@ $(basename $@).def cygwin/*.o $(MODLIBS) $(LIBS) $(SYSLIBS)
+		rm -fr cygwin
+
 clean:
 		-rm -f *.o python$(EXE) core *~ [@,#]* *.old *.orig *.rej
 		-rm -f add2lib hassignal
diff --git a/Modules/makesetup b/Modules/makesetup
index 528f118..125a51e 100755
--- a/Modules/makesetup
+++ b/Modules/makesetup
@@ -79,6 +79,18 @@
 NL='\
 '
 
+# Setup to link with extra libraries when makeing shared extensions.
+# Currently, only Cygwin needs this baggage.
+case `uname -s` in
+CYGWIN*) if test $srcdir = .
+	 then
+	 	ExtraLibDir=..
+	 else
+	 	ExtraLibDir='$(LIBPL)'
+	 fi
+	 ExtraLibs="-L$ExtraLibDir -lpython\$(VERSION)";;
+esac
+
 # Main loop
 for i in ${*-Setup}
 do
@@ -149,6 +161,7 @@
 			*.so)		libs="$libs $arg";;
 			*.sl)		libs="$libs $arg";;
 			/*.o)		libs="$libs $arg";;
+			*.def)		libs="$libs $arg";;
 			*.o)		srcs="$srcs `basename $arg .o`.c";;
 			*.[cC])		srcs="$srcs $arg";;
 			*.cc)		srcs="$srcs $arg";;
@@ -213,7 +226,7 @@
 			no)	SHAREDMODS="$SHAREDMODS $file";;
 			esac
 			rule="$file: $objs"
-			rule="$rule; \$(LDSHARED) $objs $libs -o $file"
+			rule="$rule; \$(LDSHARED) $objs $libs $ExtraLibs -o $file"
 			echo "$rule" >>$rulesf
 		done
 	done