Stunnel 4.10 does not compile with Visual Studio 7. After spending the past few days to get it to compile, I thought someone might find this useful. There is a change to the common.h that you need to hack. Basically, you need to include <winsock2.h> and <ws2tcpip.h> before <windows.h> to make it compile without any warning.
The content of the make file(stunnel.mak) is below:
!IF "$(CFG)" == "" CFG=stunnel - Release !MESSAGE No configuration specified. Defaulting to "stunnel - Release" !ENDIF
!IF "$(CFG)" != "stunnel - Release" !MESSAGE Invalid configuration "$(CFG)" specified. !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "stunnel.mak" CFG="stunnel - Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "stunnel Release" (based on "Win32 (x86) Console Application") !MESSAGE !ERROR An invalid configuration is specified. !ENDIF
!IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF
CPP=cl.exe RSC=rc.exe
!IF "$(CFG)" == "stunnel - Release"
OPENSSL=c:\openssl-0.9.7g !MESSAGE === OpenSSL is configured to be at $(OPENSSL) === OUTDIR=.\Release INTDIR=.\Release # Begin Custom Macros OutDir=.\Release # End Custom Macros
ALL : "$(OUTDIR)\stunnel.exe"
CLEAN : -@erase "$(INTDIR)\client.obj" -@erase "$(INTDIR)\gui.obj" -@erase "$(INTDIR)\log.obj" -@erase "$(INTDIR)\network.obj" -@erase "$(INTDIR)\options.obj" -@erase "$(INTDIR)\protocol.obj" -@erase "$(INTDIR)\resources.res" -@erase "$(INTDIR)\resolver.obj" -@erase "$(INTDIR)\ssl.obj" -@erase "$(INTDIR)\sthreads.obj" -@erase "$(INTDIR)\stunnel.obj" -@erase "$(INTDIR)\vc60.idb" -@erase "$(OUTDIR)\stunnel.exe"
"$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
CPP_PROJ=/nologo /MT /W3 /G5 /O2 /I "$(OPENSSL)\inc32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "USE_WIN32" /D "HAVE_OPENSSL" /D "HAVE_GETADDRINFO" /D "HAVE_GETNAMEINFO" /Fo"$(INTDIR)\" /Fd"$(INTDIR)\" /FD /c RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resources.res" /d "NDEBUG"
.c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< <<
.cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< <<
.cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< <<
.c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< <<
.cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< <<
.cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< <<
BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\stunnel.bsc" BSC32_SBRS= \ LINK32=link.exe LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib wsock32.lib $(OPENSSL)\out32dll\ssleay32.lib $(OPENSSL)\out32dll\libeay32.lib /nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\stunnel.pdb" /machine:I386 /out:"$(OUTDIR)\stunnel.exe" LINK32_OBJS= \ "$(INTDIR)\stunnel.obj" \ "$(INTDIR)\client.obj" \ "$(INTDIR)\gui.obj" \ "$(INTDIR)\log.obj" \ "$(INTDIR)\network.obj" \ "$(INTDIR)\options.obj" \ "$(INTDIR)\protocol.obj" \ "$(INTDIR)\resources.res" \ "$(INTDIR)\resolver.obj" \ "$(INTDIR)\ssl.obj" \ "$(INTDIR)\sthreads.obj"
"$(OUTDIR)\stunnel.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< $(LINK32_FLAGS) $(LINK32_OBJS) <<
!ENDIF
!IF "$(CFG)" == "stunnel - Release" || "$(CFG)" == "stunnel - Debug" SOURCE=.\client.c
"$(INTDIR)\client.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\gui.c
"$(INTDIR)\gui.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\log.c
"$(INTDIR)\log.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\network.c
"$(INTDIR)\network.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\options.c
"$(INTDIR)\options.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\protocol.c
"$(INTDIR)\protocol.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\resources.rc
"$(INTDIR)\resources.res" : $(SOURCE) "$(INTDIR)" $(RSC) $(RSC_PROJ) $(SOURCE)
SOURCE=.\resolver.c
"$(INTDIR)\resolver.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\ssl.c
"$(INTDIR)\ssl.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\sthreads.c
"$(INTDIR)\sthreads.obj" : $(SOURCE) "$(INTDIR)"
SOURCE=.\stunnel.c
"$(INTDIR)\stunnel.obj" : $(SOURCE) "$(INTDIR)"
!ENDIF