# Written by Germano Caronni and Werner Almesberger 
# (c) by G. Caronni in '94 
# This program is under the GNU Public License Version 2 

# Socks5 mods made by Alex Le Heux
# For Socks5 support uncomment the next two lines
#CFLAGS_SOCKS5 = -DSOCKS -I/usr/local/include
#LDLIBS_SOCKS5 = -lsocks5

# define USE_PIPE for local-operation mode without sockets...
#this is the optimum for SS10/20 and Supersparcs, or so M. Dasen says
#CFLAGS= -O6 -msupersparc -fomit-frame-pointer

GCC_CFLAGS = -Wall -pedantic -Wshadow $(CFLAGS_SOCKS5)
CFLAGS_GENERIC = $(GCC_CFLAGS) $(CFLAGS)
CFLAGS_I386 = $(GCC_CFLAGS) -O4 -m486 -malign-loops=2 -malign-jumps=2 \
  -malign-functions=2 -fomit-frame-pointer -DROT_I386 -DASM_LOOP
CFLAGS_I586 = $(GCC_CFLAGS) -O6 -Wall -frisc -mpentium -funroll-loops \
  -fomit-frame-pointer -DROT_I386 -DROT3_I386 -DASM_LOOP
CFLAGS_I386AOUT = $(GCC_CFLAGS) -O2 -Wall -m486 -funroll-loops \
  -fomit-frame-pointer -DROT_I386 -DROT3_I386
CFLAGS_SPARC = $(GCC_CFLAGS) -O6 -msupersparc -fomit-frame-pointer
LDLIBS_SOLARIS = -lnsl -lsocket 
CFLAGS_HPUX = +O3 -Aa -Dhpux -D__ANSI_CPP__ -D_HPUX_SOURCE -DA`uname -m|sed 's/9000\///'`
CFLAGS_PPC  = -O3 -qarch=ppc
CFLAGS_RS6000 = -O6 -DROT_POWER
CFLAGS_ALPHA = -migrate -O5
CFLAGS_IRIX = -O2 -fullwarn
CFLAGS_FBSD = $(CFLAGS_I386)
CFLAGS_OS2 = $(GCC_CFLAGS) -O2 -m486 -Zomf

all:
		@echo Please specify the target architecture, e.g.; \
		echo make linux-i386; \
		echo The following architectures are available:; \
		echo; \
		echo 'generic          (portable but slow)'; \
		echo 'linux-i386       (Linux on 386,486 and Pentium CPUs)'; \
		echo 'linux-i586       (Linux with pgcc (Pentium))'; \
		echo 'linux-i386AOUT   (Linux using a.out format, faster)'; \
		echo 'linux-sparc      (Linux on any SPARC CPU)'; \
		echo 'sunos4-sparc     (SunOS4 on any SPARC CPU)'; \
		echo 'solaris-sparc    (Solaris 2 on any SPARC CPU)'; \
		echo 'solaris-ultra    (Solaris 2 on ultraSPARC CPU, needs SC4.0-compiler)'; \
		echo 'aix-rs6000       (AIX on RS/6000)'; \
		echo 'aix-ppc          (AIX on PowerPC)'; \
		echo 'digital-alpha    (Native CC on any Alpha)'; \
		echo 'hpux             (unspecified HPUX)'; \
		echo 'irix             (unspecified IRIX)'; \
		echo 'freebsd          (tested on 2.1.5 only)'; \
		echo 'os2              (EMX v0.9c)'


generic:
		$(MAKE) build CC=gcc CFLAGS="$(CFLAGS_GENERIC) -g"

os2:
		$(MAKE) build CC=gcc CFLAGS="$(CFLAGS_OS2)" LDLIBS="-lsocket -lemx -Zomf"

irix:
		$(MAKE) build CC=cc CFLAGS="$(CFLAGS_IRIX)"

aix-rs6000:
		$(MAKE) build CC=gcc CFLAGS="$(CFLAGS_RS6000)" 

aix-ppc:
		$(MAKE) build CC=cc CFLAGS="$(CFLAGS_PPC)"

digital-alpha:  
		$(MAKE) build CC=cc CFLAGS="$(CFLAGS_ALPHA)"

linux-i386:
		$(MAKE) build ASM=i386 ASM_DEP=asm.inc CFLAGS="$(CFLAGS_I386)"

linux-i586:
		$(MAKE) build ASM=i386 ASM_DEP=asm.inc CFLAGS="$(CFLAGS_I586)"

linux-i386AOUT:
		$(MAKE) build CFLAGS="$(CFLAGS_I386AOUT)"

linux-sparc:
		$(MAKE) build CFLAGS="$(CFLAGS_SPARC)"

solaris-sparc:
		$(MAKE) build CC=gcc CFLAGS="$(CFLAGS_SPARC)" \
		  LDLIBS="$(LDLIBS_SOLARIS)"
solaris-ultra:
		$(MAKE) build CC=cc CFLAGS="-xO4 -xtarget=ultra2/2170" \
		  LDLIBS="$(LDLIBS_SOLARIS)"

sunos4-sparc:
		$(MAKE) build CC=gcc CFLAGS="$(CFLAGS_SPARC)" 

hpux:
		$(MAKE) build CC=cc CFLAGS="$(CFLAGS_HPUX)"

freebsd:
		$(MAKE) build CC=gcc CFLAGS="$(CFLAGS_FBSD)"
 

build:		client 

server:		server.o keyserv.o host.o rc5.o

client:		client.o keyclnt.o
		$(CC) -o client client.o keyclnt.o $(LDLIBS)

keyclnt.o:	keyclnt.c $(ASM_DEP)

asm.inc:	$(ASM).pl
		perl $(ASM).pl >asm.inc || { rm -f asm.inc; false; }

clean:
		-rm -f server client *.o *.s CPIPE SPIPE *~ core

client.man:     client.1
		nroff -mandoc client.1  > client.man
