diff --git a/editline/Makefile.in b/editline/Makefile.in
index 67ae6ad4047b244fbcbb43c9997a1cc6d97fa1be..c4e5695154daa85e2a0d559a2baba4f23a61fa9e 100755
--- a/editline/Makefile.in
+++ b/editline/Makefile.in
@@ -3,6 +3,13 @@
 #
 
 OSTYPE=$(shell uname -s)
+cygx="$(shell uname -s | sed -e c\cygwin | tr [:upper:] [:lower:])"
+define cyg_subst_sys
+	if [ $(cygx) = "cygwin" ]; then \
+	cat $@ | sed -e s/"sys\.h"/"config.h"/g > $@.copy; \
+	mv --force $@.copy $@; \
+	fi
+endef
 
 SHELL = /bin/sh
 
@@ -184,7 +191,7 @@ $(LIB_A) : $(BGCSRCS:.c=.o_a) $(CCSRCS:.c=.o_a)
 	$(RANLIB) $@
 
 $(LIB_S) : $(BGCSRCS:.c=.o_s) $(CCSRCS:.c=.o_s)
-	$(CC) $(S_LDFLAGS) -o $@ $(BGCSRCS:.c=.o_s) $(CCSRCS:.c=.o_s)
+	$(CC) $(S_LDFLAGS) -o $@ $(BGCSRCS:.c=.o_s) $(CCSRCS:.c=.o_s) $(LIBS)
 
 $(TEST) : $(TCSRCS:.c=.o) $(LIB_A)
 	$(CC) -o $@ $(TCSRCS:.c=.o) $(LIB_A) $(LIBS)
@@ -203,12 +210,14 @@ fcns.h : $(AGHDRS)
 
 fcns.c : $(AGHDRS) fcns.h
 	$(SHELL) makelist -fc $(AGHDRS) > $@
+	$(cyg_subst_sys)
 
 help.h : $(ACSRCS)
 	$(SHELL) makelist -bh $(ACSRCS) > $@
 
 help.c : $(ACSRCS) help.h
 	$(SHELL) makelist -bc $(ACSRCS) > $@
+	$(cyg_subst_sys)
 
 editline.c : $(ACSRCS) $(BCSRCS) $(AGCSRCS)
 	$(SHELL) makelist -e $(ACSRCS) $(BCSRCS) $(AGCSRCS) > $@
diff --git a/editline/config.h.in b/editline/config.h.in
index a645a7f06fc491a8b9e483abf8a628ffbeb70139..151fb226db69d744870818e4b34549be178902dd 100755
--- a/editline/config.h.in
+++ b/editline/config.h.in
@@ -1,4 +1,5 @@
 #undef SUNOS
+#undef CYGWIN
 
 #undef HAVE_SYS_CDEFS_H
 #undef HAVE_TERMCAP_H
@@ -15,3 +16,6 @@
 #undef HAVE_STRUNVIS
 
 #include "sys.h"
+#ifdef CYGWIN
+# include "cygdef.h"
+#endif
diff --git a/editline/configure b/editline/configure
index ce38a97a54f94b61a90b0a37e52ac4f9d14a1c5c..9dccffd0ff9f862e1c4bded976389151813f47af 100755
--- a/editline/configure
+++ b/editline/configure
@@ -894,7 +894,26 @@ case "${host}" in
   *-*-freebsd*)
 	ABI="elf"
 	;;
-  *-*-linux*)
+  *-*-linux* | *cygwin*)
+	cyg="$(echo ${host} | sed -e c\cygwin)"
+	if [ ${cyg} = cygwin ]; then \
+		echo "cygwin detected"; \
+		S_CFLAGS=""; \
+		echo "/* cygdef.h. Generated automatically by configure. */ 
+#ifndef _CYGDEF_H_
+#define _CYGDEF_H_ 1
+#include <sys/ioctl.h>
+#define __linux__ 1
+ 
+
+typedef void (*sig_t)(int);
+ 
+
+#endif /* _CYGDEF_H_ */" > cygdef.h; \
+	echo "
+ #define CYGWIN 1
+" > confdefs.h; \
+	fi
 	ABI="elf"
 	;;
   *-*-netbsd*)
diff --git a/editline/configure.in b/editline/configure.in
index 72ae9180bc06f542ac151bb4955c81bbcb099ca9..dcef07a91aedb98024b338fa2d14e05ba96cfb44 100755
--- a/editline/configure.in
+++ b/editline/configure.in
@@ -31,7 +31,26 @@ case "${host}" in
   *-*-freebsd*)
 	ABI="elf"
 	;;
-  *-*-linux*)
+  *-*-linux* | *cygwin*)
+	cyg="$(echo ${host} | sed -e c\cygwin)"
+	if [ ${cyg} = cygwin ]; then \
+		echo "cygwin detected"; \
+		S_CFLAGS=""; \
+		echo "/* cygdef.h. Generated automatically by configure. */ 
+#ifndef _CYGDEF_H_
+#define _CYGDEF_H_ 1
+#include <sys/ioctl.h>
+#define __linux__ 1
+ 
+
+typedef void (*sig_t)(int);
+ 
+
+#endif /* _CYGDEF_H_ */" > cygdef.h; \
+	echo "
+ #define CYGWIN 1
+" > confdefs.h; \
+	fi
 	ABI="elf"
 	;;
   *-*-netbsd*)