#
# Makefile for tcpip/s2 on various platforms
# K.Furukawa, Oct.1992.,...,Jun.1993,Jan,Feb.1994,Feb,Apr.1996,Jan.1998,Feb.2001,Oct.2003,Jan.2004,Jul.2006.
#
# example:
#  make dec CFLAGS=-g
#  make install HOME=/usr/local
# platforms:
#  dec      for dec ultrix or digital unix (osf1)
#  hp       for hp hp-ux
#  solaris  for sun solaris2
#  aix      for ibm aix
#  bsdi     for bsdi bsd-os
#  freebsd  for freebsd
#  linux    for linux
#  darwin   for darwin
#  win32    for win32
#  borland  for borland on win32 with gnu-make on cygwin
#  gcc      for gcc on normal unix
#  os9      for os9 with ucc
#  vxworks  for vxworks
#
RANLIB = ranlib
# default compiler
CC = gcc -ansi -Wall
MV = mv -f
RM = rm -f
CP = cp -p

CFLAGS = -O
D = s2.ansi
C = s2_recho
S = s2_rechod
CX = s2_xfer
SX = s2_xferd
CT = s2_techo
CB = s2_becho
CO = s2_oecho
PROGS = $(S) $(C) $(SX) $(CX) $(CT) $(CB) $(CO)
N = netdef.h
M = comsub.h
MP = comsub_p.h
AC = comsub.c
AS = comsubs.c
AT = comsubt.c
AU = comsubu.c
OC = comsub.o
OS = comsubs.o
OT = comsubt.o
OU = comsubu.o
LIBO = $(OC) $(OS) $(OT) $(OU)
LIBF = libs2.a
LIBL = -L. -ls2

BINDIR = $(HOME)/bin
LIBDIR = $(HOME)/lib
INCDIR = $(HOME)/include

default:	
	@echo "make platform, where platform is one of"
	@echo " dec, hp, solaris, aix, bsdi, freebsd, linux, darwin, cygwin, win32, gcc, os9, vxworks"

all:	$(PROGS)

$(S):	$(S).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

$(C):	$(C).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

$(SX):	$(SX).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

$(CX):	$(CX).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

$(CT):	$(CT).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

$(CB):	$(CB).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

$(CO):	$(CO).o $(LIBF)
	$(CC) $(CFLAGS) -o $@ $@.o $(LIBL) $(LIB)

.c.o:	$(N) $(M)
	$(CC) $(CFLAGS) -o $@ -c $*.c

$(LIBO):	$(N) $(M) $(MP)

$(LIBF):	$(LIBO)
	-if test -f $(LIBF); then \
		$(RM) $(LIBF).old; \
		$(MV) $(LIBF) $(LIBF).old; fi
	ar cr $(LIBF) $(LIBO)
	$(RANLIB) $(LIBF)

clean:	
	-$(RM) $(LIBF)
	-$(RM) $(LIBO)
	-$(RM) $(S).o $(C).o $(SX).o $(CX).o $(CT).o $(CB).o $(CO).o
	-$(RM) core

realclean:	clean
	-$(RM) $(PROGS) $(LIBF).old
	-$(RM) *.exe

strip:	$(PROGS)
	-strip $(PROGS)

install:	$(PROGS) $(LIBDIR)/$(LIBF) $(INCDIR)/$(N) $(INCDIR)/$(M) strip
	-@if test '!' -d $(BINDIR); then mkdir $(BINDIR); fi
	$(MV) $(PROGS) $(BINDIR)

$(LIBDIR)/$(LIBF):	$(LIBF)
	-@if test '!' -d $(LIBDIR); then mkdir $(LIBDIR); fi
	-if test -f $(LIBDIR)/$(LIBF).old; then $(RM) $(LIBDIR)/$(LIBF).old; fi
	-if test -f $(LIBDIR)/$(LIBF); then \
		$(MV) $(LIBDIR)/$(LIBF) $(LIBDIR)/$(LIBF).old; fi
	$(MV) $(LIBF) $(LIBDIR)

$(INCDIR)/$(N):	$(N)
	-@if test '!' -d $(INCDIR); then mkdir $(INCDIR); fi
	-if test -f $(INCDIR)/$(N).old; then $(RM) $(INCDIR)/$(N).old; fi
	-if test -f $(INCDIR)/$(N); then \
		$(MV) $(INCDIR)/$(N) $(INCDIR)/$(N).old; fi
	$(CP) $(N) $(INCDIR)

$(INCDIR)/$(M):	$(M)
	-@if test '!' -d $(INCDIR); then mkdir $(INCDIR); fi
	-if test -f $(INCDIR)/$(M).old; then $(RM) $(INCDIR)/$(M).old; fi
	-if test -f $(INCDIR)/$(M); then \
		$(MV) $(INCDIR)/$(M) $(INCDIR)/$(M).old; fi
	$(CP) $(M) $(INCDIR)

tar:	
	( cd .. ; tar cvf - \
	$D/Makefile $D/comsub.doc $D/comsub.man \
	$D/$(AC) $D/$(AS) $D/$(AT) $D/$(AU) $D/$N $D/$M $D/$(MP) \
	$D/$(C).c $D/$(S).c \
	$D/$(CX).c $D/$(SX).c $D/$(CT).c $D/$(CB).c $D/$(CO).c \
	$D/getopt.c $D/ftime.c $D/os9systypes.h $D/os9systimeb.h \
	$D/Makefile.os9* $D/Makefile.hprt $D/Makefile.msc $D/Makefile.vx \
	$D/Makefile.bor | compress > $(D).tar.Z )

gcc:	Makefile
	@echo "Making s2 for gcc ..."
	$(MAKE) all
#	$(MAKE) $(MAKEFLAGS) all

dec:	Makefile
# -std1 specifies ANSI conformance
	@echo "Making s2 for DEC Ultrix or Digital Unix ..."
#	$(MAKE) $(MAKEFLAGS) all "CC= cc -std1" "RANLIB= ranlib"
	$(MAKE) all "CC= cc -std1"

hp:	Makefile
# -Aa specifies ANSI conformance, _HPUX_SOURCE is double-checked in netdef.h
	@echo "Making s2 for HP HP-UX ..."
#	if we use touch for RANLIB, strange file date may be observed
#	$(MAKE) $(MAKEFLAGS) all "CC= cc -Aa -D_HPUX_SOURCE" "RANLIB= touch"
	$(MAKE) all "CC= cc -Aa -D_HPUX_SOURCE" "RANLIB= echo"

solaris:	Makefile
# using /opt/SUNWspro/bin/cc (instead of /opt/SUNWspro/SC3.0.1/bin/acc)
# -Xc specifies ANSI conformance
	@echo "Making s2 for Sun Solaris ..."
	$(MAKE) all "CC= cc -Xc" \
		"LIB= -lsocket -lnsl"

aix:	Makefile
# -qlanglvl=ansi specifies ANSI conformance
	@echo "Making s2 for IBM AIX ..."
	$(MAKE) all "CC= cc -qlanglvl=ansi"

bsdi:	Makefile
# no strict ANSI conformance since strict POSIX will be assumed in header files
	@echo "Making s2 for BSDI BSD/OS ..."
	$(MAKE) all "CC=gcc"

linux:	gcc
# using gcc
	@echo "Making s2 for Linux ..."

freebsd:	gcc
# using gcc
	@echo "Making s2 for FreeBSD ..."

darwin:	
# using cc
	@echo "Making s2 for Darwin ..."
	$(MAKE) all "CC= cc -ansi -Wall"

cygwin32:	cygwin

cygwin:	gcc
# using gcc
	@echo "Making s2 for Windows/Cygwin ..."

borland:	Makefile
# using gnu-make under cygwin
	@echo "Making s2 for Windows/Borland ..."
	$(MAKE) -f Makefile.bor all

os9:	Makefile.os9_gmake
# using cc -mode=c89
	@echo "Making s2 for OS9 ultraC ..."
	gmake -f Makefile.os9_gmake

vxworks:	
	@echo "Making s2 for VxWorks using Makefile.vx"
	$(MAKE) -f Makefile.vx all
