#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# Copyright 2015 RackTop Systems.
#

BINPROG = ypmatch ypwhich ypcat
SBINPROG = makedbm ypalias ypinit yppoll ypset
NETYPPROG = ypbind ypxfr yppush udpublickey mkalias \
		multi multi.awk stdethers stdhosts \
		ypxfr_1perday ypxfr_1perhour ypxfr_2perday \
		ypstart ypstop
NIS2LDAPPROG = ypxfrd ypserv ypxfr
SVCMETHOD = yp
PROG=	$(BINPROG) $(SBINPROG) $(NETYPPROG) $(NIS2LDAPPROG) $(SVCMETHOD)

MANIFEST = server.xml client.xml xfr.xml

include ../Makefile.cmd

ROOTMANIFESTDIR = $(ROOTSVCNETWORKNIS)

# installed directories
NETSVC = $(ROOTLIB)/netsvc
NETYP = $(NETSVC)/yp

ROOTVAR_YP = $(ROOT)/var/yp
ROOTBINDING = $(ROOTVAR_YP)/binding
ROOTDIRS =	$(ROOT) $(ROOTUSR) $(ROOTLIB) $(ROOTETC) $(ROOTVAR) \
		$(NETSVC) $(NETYP) $(ROOTVAR_YP) $(ROOTBINDING) \
		$(ROOTUSRSBIN) $(ROOTBIN)

$(NIS2LDAPPROG) := LDLIBS += -lc -lnsl -lnisdb
ypinit :=	LDLIBS += -lnsl
yppoll :=	LDLIBS += -lnsl
ypset :=	LDLIBS += -lnsl
ypbind :=	LDLIBS += -lnsl
ypmatch :=	LDLIBS += -lnsl
ypwhich :=	LDLIBS += -lnsl
ypcat :=	LDLIBS += -lnsl
yppush :=	LDLIBS += -lnsl
mkalias :=	LDLIBS += -lnsl
stdhosts :=	LDLIBS += -lnsl
stdethers :=	LDLIBS += -lsocket
makedbm :=	MAPFILES = $(MAPFILE.INT) $(MAPFILE.NGB)
makedbm :=	LDFLAGS += $(MAPFILES:%=-M%)

$(ROOTVAR_YP)/aliases :=	FILEMODE=555

YPFILES = Makefile aliases nicknames updaters
ETCFILES =  publickey
ROOTYPFILES= $(YPFILES:%=$(ROOTVAR_YP)/%)
ROOTETCFILE= $(ETCFILES:%=$(ROOTETC)/%)

TXTS=	$(ETCFILES:%=net_files/%) $(YPFILES:%=net_files/%)
SUBDIRS = yppasswd mknetid revnetgroup ypupdated yp2lscripts

#
# Some sort of obsolete idea of common files which are only now used by a 
# few minor utilities
#
COMMONOBJ= getlist.o yp_getalias.o 

#
# Objects shared between all the major components
#
SHARED_DIR= ./shared
SHAREDOBJ= $(SHARED_DIR)/utils.o $(SHARED_DIR)/lockmap.o $(SHARED_DIR)/ancil.o
SHAREDSRC = $(SHAREDOBJ:%.o=%.c)

YPBINDOBJ= yp_b_svc.o yp_b_subr.o rpc_bootstrap.o getlist.o
YPXFROBJ = ypxfr.o ypxfrd_client.o ypxfrd_xdr.o
YPMATOBJ = ypmatch.o nick.o
YPWHIOBJ = ypwhich.o nick.o
YPCATOBJ = ypcat.o nick.o
MAKEDBMOBJ = makedbm.o
YPALIASOBJ = ypalias.o
UDPUBLICKEYOBJ = udpublickey.o
MKALIASOBJ = mkalias.o
STDETHERSOBJ = stdethers.o
STDHOSTSOBJ = stdhosts.o
YPSERVOBJ = ypserv.o ypserv_map.o \
		ypserv_proc.o ypserv_ancil.o \
		ypserv_resolv.o ypserv_resolv_common.o \
		ypv1_xdr.o ypserv_net_secure.o
YPPUSHOBJ = yppush.o
YPXFRDOBJ = ypxfrd_svc.o ypxfrd_xdr.o ypxfrd_server.o \
		ypserv_net_secure.o

NETYPOBJ = $(YPXFROBJ) $(YPXFRDOBJ) $(YPSERVOBJ) $(YPPUSHOBJ) \
		$(YPBINDOBJ) $(UDPUBLICKEYOBJ)
OBJS = $(NETYPOBJ) $(MKALIASOBJ) $(COMMONOBJ) $(SHAREDOBJ) \
	$(YPPUSHOBJ) $(YPMATOBJ) $(YPWHIOBJ) $(YPCATOBJ) \
	$(STDETHERSOBJ) $(STDHOSTSOBJ) $(MAKEDBMOBJ) $(YPALIASOBJ)

BINSRC =	$(BINPROG:%=%.c)
SBINSRC =	$(SBINPROG:%=%.c)
NETYPSRC =	$(NETYPOBJ:%.o=%.c)
YPBINDSRC =	$(YPBINSOBJ:%.o=%.c)
YPXFRSRC =	$(YPXFROBJ:%.o=%.c)
YPMATSRC =	$(YPMATOBJ:%.o=%.c)
YPWHISRC =	$(YPWHIOBJ:%.o=%.c)
YPCATSRC =	$(YPCATOBJ:%.o=%.c)
MAKEDBMSRC =	$(MAKEDBMOBJ:%.o=%.c)
YPALIASSRC =	$(YPALIASOBJ:%.o=%.c)
UDPUBLICKEYSRC =	$(UDPUBLICKEYOBJ:%.o=%.c)
MKALIASSRC =	$(MKALIASOBJ:%.o=%.c)
STDETHERSSRC =	$(STDETHERSOBJ:%.o=%.c)
STDHOSTSSRC =	$(STDHOSTSOBJ:%.o=%.c)
YPSERVSRC =	$(YPSERVOBJ:%.o=%.c)
YPPUSHSRC =	$(YPPUSHOBJ:%.o=%.c)
YPXFRDSRC =	$(YPXFRDOBJ:%.o=%.c)
YPALLSRC =	$(YPALLOBJ:%.o=%.c)
COMMONSRC = 	$(COMMONOBJ:%.o=%.c)

SRCS = $(BINSRC) $(SBINSRC) $(NETYPSRC) \
	$(COMMONSRC) $(SHAREDSRC)

CLEANFILES =	ypxfrd.h ypxfrd_xdr.c 

IBINPROG=		$(BINPROG:%=$(ROOTBIN)/%)
ISBINPROG=		$(SBINPROG:%=$(ROOTUSRSBIN)/%)
INETYPPROG=		$(NETYPPROG:%=$(NETYP)/%)
INIS2LDAPPROG = 	$(NIS2LDAPPROG:%=$(NETYP)/%)

NIS2LDAPINC =		-I$(SRC)/lib/libnisdb/yptol

CERRWARN +=	-_gcc=-Wno-implicit-function-declaration
CERRWARN +=	-_gcc=-Wno-parentheses
CERRWARN +=	-_gcc=-Wno-unused-variable
CERRWARN +=	-_gcc=-Wno-uninitialized
CERRWARN +=	-_gcc=-Wno-switch
CERRWARN +=	-_gcc=-Wno-extra
CERRWARN +=	-_gcc=-Wno-unused-label
CERRWARN +=	-_gcc=-Wno-address
CERRWARN +=	-_gcc=-Wno-unused-function

#conditional assignments
$(YPALIASOBJ) :=	CPPFLAGS= -DMAIN $(CPPFLAGS.master)
$(MAKEDBMOBJ) :=	CPPFLAGS= $(CPPFLAGS.master)
$(YPBINDOBJ) :=	CPPFLAGS += -DINIT_DEFAULT
ypxfrd_svc.o := CPPFLAGS += -Dmain=_main
$(YPXFROBJ) := CPPFLAGS += $(NIS2LDAPINC)
$(YPPUSHOBJ) := CPPFLAGS += $(NIS2LDAPINC)
$(NIS2LDAPPROG) := CPPFLAGS += $(NIS2LDAPINC)
$(SHAREDOBJ) := CPPFLAGS += -I$(SRC)/lib/libnisdb/yptol
$(ROOTVAR_YP)/Makefile := FILEMODE= 555
$(ROOTVAR_YP)/nicknames := FILEMODE= 644
$(ROOTVAR_YP)/updaters := FILEMODE= 500
$(ROOTETC)/publickey := FILEMODE= 644
# non-default file attributes to avoid conflict with rpcsrc
NETYP =		$(NETSVC)/yp


all:=		TARGET= all
install:=	TARGET= install
clean:=		TARGET= clean
clobber:=	TARGET= clobber
lint:=		TARGET= lint
cstyle :=	TARGET= cstyle

all: $(SHAREDOBJ) .WAIT $(SUBDIRS) $(PROG) $(TXTS)

# install rules
$(ROOTVAR_YP)/% \
$(ROOTETC)/%: net_files/%
	$(INS.file)

$(ROOTVAR_YP)/% : net_files/%
	$(INS.file)

$(NETYP)/%: %
	$(INS.file)

.KEEP_STATE:

$(SHARED_DIR)/%.o: $(SHARED_DIR)/%.c
	$(COMPILE.c) -o $@ $<

ypbind: $(YPBINDOBJ)
	$(LINK.c) $(YPBINDOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

makedbm ypalias: $$@.o $(COMMONOBJ) $$(MAPFILES)
	$(LINK.c) -o $@ $@.o $(COMMONOBJ) $(LDLIBS)
	$(POST_PROCESS)

ypmatch: $(YPMATOBJ)
	$(LINK.c) -o $@ $(YPMATOBJ) $(LDLIBS)
	$(POST_PROCESS)

ypwhich: $(YPWHIOBJ)
	$(LINK.c) -o $@ $(YPWHIOBJ) $(LDLIBS)
	$(POST_PROCESS)

ypcat: $(YPCATOBJ)
	$(LINK.c) -o $@ $(YPCATOBJ) $(LDLIBS)
	$(POST_PROCESS)

ypxfrd_xdr.c: ypxfrd.x
	$(RM) ypxfrd_xdr.c; $(RPCGEN) -C -c ypxfrd.x -o ypxfrd_xdr.c

ypxfrd.h: ypxfrd.x
	$(RM) ypxfrd.h; $(RPCGEN) -C -h ypxfrd.x -o ypxfrd.h

ypxfrd_xdr.o ypxfrd_client.o: ypxfrd.h

ypxfrd: $(YPXFRDOBJ) $(SHAREDOBJ)
	$(LINK.cc) $(YPXFRDOBJ) $(SHAREDOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

ypxfr: $(YPXFROBJ) $(COMMONOBJ) $(SHAREDOBJ)
	$(LINK.cc) -o $@ $(YPXFROBJ) $(COMMONOBJ) $(SHAREDOBJ) $(LDLIBS)
	$(POST_PROCESS)

ypserv: $(YPSERVOBJ) $(COMMONOBJ) $(SHAREDOBJ)
	$(LINK.cc) $(YPSERVOBJ) $(COMMONOBJ) $(SHAREDOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

yppush: $(YPPUSHOBJ) $(COMMONOBJ)
	$(LINK.c) $(YPPUSHOBJ) $(COMMONOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

udpublickey: $(UDPUBLICKEYOBJ)
	$(LINK.c) $(UDPUBLICKEYOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

mkalias: $(MKALIASOBJ)
	$(LINK.c) $(MKALIASOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

stdethers: $(STDETHERSOBJ)
	$(LINK.c) $(STDETHERSOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

stdhosts: $(STDHOSTSOBJ)
	$(LINK.c) $(STDHOSTSOBJ) -o $@ $(LDLIBS)
	$(POST_PROCESS)

install: all $(PROG) $(ROOTDIRS) $(ROOTETCFILE) $(ROOTYPFILES) $(IBINPROG) \
	$(ISBINPROG) $(INETYPPROG) $(INIS2LDAPPROG) $(SUBDIRS) $(ROOTMANIFEST) \
	$(ROOTSVCMETHOD)

$(ROOTDIRS):
	$(INS.dir)

$(SUBDIRS): FRC
	@cd $@; pwd; $(MAKE) $(TARGET)

lint := CPPFLAGS += -I$(SRC)/lib/libnisdb/yptol

lint:	$(SUBDIRS)
	$(LINT.c) $(UDPUBLICKEYSRC) $(LDLIBS)
	$(LINT.c) $(MAKEDBMSRC) $(COMMONSRC) $(LDLIBS)
	$(LINT.c) $(YPALIASSRC) $(COMMONSRC) $(LDLIBS)
	$(LINT.c) $(YPMATSRC) $(LDLIBS) -lnsl
	$(LINT.c) $(YPWHISRC) $(LDLIBS) -lnsl
	$(LINT.c) $(YPCATSRC) $(LDLIBS) -lnsl
	$(LINT.c) $(YPBINDSRC) $(LDLIBS) -lnsl
	$(LINT.c) $(MKALIASSRC) $(LDLIBS) -lnsl
	$(LINT.c) $(STDHOSTSSRC) $(LDLIBS) -lnsl
	$(LINT.c) $(STDETHERSSRC) $(LDLIBS) -lsocket
	$(LINT.c) $(YPPUSHSRC) $(COMMONSRC) $(LDLIBS) -lnsl
	$(LINT.c) $(YPXFRSRC) $(COMMONSRC) $(SHAREDSRC) $(LDLIBS) -lnsl -lnisdb
	$(LINT.c) $(YPSERVSRC) $(COMMONSRC) $(SHAREDSRC) $(LDLIBS) -lnsl -lnisdb

check: $(CHKMANIFEST)

cstyle:	$(SUBDIRS)
	${CSTYLE} `echo $(SRCS) | sed 's/ypinit.c//'`

clean:	$(SUBDIRS)
	$(RM) $(OBJS) $(CLEANFILES)

clobber: clean $(SUBDIRS)

FRC:

include ../Makefile.targ
