#
#	Makefile for the socket library.
#

SHELL = /bin/sh

#
# Define this to be the directory where youre include files live,
# defaults to /usr/include
#

ifndef CROSS
SYSINCLUDE = /usr/include
CC = gcc
AR = ar
else
SYSINCUDE = /tmp/kay/gcc/cross-gcc/include
CC = cgcc
AR = car
endif

#
# if you define UNX2DOS, all path names specified by `struct sockaddr_un'
# will be converted from unix style to dos style prior to passing them
# to the OS. Note that this is time consuming, espacially for sendto().
# You MUST define UNX2DOS if you are going to use unix style path names
# containing / and the like.
#
CPPFLAGS = -nostdinc -I. -I$(SYSINCLUDE) -I../include -DUNX2DOS
CFLAGS = -Wall -O2 -fomit-frame-pointer

BASESRCS = socket.c socketpair.c bind.c listen.c connect.c accept.c \
  recv.c send.c recvfrom.c sendto.c shutdown.c getsockname.c \
  getpeername.c getsockopt.c setsockopt.c sendmsg.c recvmsg.c \
  sncpy.c

INETSRCS = inet_addr.c inet_lnaof.c inet_makeaddr.c inet_netof.c \
  inet_network.c inet_ntoa.c \
  getnetbyaddr.c getnetbyname.c getnetent.c getproto.c getprotoent.c \
  getprotoname.c getservbyname.c getservbyport.c getservent.c \
  herror.c rcmd.c \
  gethostnamadr.c sethostent.c res_comp.c res_debug.c res_init.c \
  res_mkquery.c res_query.c res_send.c \
  strcasecmp.c

BASEOBJS = socket.o socketpair.o bind.o listen.o connect.o accept.o \
  recv.o send.o recvfrom.o sendto.o shutdown.o getsockname.o \
  getpeername.o getsockopt.o setsockopt.o sendmsg.o recvmsg.o \
  sncpy.o

INETOBJS = inet_addr.o inet_lnaof.o inet_makeaddr.o inet_netof.o \
  inet_network.o inet_ntoa.o \
  getnetbyaddr.o getnetbyname.o getnetent.o getproto.o getprotoent.o \
  getprotoname.o getservbyname.o getservbyport.o getservent.o \
  herror.o rcmd.o \
  gethostnamadr.o sethostent.o res_comp.o res_debug.o res_init.o \
  res_mkquery.o res_query.o res_send.o \
  strcasecmp.o

#
# self-configuration section
#

ifeq (short.target, $(wildcard short.target))
SOCKETLIB = socket16.olb
XFLAGS = -mshort
SRCS = $(BASESRCS) $(INETSRCS)
OBJS = $(BASEOBJS) $(INETOBJS)
endif

ifeq (long.target, $(wildcard long.target))
SOCKETLIB = socket.olb
SRCS = $(BASESRCS) $(INETSRCS)
OBJS = $(BASEOBJS) $(INETOBJS)
endif

ifeq (bshort.target, $(wildcard bshort.target))
SOCKETLIB = bsocket16.olb
XFLAGS = -mshort -mbaserel
SRCS = $(BASESRCS) $(INETSRCS)
OBJS = $(BASEOBJS) $(INETOBJS)
endif

ifeq (blong.target, $(wildcard blong.target))
SOCKETLIB = bsocket.olb
XFLAGS = -mbaserel
SRCS = $(BASESRCS) $(INETSRCS)
OBJS = $(BASEOBJS) $(INETOBJS)
endif

ifeq (kernel.target, $(wildcard kernel.target))
SOCKETLIB = ksocket16.olb
XFLAGS = -mshort -DKERNEL
SRCS = $(BASESRCS)
OBJS = $(BASEOBJS)
endif

.c.o:
	$(CC) $(XFLAGS) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

all: short long bshort blong

%.target:
	rm -f *.target
	$(MAKE) clean
	touch $@

short: short.target
	$(MAKE) lib

long: long.target
	$(MAKE) lib

bshort: bshort.target
	$(MAKE) lib

blong: blong.target
	$(MAKE) lib

kernel: kernel.target
	$(MAKE) lib

lib: $(SOCKETLIB)

ifndef CROSS
$(SOCKETLIB): $(patsubst %, $(SOCKETLIB)(%), $(OBJS))
	$(AR) s $(SOCKETLIB)

(%): %
	$(AR) r $@ $%
else
$(SOCKETLIB): $(OBJS)
	$(AR) rcs $(SOCKETLIB) $(OBJS)
endif

clean:
	rm -f $(BASEOBJS) $(INETOBJS) *.target

depend:
	$(CC) -MM $(XFLAGS) $(CPPFLAGS) *.c > depend

ifeq (depend, $(wildcard depend))
include depend
endif
