# @(#) $Revision: 76.1 $
#
# Common makefile for libscmd
#
VERSION=1
INC=/usr/include
GENCAT=/usr/bin/gencat
FINDMSG=/usr/bin/findmsg
#
# Objects which will go into both the shared and archive libraries
#
COMMON =\
	at_secure.o \
	clri_sec.o \
	cron_sec.o \
	crontab_sc.o \
	df_secure.o \
	expre_sec.o \
	export_sec.o \
	fsdb_sec.o \
	ipcs_sec.o \
	lp_secure.o \
	mesg_sec.o \
	mkfs_sec.o \
	mount_sec.o \
	ncheck_sec.o \
	newgrp_sec.o \
	passwd_sec.o \
	ps_secure.o \
	quota_sec.o \
	raisepriv.o \
	rm_secure.o \
	syslogd_sec.o \
	umount_sec.o \
	w_secure.o \
	write_sec.o 
#
COMMON_COMSEC =\
	passwd_sec.o	\
        su_secure.o
#
ARCHIVE_ONLY_COMSEC =\
	login_sec.o	\
	su_secure.o	\
	init_sec.o 

#
#
# Additional objects which will go only into the archive library
#
ARCHIVE_ONLY =\
	fsck_sec.o \
	getty_sec.o \
	init_sec.o \
	login_sec.o \
	reboot_sec.o \
	su_secure.o

ARCHIVE_OBJS        = $(COMMON) $(ARCHIVE_ONLY)
ARCHIVE_COMSEC_OBJS = $(COMMON_COMSEC) $(ARCHIVE_ONLY_COMSEC)
SHARED_OBJS         = $(COMMON:.o=_sl.o) stub_sl.o
SHARED_COMSEC_OBJS  = $(COMMON_COMSEC:.o=_sl.o) 
PROFILE_OBJS        = $(ARCHIVE_OBJS:.o=_p.o)
PROFILE_COMSEC_OBJS = $(ARCHIVE_COMSEC_OBJS:.o=_p_com.o)
PIC_OBJS            = $(ARCHIVE_OBJS:.o=_pic.o)
PIC_COMSEC_OBJS     = $(ARCHIVE_COMSEC_OBJS:.o=_pic_com.o)

#
# local CFLAGS -if different from the default
#
LCFLAGS		= -DREMOTE $(CFLAGS)

#
# targets
#
all:	archive shared

all_com: archive_com shared_com

archive:
	@echo "\tMaking archive libscmd...";		\
	$(MAKE) libscmd.a

archive_com:
	@echo "\tMaking commercial security archive libscmd...";	\
	$(MAKE) libscmd_com.a pw_sec_lib.cat su_sec_lib.cat

shared:
	@if ifndef SHARED_LIBS; then			\
	    echo "\tSHARED_LIBS not defined, quiting";	\
	    exit 0;					\
	fi;						\
	echo "\tMaking shared libscmd...";		\
	$(MAKE) libscmd.sl

shared_com:
	@if ifndef SHARED_LIBS; then			\
	    echo "\tSHARED_LIBS not defined, quiting";	\
	    exit 0;					\
	fi;						\
	echo "\tMaking commercial security shared libscmd...";	\
	$(MAKE) libscmd_com.sl pw_sec_lib.cat su_sec_lib.cat

profile:
	@echo "\tMaking profiled libscmd...";		\
	$(MAKE) libscmd_p.a

profile_com:
	@echo "\tMaking commercial security profiled libscmd...";	\
        $(MAKE) libscmd_p_com.a

archive_pic:
	@echo "\tMaking PIC libscmd...";		\
	$(MAKE) libscmd_pic.a

archive_pic_com:
	@echo "\tMaking commercial security PIC libscmd...";	\
	$(MAKE) libscmd_pic_com.a

libscmd.a:	$(ARCHIVE_OBJS) hpux_rel.o
	rm -f libscmd.a
	ar qc libscmd.a hpux_rel.o `lorder $(ARCHIVE_OBJS) | tsort`

libscmd_com.a:	$(ARCHIVE_COMSEC_OBJS) hpux_rel.o
	rm -f libscmd.a
	ar qc libscmd.a hpux_rel.o $(ARCHIVE_COMSEC_OBJS)

libscmd.sl:	$(SHARED_OBJS) hpux_rel.o
	rm -f libscmd.sl
	ld -b -o libscmd.sl hpux_rel.o $(SHARED_OBJS)

libscmd_com.sl:	$(SHARED_COMSEC_OBJS) hpux_rel.o
	rm -f libscmd.sl
	ld -b +h libscmd.sl.$(VERSION) -o libscmd.sl.$(VERSION) hpux_rel.o $(SHARED_COMSEC_OBJS)

libscmd_pic.a:	$(PIC_OBJS) hpux_rel.o
	rm -f libscmd_pic.a
	ar qc libscmd_pic.a hpux_rel.o `lorder $(PIC_OBJS) | tsort`

libscmd_pic_com.a: $(PIC_COMSEC_OBJS) hpux_rel.o
	rm -f libscmd_pic.a
	ar qc libscmd_pic.a hpux_rel.o `lorder $(PIC_COMSEC_OBJS) | tsort`

libscmd_p.a:	$(PROFILE_OBJS) hpux_rel.o
	rm -f libscmd_p.a
	ar qc libscmd_p.a hpux_rel.o `lorder $(PROFILE_OBJS) | tsort`

libscmd_p_com.a:  $(PROFILE_COMSEC_OBJS) hpux_rel.o
	rm -f libscmd_p.a
	ar qc libscmd_p.a hpux_rel.o $(PROFILE_COMSEC_OBJS)

pw_sec_lib.cat: passwd_sec.c
	@echo "\tCreating pw_sec_lib.cat";	\
	$(FINDMSG) passwd_sec.c > pw_sec_lib.msg
	@$(GENCAT) pw_sec_lib.cat pw_sec_lib.msg

su_sec_lib.cat: su_secure.c
	@echo "\tCreating su_sec_lib.cat";	\
	$(FINDMSG) su_secure.c > su_sec_lib.msg
	@$(GENCAT) su_sec_lib.cat su_sec_lib.msg

#
# cleanup
#
clean:
	@echo '\tRemoving *.o'
	@rm -f $(OBJS) $(SLOBJS)
	@rm -f *.o

clobber: clean
	@echo "\tRemoving libraries..."
	@rm -f libscmd.a libscmd.sl libscmd_pic.a libscmd_p.a

#
# Define rules so make knows how to create different flavors of .o's
#

.c.o:
	$(CC) -c $(LCFLAGS) $< -o $@

.c_sl.o:
	$(CC) -c $(LCFLAGS) -DPIC +z $< -o $@

.c_p.o:
	$(CC) -c $(LCFLAGS) -p $< -o $@

.c_pic.o:
	$(CC) -c $(LCFLAGS) -DPIC +Z $< -o $@

#
# Clear SUFFIXES, then reset ordering so if a .c and .s source exist
# for a file, the .s will be compiled first
#
.SUFFIXES:
.SUFFIXES: .o .s .c _p.o _sl.o _pic.o

#
# Dependencies
#
at_secure.o:	at_secure.c $(INC)/fcntl.h $(INC)/stdio.h

clri_sec.o:	clri_sec.c

cron_sec.o:	cron_sec.c $(INC)/sys/stat.h $(INC)/grp.h \
		$(INC)/stdio.h

crontab_sc.o:	crontab_sc.c

df_secure.o:	df_secure.c

export_sec.o:	export_sec.c export_sec.h

getty_sec.o:	getty_sec.c initcond.h $(INC)/stdio.h

init_sec.o:	init_sec.c initcond.h $(INC)/signal.h $(INC)/stdio.h \
		$(INC)/errno.h $(INC)/utmp.h $(INC)/termio.h \
		$(INC)/sys/ioctl.h $(INC)/sys/stat.h

ipcs_sec.o:	ipcs_sec.c $(INC)/sys/ipc.h

login_sec.o:	login_sec.c $(INC)/sys/stat.h \
		$(INC)/signal.h $(INC)/pwd.h $(INC)/grp.h \
		$(INC)/stdio.h $(INC)/termio.h $(INC)/errno.h
	$(CC) -c -DDEFAULT_PTY $(CFLAGS) $< -o $@

lp_secure.o:	lp_secure.c $(INC)/stdio.h $(INC)/pwd.h $(INC)/grp.h \
		$(INC)/sys/stat.h
	$(CC) -c -DREMOTE $(CFLAGS) $< -o $@

mesg_sec.o:	mesg_sec.c $(INC)/sys/stat.h

newgrp_sec.o:	newgrp_sec.c $(INC)/grp.h $(INC)/stdio.h

passwd_sec.o:	passwd_sec.c $(INC)/stdio.h $(INC)/signal.h \
		$(INC)/pwd.h $(INC)/utmp.h $(INC)/macros.h

ps_secure.o:	ps_secure.c $(INC)/stdio.h $(INC)/fcntl.h

quota_sec.o:	quota_sec.c

raisepriv.o:	raisepriv.c

su_secure.o:	su_secure.c $(INC)/stdio.h $(INC)/pwd.h

syslogd_sec.o:	syslogd_sec.c $(INC)/stdio.h $(INC)/string.h 

w_secure.o:	w_secure.c $(INC)/stdio.h $(INC)/sys/stat.h

write_sec.o:	write_sec.c $(INC)/sys/stat.h $(INC)/ctype.h \
		$(INC)/stdio.h

