#
# Copyright (c) 1994,1999, 2000 The University of Utah and the Flux Group.
# All rights reserved.
# 
# Contributed by the Computer Security Research division,
# INFOSEC Research and Technology Office, NSA.
# 
# This file is part of the Flux OSKit.  The OSKit is free software, also known
# as "open source;" you can redistribute it and/or modify it under the terms
# of the GNU General Public License (GPL), version 2, as published by the Free
# Software Foundation (FSF).  To explore alternate licensing terms, contact
# the University of Utah at csl-dist@cs.utah.edu or +1-801-585-3271.
# 
# The OSKit is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GPL for more details.  You should have
# received a copy of the GPL along with the OSKit; see the file COPYING.  If
# not, write to the FSF, 59 Temple Place #330, Boston, MA 02111-1307, USA.
#

ifndef _oskit_security_makerules_
_oskit_security_makerules_ = yes

TARGET	= liboskit_security.a

SRCDIRS += $(OSKIT_SRCDIR)/security

# Include the makefile containing the generic rules.
include $(OSKIT_SRCDIR)/GNUmakerules-lib

OBJFILES = ebitmap.o hashtab.o symtab.o sidtab.o avtab.o policydb.o mls.o services.o init.o 

CFLAGS += -include $(OSKIT_SRCDIR)/security/global.h -D__KERNEL__ -Wall

CLEAN_FILES +=	checkpolicy policy.conf policy $(CP_OBJECTS) y.tab.c y.tab.h lex.yy.c 

CP_OBJECTS =  ebitmap.cp.o queue.cp.o hashtab.cp.o symtab.cp.o sidtab.cp.o avtab.cp.o context.cp.o policydb.cp.o mls.cp.o services.cp.o y.tab.cp.o lex.yy.cp.o checkpolicy.cp.o

POLICYFILES = $(addprefix $(OSKIT_SRCDIR)/flask/,security_classes initial_sids access_vectors) \
              $(addprefix $(OSKIT_SRCDIR)/security/policydb/,mls te rbac \
		constraints users initial_sid_contexts fs_contexts net_contexts)

all:  $(_LIBS) # policy checkpolicy

install: $(addprefix $(INSTALL_LIBDIR)/,$(_LIBS)) # $(INSTALL_LIBDIR)/boot/policy $(INSTALL_BINDIR)/checkpolicy

$(INSTALL_LIBDIR)/boot/%: %
	-mkdir -p $(@D)
	$(INSTALL_DATA) $< $@

policy:  policy.conf checkpolicy
	$(OBJDIR)/security/checkpolicy -o policy policy.conf

policy.conf: $(POLICYFILES)
	$(M4) $(M4FLAGS) $^ > policy.conf

checkpolicy: $(CP_OBJECTS)
	$(OSKIT_QUIET_MAKE_INFORM) "Compiling $@"
	$(CC) -o checkpolicy $(CP_OBJECTS) -lfl

#
# .o files built for the native OS "checkpolicy" program
#
%.cp.o: %.c
	$(OSKIT_QUIET_MAKE_INFORM) "Compiling $@"
	$(CC) -g -c -o $@ -I. -I$(OSKIT_SRCDIR)/security -I- -I.. -I$(OSKIT_SRCDIR) -include $(OSKIT_SRCDIR)/security/global.h $<


# Using a pattern rule here tells GNU make that both targets
# are made by running the commands just once.  That lets
# it to do the right thing when parallelism is enabled (-j).
%.tab.c %.tab.h: $(OSKIT_SRCDIR)/security/policy_parse.%
	$(OSKIT_QUIET_MAKE_INFORM) "Generating $@"
	$(YACC) -d $<

lex.yy.c: $(OSKIT_SRCDIR)/security/policy_scan.l
	$(OSKIT_QUIET_MAKE_INFORM) "Generating $@"
	$(LEX) $<

endif
