###############################################################################
#   Instructions to Make, for compilation of minimal SNMP agent
###############################################################################

###############################################################################
#
# $Header: /f/osi/snmp/RCS/Makefile,v 7.13 90/03/06 13:56:47 mrose Exp $
#
# Contributed by NYSERNet Inc.  This work was partially supported by the
# U.S. Defense Advanced Research Projects Agency and the Rome Air Development
# Center of the U.S. Air Force Systems Command under contract number
# F30602-88-C-0016.
#
#
# $Log:	Makefile,v $
# Revision 7.13  90/03/06  13:56:47  mrose
# touch-up
# 
# Revision 7.12  90/02/27  18:49:25  mrose
# unix stuff
# 
# Revision 7.11  90/02/19  20:45:03  mrose
# touch-up
# 
# Revision 7.10  90/02/19  16:43:56  mrose
# again
# 
# Revision 7.9  90/02/19  16:25:51  mrose
# typo
# 
# Revision 7.8  90/02/19  15:38:40  mrose
# one more time
# 
# Revision 7.7  90/02/17  17:18:46  mrose
# touch-up
# 
# Revision 7.6  90/02/17  10:37:33  mrose
# smux
# 
# Revision 7.5  89/12/20  16:02:43  mrose
# clns
# 
# Revision 7.4  89/12/19  16:18:20  mrose
# dgram
# 
# Revision 7.3  89/12/17  18:30:09  mrose
# foo
# 
# Revision 7.2  89/12/08  21:46:43  mrose
# ouch-up
# 
# Revision 7.1  89/12/01  10:42:12  mrose
# clts
# 
# Revision 7.0  89/11/23  22:22:54  mrose
# Release 6.0
# 
###############################################################################

###############################################################################
#
#				 NOTICE
#
#    Acquisition, use, and distribution of this module and related
#    materials are subject to the restrictions of a license agreement.
#    Consult the Preface in the User's Manual for the full terms of
#    this agreement.
#
###############################################################################


.SUFFIXES:	.py .c .o

PEPYPATH=	-DPEPYPATH

.c.o:;		$(CC) $(CFLAGS) -c $*.c


LIBES   =	libsnmp.a $(TOPDIR)libisode.a
LLIBS   =	$(TOPDIR)llib-lisode
MIB-C	=	mib.c system.c interfaces.c routes.c ip.c icmp.c tcp.c udp.c \
			clnp.c
MIB-O	=	mib.o system.o interfaces.o routes.o ip.o icmp.o tcp.o udp.o \
			clnp.o
CFILES	=	snmpd.c unixd.c snmpi.c objects.c syntax.c values.c \
			smux.c smuxentry.c $(MIB-C)
PYFILES	=	snmp.py
HFILES	=	$(HDIR)psap.h $(HDIR)manifest.h $(HDIR)general.h \
		$(HDIR)config.h


##################################################################
# Here it is...
##################################################################

all:		snmpd unixd snmpi runcom peers objects
inst-all:	inst-snmpd inst-unixd inst-snmpi inst-runcom inst-peers \
			inst-objects inst-headers inst-libsnmp manuals
install:	inst-all clean
lint:		l-snmpd l-unixd l-snmpi


##################################################################
# snmpd
##################################################################

inst-snmpd:	$(SBINDIR)snmpd

$(SBINDIR)snmpd: xsnmpd
		-cp $@ zsnmpd
		-rm -f $@
		cp xsnmpd $@
		-@ls -gls $@
		-@echo ""

snmpd:		xsnmpd

xsnmpd:		snmpd.o $(MIB-O) $(LIBES)
		$(LDCC) $(LDFLAGS) -o $@ snmpd.o $(MIB-O) $(LIBES) $(LSOCKET)

l-snmpd:	SNMP-C SNMP-print.c true
		$(LINT) $(LFLAGS) snmpd.c $(MIB-C) $(SNMP-C) \
			SNMP-print.c objects.c syntax.c values.c \
			smux.c smuxentry.c $(LLIBS)

snmpd.o:	SNMP-types.h mib.h objects.h smux.h $(HFILES) $(HDIR)tailor.h \
			$(HDIR)logger.h \
			$(HDIR)tsap.h $(HDIR)isoaddrs.h \
			$(HDIR)dgram.h $(HDIR)internet.h $(HDIR)tp4.h
$(MIB-O):	SNMP-types.h mib.h objects.h $(HFILES) $(HDIR)logger.h
system.o:	$(HDIR)tailor.h
interfaces.o:	interfaces.h $(HDIR)internet.h clnp.h
addrtrans.o:	interfaces.h $(HDIR)internet.h clnp.h
ip.o:		interfaces.h $(HDIR)internet.h clnp.h routes.h
icmp.o:		$(HDIR)internet.h
tcp.o:		$(HDIR)internet.h
udp.o:		$(HDIR)internet.h
clnp.o:		interfaces.h $(HDIR)internet.h clnp.h routes.h


##################################################################
# unixd
##################################################################

inst-unixd:	$(SBINDIR)smux.unixd

$(SBINDIR)smux.unixd: xunixd
		-cp $@ zunixd
		-rm -f $@
		cp xunixd $@
		-@ls -gls $@
		-@echo ""

unixd:		xunixd

xunixd:		unixd.o $(LIBES)
		$(LDCC) $(LDFLAGS) -o $@ unixd.o $(LIBES) $(LSOCKET)

l-unixd:	SNMP-C SNMP-print.c true
		$(LINT) $(LFLAGS) unixd.c $(SNMP-C) \
			SNMP-print.c objects.c syntax.c values.c \
			smux.c smuxentry.c $(LLIBS)

unixd.o:	SNMP-types.h objects.h smux.h $(HFILES) $(HDIR)tailor.h \
			$(HDIR)logger.h


##################################################################
# snmpi
##################################################################

inst-snmpi:	$(BINDIR)snmpi

$(BINDIR)snmpi:	xsnmpi
		-cp $@ zxsnmpi
		-rm -f $@
		cp xsnmpi $@
		-@ls -gls $@
		-@echo ""

snmpi:		xsnmpi

xsnmpi:		snmpi.o $(LIBES)
		$(LDCC) $(LDFLAGS) -o $@ snmpi.o $(LIBES) $(LSOCKET)

l-snmpi:	SNMP-C SNMP-print.c true
		$(LINT) $(LFLAGS) snmpi.c $(SNMP-C) SNMP-print.c \
			objects.c syntax.c values.c smux.c smuxentry.c $(LLIBS)

snmpi.o:	SNMP-types.h objects.h $(HFILES) $(HDIR)tailor.h \
			$(HDIR)logger.h \
			$(HDIR)tsap.h $(HDIR)isoaddrs.h \
			$(HDIR)dgram.h $(HDIR)internet.h $(HDIR)tp4.h


################################################################
# headers
################################################################

inst-headers:	$(INCDIR)snmp/objects.h $(INCDIR)snmp/smux.h \
			$(PEPYDIR)SNMP-types.h true

$(INCDIR)snmp/objects.h: objects.h
		-cp $@ zobjects.h
		cp objects.h $@
		-@ls -gls $@
		-@echo ""

$(INCDIR)snmp/smux.h: smux.h
		-cp $@ zsmux.h
		cp smux.h $@
		-@ls -gls $@
		-@echo ""

$(PEPYDIR)SNMP-types.h: SNMP-types.h
		-cp $@ zSNMP-types.h
		cp SNMP-types.h $@
		-@ls -gls $@
		-@echo ""


################################################################
# libsnmp
################################################################

inst-libsnmp:	$(LIBDIR)libsnmp.a $(LINTDIR)llib-lsnmp

$(LIBDIR)libsnmp.a:	libsnmp.a
		-rm -f $@
		cp libsnmp.a $@
		@$(UTILDIR)make-lib.sh $(SYSTEM) $@ -ranlib
		-@ls -gls $@
		-@echo ""

$(LINTDIR)llib-lsnmp:	llib-lsnmp
		-cp $@ zllib-lsnmp
		-rm -f $@
		sed -e 's%#include "\(.*\)"%#include "$(INCDIR)snmp/\1"%' \
			< llib-lsnmp | \
			sed -e 's%#include "/usr/include/\(.*\)"%#include <\1>%' > $@
		@$(UTILDIR)inst-lint.sh $(SYSTEM) $(OPTIONS) $@
		-@ls -gls $@ $@.ln
		-@echo ""

libsnmp.a:	SNMP-O SNMP-print.o objects.o syntax.o values.o smux.o \
			smuxentry.o
		-rm -f $@
		@$(UTILDIR)make-lib.sh $(SYSTEM) $(ARFLAGS) $@ $(SNMP-O) \
			SNMP-print.o objects.o syntax.o values.o smux.o \
			smuxentry.o
		-@ls -l $@
		-@echo "SNMP library built normally"

SNMP-O	=	SNMP-[0-9]*.o
SNMP-C	=	SNMP-[0-9]*.c

SNMP-O:		SNMP-C
		@$(MAKE) `/bin/ls $(SNMP-C) | sed 's/\.c$$/.o/'`
		-@touch $@

SNMP-C:		SNMP-types.py $(TOPDIR)pepy/xpepy
		-@rm -f $(SNMP-C) $(SNMP-O)
		$(TOPDIR)pepy/xpepy -a PY_advise -m -A -b SNMP $(PYFLAGS) \
			SNMP-types.py
		-@touch $@

SNMP-types.py:	snmp.py $(TOPDIR)pepy/xposy
		$(TOPDIR)pepy/xposy -f -h -m -o $@ $(POFLAGS) snmp.py
SNMP-types.h:	SNMP-types.py

SNMP-print.c:	snmp.py $(TOPDIR)pepy/xpepy
		$(TOPDIR)pepy/xpepy -a PY_advise -d -m -S PRINT -o $@ \
			$(PYFLAGS) snmp.py

objects.o:	objects.h $(HFILES) $(HDIR)tailor.h $(HDIR)logger.h
syntax.o:	objects.h $(HFILES) $(HDIR)tailor.h $(HDIR)logger.h \
		$(HDIR)internet.h clnp.h
values.o:	objects.h SNMP-types.h $(HDIR)logger.h
smux.o:		smux.h SNMP-types.h $(HDIR)tailor.h $(HDIR)logger.h \
		$(HDIR)internet.h
smuxentry.o:	smux.h SNMP-types.h $(HDIR)tailor.h


##################################################################
# files
##################################################################

inst-runcom:	$(ETCDIR)snmpd.rc

$(ETCDIR)snmpd.rc:	snmpd.rc
		-cp $@ zsnmpd.rc
		-rm -f $@
		cp snmpd.rc $@
		-@ls -gls $@
		-@echo ""

runcom:;


inst-peers:	$(ETCDIR)snmpd.peers

$(ETCDIR)snmpd.peers:	snmpd.peers
		-cp $@ zsnmpd.peers
		-rm -f $@
		cp snmpd.peers $@
		-chmod 600 $@
		-@ls -gls $@
		-@echo ""

peers:;


DEFS	=	objects.defs snmpd.defs unixd.defs
DEFS2	=	smi.defs mib.defs clns.defs unix.defs smux.defs

inst-objects:;	-mkdir $(INCDIR)snmp
		@for d in $(DEFS); do $(MAKE) TARGET=$$d inst-target; done
		@for d in $(DEFS2); do $(MAKE) TARGET2=$$d inst-target2; done

inst-target:	$(ETCDIR)$(TARGET)

$(ETCDIR)$(TARGET):	$(TARGET)
		-cp $@ z$(TARGET)
		-rm -f $@
		cp $(TARGET) $@
		-@ls -gls $@
		-@echo ""

inst-target2:	$(INCDIR)snmp/$(TARGET2)

$(INCDIR)snmp/$(TARGET2):	$(TARGET2)
		-cp $@ z$(TARGET2)
		-rm -f $@
		cp $(TARGET2) $@
		-@ls -gls $@
		-@echo ""

objects:	$(DEFS)

objects.defs:	$(DEFS2)
		cat $(DEFS2) > $@

snmpd.defs:	smi.defs mib.defs clns.defs smux.defs
		cat smi.defs mib.defs clns.defs smux.defs > $@

unixd.defs:	smi.defs unix.defs
		cat smi.defs unix.defs > $@


################################################################
# manual pages
################################################################

MANUALS	=	snmpd.8c unixd.8c snmpi.1c

manuals:;	@$(UTILDIR)inst-man.sh $(MANOPTS) $(MANUALS)
		-@echo ""


################################################################
# clean
################################################################

clean:;		rm -f *.o *.a SNMP* x* z* _* core $(DEFS)

grind:;		iprint Makefile
		tgrind -lc $(CFILES)
		tgrind -lpepy -d $(TOPDIR)pepy/grindefs $(PYFILES) $(DEFS2)
		@echo $(MANUALS) | \
			tr " " "\012" | \
			sed -e "s%.*%itroff -man &%" | \
			sh -ve

true:;
