#
# 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 2019 Joyent, Inc.

PROG:sh = basename `cd ..; pwd`

OBJS = $(PROG).o

SRCS = ../$(PROG).c

FILEMODE = 0555

# libproc is added individually as pwait doesn't need it.
# These are defined this way so lint can use them
LDLIBS_pargs		= -lproc
LDLIBS_pcred		= -lproc
LDLIBS_pfiles		= -lproc -lnsl
LDLIBS_pflags		= -lproc
LDLIBS_pldd		= -lproc
LDLIBS_plgrp		= -lproc -llgrp
LDLIBS_pmap		= -lproc
LDLIBS_pmadvise		= -lproc
LDLIBS_ppriv		= -lproc
LDLIBS_preap		= -lproc
LDLIBS_prun		= -lproc
LDLIBS_psecflags	= -lproc -lproject
LDLIBS_psig		= -lproc
LDLIBS_pstack		= -lproc -lc_db
LDLIBS_pstop		= -lproc
LDLIBS_ptime		= -lproc
LDLIBS_ptree		= -lproc -lcontract
LDLIBS_pwdx		= -lproc

LDLIBS += $(LDLIBS_$(PROG))

CERRWARN_plgrp	+= -_gcc=-Wno-parentheses
CERRWARN_plgrp	+= -_smatch=off

CERRWARN_pmadvise += -_smatch=off

CERRWARN_ppriv	+= -_gcc=-Wno-parentheses
CERRWARN_ppriv	+= $(CNOWARN_UNINIT)

CERRWARN_ptree	+= -_gcc=-Wno-parentheses
CERRWARN_ptree	+= -_smatch=off

CERRWARN_pstack	+= $(CNOWARN_UNINIT)
CERRWARN_pstack	+= -_gcc=-Wno-clobbered

CERRWARN_pargs	+= -_gcc=-Wno-clobbered
CERRWARN_pargs	+= -_gcc=-Wno-type-limits

CERRWARN_pwait	+= -_smatch=off

CERRWARN += $(CERRWARN_$(PROG))

# pargs depends on ../../common/elfcap components
# pmadvise depends on pmap components

ELFCAP =	$(SRC)/common/elfcap
PMAP =		$(SRC)/cmd/ptools/pmap

CPPFLAGS_pargs =	-I$(ELFCAP)
OBJS_pargs =		elfcap.o
SRCS_pargs =		$(ELFCAP)/elfcap.c

CPPFLAGS_pmap =		-I$(PMAP)
OBJS_pmap =		pmap_common.o
SRCS_pmap =		$(PMAP)/pmap_common.c

CPPFLAGS_pmadvise =	-I$(PMAP)
OBJS_pmadvise =		pmap_common.o
SRCS_pmadvise =		$(PMAP)/pmap_common.c

LN_pargs =		penv pauxv

CPPFLAGS +=	$(CPPFLAGS_$(PROG))
OBJS +=		$(OBJS_$(PROG))
SRCS +=		$(SRCS_$(PROG))

$(OBJS_ptree) :=	CSTD = $(CSTD_GNU99)
ptree :=		CSTD = $(CSTD_GNU99)

INSTALL_NEW=
INSTALL_LEGACY=$(RM) $(ROOTPROCBINSYMLINK) ; \
	$(LN) -s ../../bin/$(PROG) $(ROOTPROCBINSYMLINK)

.KEEP_STATE:

elfcap.o:	$(ELFCAP)/elfcap.c
		$(COMPILE.c) -o $@ $(ELFCAP)/elfcap.c

pmap_common.o:	$(PMAP)/pmap_common.c
		$(COMPILE.c) -o $@ $(PMAP)/pmap_common.c

%.o:	../%.c
	$(COMPILE.c) $<

all:	$(PROG) $(LN_$(PROG))

ROOTBINLN=$(LN_$(PROG):%=$(ROOTBIN)/%)
ROOTBINPROG=$(ROOTBIN)/$(PROG)
ROOTPROCBINSYMLINK=$(ROOT)/usr/proc/bin/$(PROG)

$(PROG): $$(OBJS)
	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
	$(POST_PROCESS)

#
# Install the ptool, symlinking it into /usr/proc/bin if PTOOL_TYPE is set
# to LEGACY.
#
install: all $(ROOTISAPROG) $(ROOTISALN) $(ROOTBINLN)
	-$(RM) $(ROOTBINPROG)
	-$(LN) $(ISAEXEC) $(ROOTBINPROG)
	-$(INSTALL_$(PTOOL_TYPE))

$(ROOTBINLN): $(ROOTISAPROG)
	-$(RM) $@
	-$(LN) $(ISAEXEC) $@

$(ROOTISALN): $(ROOTISAPROG)
	-$(RM) $@
	-$(LN) $(ROOTISAPROG) $@

$(LN_$(PROG)): $(PROG)
	-$(RM) $@
	-$(LN) $(PROG) $@

clean:
	$(RM) $(OBJS)

lint:
	$(LINT.c) $(SRCS) $(LDLIBS)