diff --git a/bin/varnishd/Makefile.am b/bin/varnishd/Makefile.am
index b8db6e0..f920b42 100644
--- a/bin/varnishd/Makefile.am
+++ b/bin/varnishd/Makefile.am
@@ -106,9 +106,15 @@ varnishd_LDADD = \
 	$(top_builddir)/lib/libvcl/libvcl.la \
 	$(top_builddir)/lib/libvgz/libvgz.la \
 	@JEMALLOC_LDADD@ \
-	${DL_LIBS} ${PTHREAD_LIBS} ${NET_LIBS} ${LIBM} ${LIBUMEM}
+	${DL_LIBS} ${PTHREAD_LIBS} ${NET_LIBS} ${LIBM} ${LIBUMEM} ${CYGWIN_varnishd_LDFLAGS}
 
 EXTRA_DIST = default.vcl
+
+EXTRA_SCRIPTS = 
+
+sbin_SCRIPTS = ${CYGWIN_libvarnishd_OBJECTS}
+
+
 DISTCLEANFILES = default_vcl.h
 
 #
diff --git a/configure.ac b/configure.ac
index f574764..9f7753e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -350,12 +357,24 @@ AC_CACHE_CHECK([whether SO_RCVTIMEO works],
 #include <sys/time.h>
     ]],[[
 int sd = socket(AF_INET, SOCK_STREAM, 0);
-struct timeval tv = { 1, 0 };
-return !!setsockopt(sd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv);
+struct timeval tv_set = { 1, 0 };
+if(!setsockopt(sd, SOL_SOCKET, SO_RCVTIMEO, &tv_set, sizeof tv_set))
+{
+	struct timeval tv_get;
+	socklen_t l;
+
+	l = sizeof tv_get;
+	if(!getsockopt(sd, SOL_SOCKET, SO_RCVTIMEO, &tv_get, &l))
+	{
+		return (l != sizeof tv_get);
+	}
+}
+return 1;
     ]])],
     [ac_cv_so_rcvtimeo_works=yes],
     [ac_cv_so_rcvtimeo_works=no])
   ])
+
 if test "$ac_cv_so_rcvtimeo_works" = yes; then
    AC_DEFINE([SO_RCVTIMEO_WORKS], [1], [Define if SO_RCVTIMEO works])
 fi
@@ -369,12 +388,24 @@ AC_CACHE_CHECK([whether SO_SNDTIMEO works],
 #include <sys/time.h>
     ]],[[
 int sd = socket(AF_INET, SOCK_STREAM, 0);
-struct timeval tv = { 1, 0 };
-return !!setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof tv);
+struct timeval tv_set = { 1, 0 };
+if(!setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO, &tv_set, sizeof tv_set))
+{
+	struct timeval tv_get;
+	socklen_t l;
+
+	l = sizeof tv_get;
+	if(!getsockopt(sd, SOL_SOCKET, SO_SNDTIMEO, &tv_get, &l))
+	{
+		return (l != sizeof tv_get);
+	}
+}
+return 1;
     ]])],
     [ac_cv_so_sndtimeo_works=yes],
     [ac_cv_so_sndtimeo_works=no])
   ])
+
 if test "$ac_cv_so_sndtimeo_works" = yes; then
    AC_DEFINE([SO_SNDTIMEO_WORKS], [1], [Define if SO_SNDTIMEO works])
 fi
@@ -457,6 +488,19 @@ else
 	*-*-darwin*)
 		VCC_CC="exec cc $OCFLAGS -dynamiclib -Wl,-undefined,dynamic_lookup -o %o %s"
 		;;
+	*-*-cygwin*)
+		#calculate ${exec_prefix}/lib, because it is asigned later, and we need now
+		prefix_aux=`eval echo ${prefix}`
+		test "x$prefix_aux" = xNONE && prefix_aux=`eval echo ${ac_default_prefix}`
+		# Let make expand exec_prefix.
+		exec_prefix_aux=`eval echo ${exec_prefix}`
+		test "x$exec_prefix_aux" = xNONE && exec_prefix_aux=`eval echo ${prefix_aux}`
+		# Remove "/" if we are in Root
+		test "x$exec_prefix_aux" = "x/" && exec_prefix_aux=""
+		#calculate compilation path
+		comp_prefix=`pwd`
+		VCC_CC="$PTHREAD_CC $OCFLAGS $PTHREAD_CFLAGS -shared %s -L${comp_prefix}/lib/libvarnish/.libs -L${comp_prefix}/bin/varnishd -L${exec_prefix_aux}/lib -L${exec_prefix_aux}/sbin -L${exec_prefix_aux}/bin -lvarnish -lvarnishd -o %o"
+		;;
 	*)
 		VCC_CC="exec $PTHREAD_CC $OCFLAGS $PTHREAD_CFLAGS -fpic -shared -Wl,-x -o %o %s"
 		;;
@@ -487,6 +531,26 @@ esac])
 AC_SUBST(JEMALLOC_SUBDIR)
 AC_SUBST(JEMALLOC_LDADD)
 
+# Add library dependencies with libvarnish (linker needs it in CYGWIN during compilation time)
+# Generate fake library libvarnishd.dll.a in order to successful linking DLL when resolving varnishd.exe simbols
+case $target in
+*-*-cygwin*)
+		CYGWIN_varnishd_LDFLAGS=' -Wl,-out-implib,libvarnishd.dll.a'
+		CYGWIN_libvarnishd_OBJECTS='libvarnishd.dll.a'
+		CYGWIN_libvmod_std_la_LIBADD='$(top_builddir)/lib/libvarnish/libvarnish.la -lvarnishd -L$(top_builddir)/bin/varnishd'
+		AC_SUBST(CYGWIN_varnishd_LDFLAGS)
+		AC_SUBST(CYGWIN_libvarnishd_OBJECTS)
+		AC_SUBST(CYGWIN_libvmod_std_la_LIBADD)
+		cygwin=true
+		;;
+*)
+		cygwin=false
+		;;
+esac
+
+AM_CONDITIONAL([CYGWIN_COMPILATION], test x$cygwin = xtrue)
+
+
 # Generate output
 AC_CONFIG_FILES([
     Makefile
diff --git a/lib/libvarnishapi/Makefile.am b/lib/libvarnishapi/Makefile.am
index 9aa49ce..0fef20e 100644
--- a/lib/libvarnishapi/Makefile.am
+++ b/lib/libvarnishapi/Makefile.am
@@ -26,4 +26,6 @@ libvarnishapi_la_SOURCES = \
 libvarnishapi_la_CFLAGS = \
 	-DVARNISH_STATE_DIR='"${VARNISH_STATE_DIR}"'
 
-libvarnishapi_la_LIBADD = @PCRE_LIBS@
+libvarnishapi_la_LIBADD = \
+	$(top_builddir)/lib/libvarnish/libvarnish.la \
+	@PCRE_LIBS@
diff --git a/lib/libvcl/Makefile.am b/lib/libvcl/Makefile.am
index aab8749..4645bba 100644
--- a/lib/libvcl/Makefile.am
+++ b/lib/libvcl/Makefile.am
@@ -33,6 +33,8 @@ libvcl_la_SOURCES = \
 	vcc_vmod.c \
 	vcc_xref.c
 
+libvcl_la_LIBADD = $(top_builddir)/lib/libvarnish/libvarnish.la
+
 EXTRA_DIST = \
 	generate.py
 
diff --git a/lib/libvmod_std/Makefile.am b/lib/libvmod_std/Makefile.am
index 36147fe..41c32c8 100644
--- a/lib/libvmod_std/Makefile.am
+++ b/lib/libvmod_std/Makefile.am
@@ -13,9 +13,16 @@ libvmod_std_la_SOURCES = \
 	vmod_std.c \
 	vmod_std_fileread.c
 
+libvmod_std_la_LIBADD = ${CYGWIN_libvmod_std_la_LIBADD}
+
 vcc_if.c vcc_if.h: $(top_srcdir)/lib/libvmod_std/vmod.py $(top_srcdir)/lib/libvmod_std/vmod.vcc
 	@PYTHON@ $(top_srcdir)/lib/libvmod_std/vmod.py $(top_srcdir)/lib/libvmod_std/vmod.vcc
 
 EXTRA_DIST = vmod.py vmod.vcc
 
 CLEANFILES = $(builddir)/vcc_if.c $(builddir)/vcc_if.h
+
+if CYGWIN_COMPILATION
+install-exec-hook:
+	$(LN_S) -f cygvmod_std-1.dll .libs/libvmod_std.so.1
+endif
