#### Uncomment one of the following:
## Visual C++
CC = cl
CFLAGS = -GX -Os -G5
LFLAGS = wsock32.lib /Fe$@
OBJEXT = obj

## Borland C++
#CC = bcc32
#CFLAGS = -Os -5
#LFLAGS = -e$@
#OBJEXT = obj

## Cygwin/GNU C++
#CC = g++
#CFLAGS = -Wall -O
#LFLAGS = -lwsock32 -o $@
#OBJEXT = o


.SUFFIXES: .cpp .$(OBJEXT)

## Build rule for VC++ and BC++
.cpp.$(OBJEXT):
	$(CC) -c $(CFLAGS) $<

## Build rule for Cygwin/GNU C++
#.cpp.$(OBJEXT):
#	$(CC) -c $(CFLAGS) $< -o $*.o


#### Major targets #####################################################

all: basic-client.exe basic-server.exe threaded-server.exe \
		select-server.exe

ctags:
	ctags *.cpp *.h

clean:
	del *.$(OBJEXT) *.bak

distclean: clean
	del *.exe *.swp


#### Common dependencies ###############################################

main.$(OBJEXT): main.cpp
ws-util.$(OBJEXT): ws-util.cpp ws-util.h


#### Basic Winsock client ##############################################

BASIC_CLIENT_OBJS = basic-client.$(OBJEXT) main.$(OBJEXT) \
		ws-util.$(OBJEXT)
basic-client.exe: $(BASIC_CLIENT_OBJS)
	$(CC) $(BASIC_CLIENT_OBJS) $(LFLAGS)

basic-client.$(OBJEXT): basic-client.cpp ws-util.h


#### Basic Winsock server ##############################################

BASIC_SERVER_OBJS = basic-server.$(OBJEXT) main.$(OBJEXT) \
		ws-util.$(OBJEXT)
basic-server.exe: $(BASIC_SERVER_OBJS)
	$(CC) $(BASIC_SERVER_OBJS) $(LFLAGS)

basic-server.$(OBJEXT): basic-server.cpp ws-util.h


#### Threaded Winsock server ###########################################

THREADED_SERVER_OBJS = threaded-server.$(OBJEXT) main.$(OBJEXT) \
		ws-util.$(OBJEXT)
threaded-server.exe: $(THREADED_SERVER_OBJS)
	$(CC) $(THREADED_SERVER_OBJS) $(LFLAGS)

threaded-server.$(OBJEXT): threaded-server.cpp ws-util.h


#### select()-based Winsock server #####################################

SELECT_SERVER_OBJS = select-server.$(OBJEXT) main.$(OBJEXT) \
		ws-util.$(OBJEXT)
select-server.exe: $(SELECT_SERVER_OBJS)
	$(CC) $(SELECT_SERVER_OBJS) $(LFLAGS)

select-server.$(OBJEXT): select-server.cpp ws-util.h


