# $Id: Makefile,v 1.80.2.1 2001/02/11 04:01:50 tls Exp $

DEBUG = -g
OPTIMIZE = -O2
#PROF = -pg
WARNINGS = -Wall -Wstrict-prototypes -Wmissing-prototypes \
           -Wpointer-arithmetic -Wreturn-type -Wwrite-strings \
	   -Wcast-qual -Wswitch -Werror # -Wshadow
# DEFINES += -DUNSAFE_DEBUG
# DEFINES += -DFORCE_VALID_LOOPBACK_HOST_KEYS
# DEFINES += -DNO_CRC_AT_ALL
DEFINES += -DSMALL_CRC_TABLE
DEFINES += -DSESSION_KEY_TIMING

# Use only one of these.
#MEMDEBUG_INCLUDE= -I /usr/pkg/include
#MEMDEBUG_LINK= -L /usr/pkg/lib -R /usr/pkg/lib -lefence

# XXX This doesn't work quite properly yet.
#MEMDEBUG_INCLUDE= -I /usr/pkg/include
#MEMDEBUG_LINK= -L /usr/pkg/lib -R /usr/pkg/lib -lleak

CPPFLAGS = ${WARNINGS} -I. -Itransport -Icrypto ${MEMDEBUG_INCLUDE}
CFLAGS = ${DEBUG} ${OPTIMIZE} ${PROF} ${CPPFLAGS}

OS_HDR = ssh_sys_bsd44+.h
OS_SRC = ssh_sys_bsd44+.c ssh_sys_posix.c
OS_OBJ = ssh_sys_bsd44+.o ssh_sys_posix.o

# Use *one* of the two below:
LIBS=	-Llib -lssh	# If you have BSD pmake and BSD-style shared libs.
SSHLIB= libssh
LIBCLEAN= libclean
LIBDEP= libdep

#LIBS= -L. -lssh	# If you don't.
#SSHLIB= libssh.a
#LIBCLEAN=
#LIBDEP=

#IDEA_LIB = -lcrypto_idea

LIBS+= -lutil -lcrypt -lz ${IDEA_LIB} -lcrypto ${MEMDEBUG_LINK}

INSTALL=install
INSTALL_FLAGS=-c -r -m 755 -o bin -g bin
PREFIX=/usr/local
FRE=fre

HDRS = options.h ssh_buffer.h ssh_channel.h ssh_client.h ssh_defines.h	\
	ssh_event.h ssh_global.h ssh_keyfile.h ssh_logging.h		\
	ssh_main.h ssh_parse.h ssh_paths.h ssh_sys.h ${OS_HDR}		\
	ssh_tty.h ssh_types.h ssh_util.h ssh_v1_child.h			\
	ssh_v1_messages.h ssh_v1_proto.h sshd.h ssh_ui.h		\
	ssh_environ.h ssh_authagent.h ssh_threads.h

HDRS+=	ssh_v1_auth_rhosts.h
HDRS+=	ssh_v1_auth_rsa.h
HDRS+=	ssh_v1_auth_passwd.h

# HDRS += ssh_v2_messages.h ssh_v2_proto.h

HDRS += crypto/ssh_3des.h crypto/ssh_auth.h crypto/ssh_blowfish.h	\
	crypto/ssh_cipher.h crypto/ssh_crypto.h				\
	crypto/ssh_crypto_openssl.h crypto/ssh_des.h crypto/ssh_none.h	\
	crypto/ssh_rsakeys.h

HDRS += transport/ssh_transport.h

SRCS = ssh-keygen.c ssh_buffer.c ssh_channel.c ssh_client.c		\
	ssh_event_dispatch.c ssh_global.c ssh_logging.c ssh_main.c	\
	ssh_parse.c ssh_sys_posix.c ssh_threads.c ssh_util.c		\
	ssh_v1_auth_client.c ssh_v1_auth_server.c ssh_v1_child.c	\
	ssh_v1_dispatch_client.c ssh_v1_dispatch_server.c 		\
	sshd_main.c ssh_v1_iactive_client.c ssh_v1_iactive_server.c	\
	ssh_ui.c ssh_authagent.c

SRCS+=	ssh_v1_auth_rhosts_client.c
SRCS+=	ssh_v1_auth_rsa_client.c ssh_v1_auth_rsa_server.c
SRCS+=	ssh_v1_auth_passwd_client.c ssh_v1_auth_passwd_server.c

# ssh-agent
SRCS+=	ssh-agent.c

# ssh-add
SRCS+=	ssh-add.c

SRCS += ${OS_SRC}
# SRCS += ssh_v2_dispatch.c

SRCS += crypto/ssh_auth.c crypto/ssh_cipher.c				\
	crypto/ssh_crypto_openssl.c crypto/ssh_none.c crypto/ssh_rsakeys.c

SRCS += transport/ssh_deattack.c transport/ssh_intro.c			\
	transport/ssh_v1_transport.c

# SRCS += transport/ssh_v2_transport.c

XXXOBJS = ssh_client.o
LIBOBJS = ssh_buffer.o ssh_channel.o ssh_event_dispatch.o ssh_global.o	\
	ssh_logging.o ssh_parse.o ssh_ui.o				\
	ssh_v1_child.o							\
	transport/ssh_deattack.o transport/ssh_intro.o			\
	transport/ssh_v1_transport.o crypto/ssh_auth.o 			\
	crypto/ssh_cipher.o crypto/ssh_crypto_openssl.o			\
	crypto/ssh_none.o crypto/ssh_rsakeys.o ssh_util.o		\
	ssh_threads.o $(XXXOBJS) $(OS_OBJ)

SERVEROBJS= sshd_main.o ssh_v1_dispatch_server.o ssh_v1_auth_server.o	\
	    ssh_v1_prep_server.o ssh_v1_iactive_server.o
SERVEROBJS+=ssh_v1_auth_rsa_server.o
SERVEROBJS+=ssh_v1_auth_passwd_server.o

KEYGENOBJS= ssh-keygen.o 

CLIENTOBJS= ssh_main.o ssh_v1_dispatch_client.o ssh_v1_auth_client.o	\
	    ssh_v1_prep_client.o ssh_v1_iactive_client.o		\
	    ssh_authagent.o
CLIENTOBJS+=ssh_v1_auth_rhosts_client.o
CLIENTOBJS+=ssh_v1_auth_rsa_client.o
CLIENTOBJS+=ssh_v1_auth_passwd_client.o

AGENTOBJS= ssh-agent.o

ADDOBJS=   ssh-add.o ssh_authagent.o

all: sshd ssh-keygen ssh ssh-agent ssh-add

sshd: ${SERVEROBJS} ${SSHLIB}
	${CC} -o $@ ${CFLAGS} ${SERVEROBJS} ${LIBS}

ssh: ${CLIENTOBJS} ${SSHLIB}
	${CC} -o $@ ${CFLAGS} ${CLIENTOBJS} ${LIBS}

ssh-keygen: ${KEYGENOBJS} ${SSHLIB}
	${CC} -o $@ ${CFLAGS} ${KEYGENOBJS} ${LIBS}

ssh-agent: ${AGENTOBJS} ${SSHLIB}
	${CC} -o $@ ${CFLAGS} ${AGENTOBJS} ${LIBS}

ssh-add: ${ADDOBJS} ${SSHLIB}
	${CC} -o $@ ${CFLAGS} ${ADDOBJS} ${LIBS}

libssh.a: ${LIBOBJS}
	${AR} cq $@ ${LIBOBJS}

libssh::
	(cd lib ; make)

libclean::
	(cd lib ; make clean)

libdep::
	(cd lib ; make depend)

install: sshd
	${INSTALL} ${INSTALL_FLAGS} sshd ${PREFIX}/sbin/${FRE}sshd
	${INSTALL} ${INSTALL_FLAGS} ssh-keygen ${PREFIX}/bin/${FRE}ssh-keygen
	${INSTALL} ${INSTALL_FLAGS} ssh ${PREFIX}/bin/${FRE}ssh
	${INSTALL} ${INSTALL_FLAGS} ssh-agent ${PREFIX}/bin/${FRE}ssh-agent
	${INSTALL} ${INSTALL_FLAGS} ssh-add ${PREFIX}/bin/${FRE}ssh-add

clean: ${LIBCLEAN}
	rm -f *.o crypto/*.o transport/*.o a.out sshd ssh-keygen ssh \
	    ssh-agent ssh-add

cleandir: clean
	rm -f .depend *.core

depend: .depend ${LIBDEP}

.depend: ${SRCS} ${HDRS}
	mkdep -a ${CFLAGS} ${DEFINES} ${SRCS}

.SUFFIXES: .c .i .o

.c.o:
	$(CC) -c $(CFLAGS) $(DEFINES) $< -o $@
.c.i:
	$(CC) -E $(CFLAGS) $(DEFINES) $< -o $@
